From ae64d1f85985cdeb28baa5733a82ebb214c69e5e Mon Sep 17 00:00:00 2001 From: Fabio Issamu Oshiro Date: Wed, 2 Nov 2022 12:24:28 -0300 Subject: [PATCH] fix: average #93 --- src/formulas.js | 6 +++++- test/1-basic-test.js | 15 +++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/src/formulas.js b/src/formulas.js index b18fc7c..69cf1a7 100644 --- a/src/formulas.js +++ b/src/formulas.js @@ -478,7 +478,11 @@ function EXP(n) { } function avg() { - return sum.apply(this, arguments) / counta.apply(this, arguments); + var aux = counta.apply(this, arguments); + if (aux == 0) { + throw Error('#DIV/0!'); + } + return sum.apply(this, arguments) / aux; } function stDeviation() { diff --git a/test/1-basic-test.js b/test/1-basic-test.js index 9954174..f654307 100644 --- a/test/1-basic-test.js +++ b/test/1-basic-test.js @@ -15,8 +15,8 @@ const errorValues = { describe('XLSX_CALC', function() { let workbook; - beforeEach(function() { - workbook = { + function create_workbook() { + return { Sheets: { Sheet1: { A1: {}, @@ -38,6 +38,9 @@ describe('XLSX_CALC', function() { } } }; + } + beforeEach(function() { + workbook = create_workbook(); }); describe('ROUND', () => { @@ -1023,6 +1026,14 @@ describe('XLSX_CALC', function() { XLSX_CALC(workbook); assert.equal(workbook.Sheets.Sheet1.A7.v, 0.25); }); + it('should calc AVERAGE of empty cells as div by zero', function() { + workbook.Sheets.Sheet1 = {}; + workbook.Sheets.Sheet1.B1 = {f: 'AVERAGE(A1:A6)'}; + XLSX_CALC(workbook); + assert.equal(workbook.Sheets.Sheet1.B1.v, errorValues["#DIV/0!"]); + assert.equal(workbook.Sheets.Sheet1.B1.w, '#DIV/0!'); + assert.equal(workbook.Sheets.Sheet1.B1.t, 'e'); + }); }); describe('IRR', function() { it('calcs IRR', function() {