Skip to content
This repository was archived by the owner on Jul 15, 2021. It is now read-only.

Commit 60cfa73

Browse files
committed
Merge branch 'release/1.0.2'
2 parents 1d7908b + 35c762f commit 60cfa73

File tree

8 files changed

+180
-165
lines changed

8 files changed

+180
-165
lines changed

.release.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@
33
"package_file_location": "./package.json",
44
"no_confirm": false,
55
"skip_git_pull": false,
6-
"skip_git_push": true,
6+
"skip_git_push": false,
77
"set_release_message": true,
88
"release": "origin",
99
"pre_commit_commands": [
1010
"npm run build",
1111
"npm run test"
1212
],
1313
"post_commit_commands": [],
14-
"post_complete_commands": [],
14+
"post_complete_commands": [
15+
"npm publish"
16+
],
1517
"additional_files_to_commit": [
1618
"./dist/**/*"
1719
]

.travis.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ language: node_js
33
sudo: false
44

55
node_js:
6-
- "0.12"
76
- "stable"
87

98
before_script:

package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "hot-formula-parser",
3-
"version": "1.0.1",
3+
"version": "1.0.2",
44
"description": "Formula parser",
55
"main": "dist/formula-parser.js",
66
"scripts": {
@@ -38,6 +38,7 @@
3838
"babel-preset-es2015": "^6.3.13",
3939
"babel-register": "^6.3.13",
4040
"chai": "^3.4.1",
41+
"chai-stats": "^0.3.0",
4142
"del": "^2.2.0",
4243
"generate-release": "^0.6.3",
4344
"glob": "^6.0.3",

test/integration/parsing/formula/engineering.js

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,25 +13,25 @@ describe('.parse() engineering formulas', () => {
1313
it('BESSELI', () => {
1414
expect(parser.parse('BESSELI()')).to.deep.equal({error: '#VALUE?', result: null});
1515
expect(parser.parse('BESSELI(1.4)')).to.deep.equal({error: '#VALUE?', result: null});
16-
expect(parser.parse('BESSELI(1.4, 1)')).to.deep.equal({error: null, result: 0.8860919793963105});
16+
expect(parser.parse('BESSELI(1.4, 1)')).to.almost.eql({error: null, result: 0.8860919793963105}, 1e-9);
1717
});
1818

1919
it('BESSELJ', () => {
2020
expect(parser.parse('BESSELJ()')).to.deep.equal({error: '#VALUE?', result: null});
2121
expect(parser.parse('BESSELJ(1.4)')).to.deep.equal({error: '#VALUE?', result: null});
22-
expect(parser.parse('BESSELJ(1.4, 1)')).to.deep.equal({error: null, result: 0.5419477138848564});
22+
expect(parser.parse('BESSELJ(1.4, 1)')).to.almost.eql({error: null, result: 0.5419477138848564}, 1e-9);
2323
});
2424

2525
it('BESSELK', () => {
2626
expect(parser.parse('BESSELK()')).to.deep.equal({error: '#VALUE?', result: null});
2727
expect(parser.parse('BESSELK(1.4)')).to.deep.equal({error: '#VALUE?', result: null});
28-
expect(parser.parse('BESSELK(1.4, 1)')).to.deep.equal({error: null, result: 0.32083590550458985});
28+
expect(parser.parse('BESSELK(1.4, 1)')).to.deep.equal({error: null, result: 0.32083590550458985}, 1e-9);
2929
});
3030

3131
it('BESSELY', () => {
3232
expect(parser.parse('BESSELY()')).to.deep.equal({error: '#VALUE?', result: null});
3333
expect(parser.parse('BESSELY(1.4)')).to.deep.equal({error: '#VALUE?', result: null});
34-
expect(parser.parse('BESSELY(1.4, 1)')).to.deep.equal({error: null, result: -0.47914697411134044});
34+
expect(parser.parse('BESSELY(1.4, 1)')).to.deep.equal({error: null, result: -0.47914697411134044}, 1e-9);
3535
});
3636

3737
it('BIN2DEC', () => {
@@ -140,14 +140,14 @@ describe('.parse() engineering formulas', () => {
140140

141141
it('ERF', () => {
142142
expect(parser.parse('ERF()')).to.deep.equal({error: '#VALUE?', result: null});
143-
expect(parser.parse('ERF(1)')).to.deep.equal({error: null, result: 0.8427007929497149});
144-
expect(parser.parse('ERF(2)')).to.deep.equal({error: null, result: 0.9953222650189527});
143+
expect(parser.parse('ERF(1)')).to.almost.eql({error: null, result: 0.8427007929497149}, 1e-9);
144+
expect(parser.parse('ERF(2)')).to.almost.eql({error: null, result: 0.9953222650189527}, 1e-9);
145145
});
146146

147147
it('ERFC', () => {
148148
expect(parser.parse('ERFC()')).to.deep.equal({error: '#VALUE?', result: null});
149-
expect(parser.parse('ERFC(0)')).to.deep.equal({error: null, result: 0.9999999999999999});
150-
expect(parser.parse('ERFC(1)')).to.deep.equal({error: null, result: 0.1572992070502851});
149+
expect(parser.parse('ERFC(0)')).to.almost.eql({error: null, result: 1}, 1e-9);
150+
expect(parser.parse('ERFC(1)')).to.almost.eql({error: null, result: 0.1572992070502851}, 1e-9);
151151
});
152152

153153
it('GESTEP', () => {
@@ -191,7 +191,7 @@ describe('.parse() engineering formulas', () => {
191191
expect(parser.parse('IMARGUMENT()')).to.deep.equal({error: '#VALUE?', result: null});
192192
expect(parser.parse('IMARGUMENT(1)')).to.deep.equal({error: '#ERROR!', result: null});
193193
expect(parser.parse('IMARGUMENT(0)')).to.deep.equal({error: '#DIV/0!', result: null});
194-
expect(parser.parse('IMARGUMENT("3+4i")')).to.deep.equal({error: null, result: 0.9272952180016122});
194+
expect(parser.parse('IMARGUMENT("3+4i")')).to.almost.eql({error: null, result: 0.9272952180016122}, 1e-9);
195195
});
196196

197197
it('IMCONJUGATE', () => {

test/integration/parsing/formula/lookup-reference.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,16 @@ describe('.parse() lookup-reference formulas', () => {
1010
parser = null;
1111
});
1212

13-
it('MATCH', () => {});
13+
it('MATCH', () => {
14+
parser.setVariable('foo', [0, 1, 2, 3, 4, 100, 7]);
15+
parser.setVariable('bar', ['jima', 'jimb', 'jimc', 'bernie']);
16+
17+
expect(parser.parse('MATCH()')).to.deep.equal({error: '#N/A', result: null});
18+
expect(parser.parse('MATCH(1)')).to.deep.equal({error: '#N/A', result: null});
19+
expect(parser.parse('MATCH(1, foo)')).to.deep.equal({error: null, result: 2});
20+
expect(parser.parse('MATCH(4, foo, 1)')).to.deep.equal({error: null, result: 5});
21+
expect(parser.parse('MATCH("jima", bar, 0)')).to.deep.equal({error: null, result: 1});
22+
expect(parser.parse('MATCH("j?b", bar, 0)')).to.deep.equal({error: '#N/A', result: null});
23+
expect(parser.parse('MATCH("jimc", bar, 0)')).to.deep.equal({error: null, result: 3});
24+
});
1425
});

test/integration/parsing/formula/math-trig.js

Lines changed: 31 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ describe('.parse() math-trig formulas', () => {
2727
});
2828

2929
it('ACOT', () => {
30-
expect(parser.parse('ACOT(1)')).to.deep.equal({error: null, result: 0.7853981633974483});
31-
expect(parser.parse('ACOT(-1)')).to.deep.equal({error: null, result: -0.7853981633974483});
30+
expect(parser.parse('ACOT(1)')).to.almost.eql({error: null, result: 0.7853981633974483}, 1e-9);
31+
expect(parser.parse('ACOT(-1)')).to.almost.eql({error: null, result: -0.7853981633974483}, 1e-9);
3232
});
3333

3434
it('ACOTH', () => {
@@ -65,26 +65,26 @@ describe('.parse() math-trig formulas', () => {
6565
it('ASIN', () => {
6666
expect(parser.parse('ASIN()')).to.deep.equal({error: '#VALUE?', result: null});
6767
expect(parser.parse('ASIN("value")')).to.deep.equal({error: '#VALUE?', result: null});
68-
expect(parser.parse('ASIN(0.5)')).to.deep.equal({error: null, result: 0.5235987755982988});
68+
expect(parser.parse('ASIN(0.5)')).to.almost.eql({error: null, result: 0.5235987755982989}, 1e-9);
6969
});
7070

7171
it('ASINH', () => {
7272
expect(parser.parse('ASINH()')).to.deep.equal({error: '#VALUE?', result: null});
7373
expect(parser.parse('ASINH("value")')).to.deep.equal({error: '#VALUE?', result: null});
74-
expect(parser.parse('ASINH(0.5)')).to.deep.equal({error: null, result: 0.48121182505960347});
74+
expect(parser.parse('ASINH(0.5)')).to.almost.eql({error: null, result: 0.48121182505960347}, 1e-9);
7575
});
7676

7777
it('ATAN', () => {
7878
expect(parser.parse('ATAN()')).to.deep.equal({error: '#VALUE?', result: null});
7979
expect(parser.parse('ATAN("value")')).to.deep.equal({error: '#VALUE?', result: null});
80-
expect(parser.parse('ATAN(0.5)')).to.deep.equal({error: null, result: 0.46364760900080615});
80+
expect(parser.parse('ATAN(0.5)')).to.almost.eql({error: null, result: 0.4636476090008061}, 1e-9);
8181
});
8282

8383
it('ATAN2', () => {
8484
expect(parser.parse('ATAN2()')).to.deep.equal({error: '#VALUE?', result: null});
8585
expect(parser.parse('ATAN2(1)')).to.deep.equal({error: '#VALUE?', result: null});
8686
expect(parser.parse('ATAN2("value")')).to.deep.equal({error: '#VALUE?', result: null});
87-
expect(parser.parse('ATAN2(1, 1)')).to.deep.equal({error: null, result: 0.7853981633974483});
87+
expect(parser.parse('ATAN2(1, 1)')).to.almost.eql({error: null, result: 0.7853981633974483}, 1e-9);
8888
});
8989

9090
it('ATANH', () => {
@@ -135,46 +135,46 @@ describe('.parse() math-trig formulas', () => {
135135
expect(parser.parse('COS()')).to.deep.equal({error: '#VALUE?', result: null});
136136
expect(parser.parse('COS("value")')).to.deep.equal({error: '#VALUE?', result: null});
137137
expect(parser.parse('COS(0)')).to.deep.equal({error: null, result: 1});
138-
expect(parser.parse('COS(1)')).to.deep.equal({error: null, result: 0.5403023058681398});
138+
expect(parser.parse('COS(1)')).to.almost.eql({error: null, result: 0.5403023058681398}, 1e-9);
139139
});
140140

141141
it('COSH', () => {
142142
expect(parser.parse('COSH()')).to.deep.equal({error: '#VALUE?', result: null});
143143
expect(parser.parse('COSH("value")')).to.deep.equal({error: '#VALUE?', result: null});
144144
expect(parser.parse('COSH(0)')).to.deep.equal({error: null, result: 1});
145-
expect(parser.parse('COSH(1)')).to.deep.equal({error: null, result: 1.5430806348152437});
145+
expect(parser.parse('COSH(1)')).to.almost.eql({error: null, result: 1.5430806348152437}, 1e-9);
146146
});
147147

148148
it('COT', () => {
149149
expect(parser.parse('COT()')).to.deep.equal({error: '#VALUE?', result: null});
150150
expect(parser.parse('COT("value")')).to.deep.equal({error: '#VALUE?', result: null});
151151
expect(parser.parse('COT(0)')).to.deep.equal({error: null, result: Infinity});
152-
expect(parser.parse('COT(1)')).to.deep.equal({error: null, result: 0.6420926159343306});
153-
expect(parser.parse('COT(2)')).to.deep.equal({error: null, result: -0.45765755436028577});
152+
expect(parser.parse('COT(1)')).to.almost.eql({error: null, result: 0.6420926159343306}, 1e-9);
153+
expect(parser.parse('COT(2)')).to.almost.eql({error: null, result: -0.45765755436028577}, 1e-9);
154154
});
155155

156156
it('COTH', () => {
157157
expect(parser.parse('COTH()')).to.deep.equal({error: '#VALUE?', result: null});
158158
expect(parser.parse('COTH("value")')).to.deep.equal({error: '#VALUE?', result: null});
159159
expect(parser.parse('COTH(0)')).to.deep.equal({error: null, result: Infinity});
160-
expect(parser.parse('COTH(1)')).to.deep.equal({error: null, result: 1.3130352854993312});
161-
expect(parser.parse('COTH(2)')).to.deep.equal({error: null, result: 1.0373147207275482});
160+
expect(parser.parse('COTH(1)')).to.almost.eql({error: null, result: 1.3130352854993312}, 1e-9);
161+
expect(parser.parse('COTH(2)')).to.almost.eql({error: null, result: 1.0373147207275482}, 1e-9);
162162
});
163163

164164
it('CSC', () => {
165165
expect(parser.parse('CSC()')).to.deep.equal({error: '#VALUE?', result: null});
166166
expect(parser.parse('CSC("value")')).to.deep.equal({error: '#VALUE?', result: null});
167167
expect(parser.parse('CSC(0)')).to.deep.equal({error: null, result: Infinity});
168-
expect(parser.parse('CSC(1)')).to.deep.equal({error: null, result: 1.1883951057781212});
169-
expect(parser.parse('CSC(2)')).to.deep.equal({error: null, result: 1.0997501702946164});
168+
expect(parser.parse('CSC(1)')).to.almost.eql({error: null, result: 1.1883951057781212}, 1e-9);
169+
expect(parser.parse('CSC(2)')).to.almost.eql({error: null, result: 1.0997501702946164}, 1e-9);
170170
});
171171

172172
it('CSCH', () => {
173173
expect(parser.parse('CSCH()')).to.deep.equal({error: '#VALUE?', result: null});
174174
expect(parser.parse('CSCH("value")')).to.deep.equal({error: '#VALUE?', result: null});
175175
expect(parser.parse('CSCH(0)')).to.deep.equal({error: null, result: Infinity});
176-
expect(parser.parse('CSCH(1)')).to.deep.equal({error: null, result: 0.8509181282393216});
177-
expect(parser.parse('CSCH(2)')).to.deep.equal({error: null, result: 0.27572056477178325});
176+
expect(parser.parse('CSCH(1)')).to.almost.eql({error: null, result: 0.8509181282393216}, 1e-9);
177+
expect(parser.parse('CSCH(2)')).to.almost.eql({error: null, result: 0.27572056477178325}, 1e-9);
178178
});
179179

180180
it('DECIMAL', () => {
@@ -191,7 +191,7 @@ describe('.parse() math-trig formulas', () => {
191191
expect(parser.parse('DEGREES("value")')).to.deep.equal({error: '#VALUE?', result: null});
192192
expect(parser.parse('DEGREES(PI())')).to.deep.equal({error: null, result: 180});
193193
expect(parser.parse('DEGREES(PI() / 2)')).to.deep.equal({error: null, result: 90});
194-
expect(parser.parse('DEGREES(1.1)')).to.deep.equal({error: null, result: 63.02535746439057});
194+
expect(parser.parse('DEGREES(1.1)')).to.almost.eql({error: null, result: 63.02535746439057}, 1e-9);
195195
});
196196

197197
it('DIVIDE', () => {
@@ -327,9 +327,9 @@ describe('.parse() math-trig formulas', () => {
327327
expect(parser.parse('MINUS("value")')).to.deep.equal({error: '#N/A', result: null});
328328
expect(parser.parse('MINUS(1)')).to.deep.equal({error: '#N/A', result: null});
329329
expect(parser.parse('MINUS(1, 2)')).to.deep.equal({error: null, result: -1});
330-
expect(parser.parse('MINUS(1.1, 1.2)')).to.deep.equal({error: null, result: -0.09999999999999987}); // JavaScript engine number precision
330+
expect(parser.parse('MINUS(1.1, 1.2)')).to.almost.eql({error: null, result: -0.1}, 1e-9);
331331
expect(parser.parse('MINUS(1.2, 1.2)')).to.deep.equal({error: null, result: 0});
332-
expect(parser.parse('MINUS(1.3, 1.2)')).to.deep.equal({error: null, result: 0.10000000000000009}); // JavaScript engine number precision
332+
expect(parser.parse('MINUS(1.3, 1.2)')).to.almost.eql({error: null, result: 0.1}, 1e-9);
333333
});
334334

335335
it('MOD', () => {
@@ -490,15 +490,15 @@ describe('.parse() math-trig formulas', () => {
490490
it('SEC', () => {
491491
expect(parser.parse('SEC()')).to.deep.equal({error: '#VALUE?', result: null});
492492
expect(parser.parse('SEC("value")')).to.deep.equal({error: '#VALUE?', result: null});
493-
expect(parser.parse('SEC(1)')).to.deep.equal({error: null, result: 1.8508157176809255});
494-
expect(parser.parse('SEC(30)')).to.deep.equal({error: null, result: 6.482921234962678});
493+
expect(parser.parse('SEC(1)')).to.almost.eql({error: null, result: 1.8508157176809255}, 1e-9);
494+
expect(parser.parse('SEC(30)')).to.almost.eql({error: null, result: 6.482921234962678}, 1e-9);
495495
});
496496

497497
it('SECH', () => {
498498
expect(parser.parse('SECH()')).to.deep.equal({error: '#VALUE?', result: null});
499499
expect(parser.parse('SECH("value")')).to.deep.equal({error: '#VALUE?', result: null});
500-
expect(parser.parse('SECH(1)')).to.deep.equal({error: null, result: 0.6480542736638855});
501-
expect(parser.parse('SECH(30)')).to.deep.equal({error: null, result: 1.8715245937680314e-13});
500+
expect(parser.parse('SECH(1)')).to.almost.eql({error: null, result: 0.6480542736638855}, 1e-9);
501+
expect(parser.parse('SECH(30)')).to.almost.eql({error: null, result: 1.8715245937680314e-13}, 1e-9);
502502
});
503503

504504
it('SERIESSUM', () => {
@@ -509,7 +509,7 @@ describe('.parse() math-trig formulas', () => {
509509
-1 / parser.parse('FACT(6)').result,
510510
]);
511511

512-
expect(parser.parse('SERIESSUM(PI() / 4, 0, 2, SERIESSUM_ARR)')).to.deep.equal({error: null, result: 0.7071032148228457});
512+
expect(parser.parse('SERIESSUM(PI() / 4, 0, 2, SERIESSUM_ARR)')).to.almost.eql({error: null, result: 0.7071032148228457}, 1e-9);
513513
});
514514

515515
it('SIGN', () => {
@@ -530,7 +530,7 @@ describe('.parse() math-trig formulas', () => {
530530
it('SINH', () => {
531531
expect(parser.parse('SINH()')).to.deep.equal({error: '#VALUE?', result: null});
532532
expect(parser.parse('SINH("value")')).to.deep.equal({error: '#VALUE?', result: null});
533-
expect(parser.parse('SINH(1)')).to.deep.equal({error: null, result: 1.1752011936438014});
533+
expect(parser.parse('SINH(1)')).to.almost.eql({error: null, result: 1.1752011936438014}, 1e-9);
534534
});
535535

536536
it('SQRT', () => {
@@ -544,7 +544,7 @@ describe('.parse() math-trig formulas', () => {
544544
it('SQRTPI', () => {
545545
expect(parser.parse('SQRTPI()')).to.deep.equal({error: '#VALUE?', result: null});
546546
expect(parser.parse('SQRTPI("value")')).to.deep.equal({error: '#VALUE?', result: null});
547-
expect(parser.parse('SQRTPI(64)')).to.deep.equal({error: null, result: 14.179630807244127});
547+
expect(parser.parse('SQRTPI(64)')).to.almost.eql({error: null, result: 14.179630807244127}, 1e-9);
548548
});
549549

550550
it('SUBTOTAL', () => {});
@@ -553,7 +553,7 @@ describe('.parse() math-trig formulas', () => {
553553
expect(parser.parse('SUM()')).to.deep.equal({error: null, result: 0});
554554
expect(parser.parse('SUM("value")')).to.deep.equal({error: null, result: 0});
555555
expect(parser.parse('SUM(64)')).to.deep.equal({error: null, result: 64});
556-
expect(parser.parse('SUM(64, 3.3, 0.1)')).to.deep.equal({error: null, result: 67.39999999999999});
556+
expect(parser.parse('SUM(64, 3.3, 0.1)')).to.almost.eql({error: null, result: 67.4}, 1e-9);
557557
});
558558

559559
it('SUMIF', () => {
@@ -588,7 +588,7 @@ describe('.parse() math-trig formulas', () => {
588588
expect(parser.parse('SUMSQ()')).to.deep.equal({error: '#VALUE?', result: null});
589589
expect(parser.parse('SUMSQ("value")')).to.deep.equal({error: '#VALUE?', result: null});
590590
expect(parser.parse('SUMSQ(64)')).to.deep.equal({error: null, result: 4096});
591-
expect(parser.parse('SUMSQ(64, 3.3, 0.1)')).to.deep.equal({error: null, result: 4106.900000000001});
591+
expect(parser.parse('SUMSQ(64, 3.3, 0.1)')).to.almost.eql({error: null, result: 4106.9}, 1e-9);
592592
});
593593

594594
it('SUMX2MY2', () => {
@@ -630,14 +630,14 @@ describe('.parse() math-trig formulas', () => {
630630
it('TAN', () => {
631631
expect(parser.parse('TAN()')).to.deep.equal({error: '#VALUE?', result: null});
632632
expect(parser.parse('TAN("value")')).to.deep.equal({error: '#VALUE?', result: null});
633-
expect(parser.parse('TAN(1)')).to.deep.equal({error: null, result: 1.5574077246549023});
634-
expect(parser.parse('TAN(RADIANS(45))')).to.deep.equal({error: null, result: 0.9999999999999999});
633+
expect(parser.parse('TAN(1)')).to.almost.eql({error: null, result: 1.5574077246549023}, 1e-9);
634+
expect(parser.parse('TAN(RADIANS(45))')).to.almost.eql({error: null, result: 1}, 1e-9);
635635
});
636636

637637
it('TANH', () => {
638638
expect(parser.parse('TANH()')).to.deep.equal({error: '#VALUE?', result: null});
639639
expect(parser.parse('TANH("value")')).to.deep.equal({error: '#VALUE?', result: null});
640-
expect(parser.parse('TANH(1)')).to.deep.equal({error: null, result: 0.761594155955765});
640+
expect(parser.parse('TANH(1)')).to.almost.eql({error: null, result: 0.761594155955765}, 1e-9);
641641
});
642642

643643
it('TRUNC', () => {

0 commit comments

Comments
 (0)