Skip to content

Commit 1967fd4

Browse files
committed
return as soon as finding a valid positive number
- apply isNumeric test - should skip Infinity - no need to compuet sum - declare known size of Array
1 parent 7d2af31 commit 1967fd4

File tree

4 files changed

+43
-33
lines changed

4 files changed

+43
-33
lines changed

src/traces/pie/calc.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ function calc(gd, trace) {
3030
var i, pt;
3131

3232
if(trace.dlabel) {
33-
labels = [];
33+
labels = new Array(len);
3434
for(i = 0; i < len; i++) {
3535
labels[i] = String(trace.label0 + i * trace.dlabel);
3636
}

src/traces/pie/defaults.js

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
'use strict';
1010

11+
var isNumeric = require('fast-isnumeric');
1112
var Lib = require('../../lib');
1213
var attributes = require('./attributes');
1314
var handleDomainDefaults = require('../../plots/domain').defaults;
@@ -24,16 +25,15 @@ function handleLabelsAndValues(labels, values) {
2425
if(!isFinite(len)) len = 0;
2526

2627
if(len && hasValues) {
27-
var sum = 0;
28+
var hasPositive;
2829
for(var i = 0; i < len; i++) {
29-
var v = +values[i];
30-
if(v < 0) {
31-
sum = 0;
30+
var v = values[i];
31+
if(isNumeric(v) && v > 0) {
32+
hasPositive = true;
3233
break;
3334
}
34-
sum += v;
3535
}
36-
if(!sum) len = 0;
36+
if(!hasPositive) len = 0;
3737
}
3838

3939
return {

test/jasmine/tests/funnelarea_test.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,21 @@ describe('Funnelarea defaults', function() {
7171
expect(out.visible).toBe(false);
7272
});
7373

74-
it('allows falsy json values to skip but does not allow bad values and zero sum', function() {
75-
var out;
74+
it('skip negatives and non-JSON values and avoid zero total', function() {
75+
[
76+
-1, '-1',
77+
0, '0',
78+
false, 'false',
79+
true, 'true',
80+
null, 'null',
81+
NaN, 'NaN',
82+
-Infinity, '-Infinity',
83+
Infinity, 'Infinity',
84+
undefined, 'undefined',
85+
'', [], {}
86+
].forEach(function(e) {
87+
var out;
7688

77-
[null, 0, '', false].forEach(function(e) {
7889
out = _supply({type: 'pie', values: [1, e, 3]});
7990
expect(out.visible).toBe(true, e);
8091
expect(out._length).toBe(3, e);
@@ -91,18 +102,12 @@ describe('Funnelarea defaults', function() {
91102
expect(out.visible).toBe(false, e);
92103
expect(out._length).toBe(undefined, e);
93104
});
105+
});
94106

95-
['not a positive value', '-1', -1, NaN, undefined].forEach(function(e) {
96-
out = _supply({type: 'pie', values: [0, e]});
97-
expect(out.visible).toBe(false, e);
98-
expect(out._length).toBe(undefined, e);
99-
100-
out = _supply({type: 'pie', values: [1, e]});
101-
expect(out.visible).toBe(false, e);
102-
expect(out._length).toBe(undefined, e);
103-
});
104-
107+
it('convert positive numbers in string format', function() {
105108
['1', '+1', '1e1'].forEach(function(e) {
109+
var out;
110+
106111
out = _supply({type: 'pie', values: [0, e]});
107112
expect(out.visible).toBe(true, e);
108113
expect(out._length).toBe(2, e);

test/jasmine/tests/pie_test.js

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -55,10 +55,21 @@ describe('Pie defaults', function() {
5555
expect(out.visible).toBe(false);
5656
});
5757

58-
it('allows falsy json values to skip but does not allow bad values and zero sum', function() {
59-
var out;
58+
it('skip negatives and non-JSON values and avoid zero total', function() {
59+
[
60+
-1, '-1',
61+
0, '0',
62+
false, 'false',
63+
true, 'true',
64+
null, 'null',
65+
NaN, 'NaN',
66+
-Infinity, '-Infinity',
67+
Infinity, 'Infinity',
68+
undefined, 'undefined',
69+
'', [], {}
70+
].forEach(function(e) {
71+
var out;
6072

61-
[null, 0, '', false].forEach(function(e) {
6273
out = _supply({type: 'pie', values: [1, e, 3]});
6374
expect(out.visible).toBe(true, e);
6475
expect(out._length).toBe(3, e);
@@ -75,18 +86,12 @@ describe('Pie defaults', function() {
7586
expect(out.visible).toBe(false, e);
7687
expect(out._length).toBe(undefined, e);
7788
});
89+
});
7890

79-
['not a positive value', '-1', -1, NaN, -Infinity, undefined].forEach(function(e) {
80-
out = _supply({type: 'pie', values: [0, e]});
81-
expect(out.visible).toBe(false, e);
82-
expect(out._length).toBe(undefined, e);
83-
84-
out = _supply({type: 'pie', values: [1, e]});
85-
expect(out.visible).toBe(false, e);
86-
expect(out._length).toBe(undefined, e);
87-
});
88-
91+
it('convert positive numbers in string format', function() {
8992
['1', '+1', '1e1'].forEach(function(e) {
93+
var out;
94+
9095
out = _supply({type: 'pie', values: [0, e]});
9196
expect(out.visible).toBe(true, e);
9297
expect(out._length).toBe(2, e);

0 commit comments

Comments
 (0)