Skip to content

Commit de2b418

Browse files
committed
Incorporate changes that allow for null == comparison with simple behavior. I don't like the JS Behavior.
1 parent 6b688b1 commit de2b418

11 files changed

+302
-6
lines changed

defaultMethods.js

+6-4
Original file line numberDiff line numberDiff line change
@@ -800,6 +800,7 @@ function createComparator (name, func) {
800800
if (!strict && typeof a !== typeof b) {
801801
if (typeof a === 'string' && Number.isNaN(+a)) throw NaN
802802
if (typeof b === 'string' && Number.isNaN(+b)) throw NaN
803+
return func(+a, +b)
803804
}
804805
return func(a, b)
805806
}
@@ -809,8 +810,8 @@ function createComparator (name, func) {
809810
if (!strict && typeof current !== typeof prev) {
810811
if (typeof current === 'string' && Number.isNaN(+current)) throw NaN
811812
if (i === 1 && typeof prev === 'string' && Number.isNaN(+prev)) throw NaN
812-
}
813-
if (!func(prev, current)) return false
813+
if (!func(+prev, +current)) return false
814+
} else if (!func(prev, current)) return false
814815
prev = current
815816
}
816817
return true
@@ -823,6 +824,7 @@ function createComparator (name, func) {
823824
if (!strict && typeof a !== typeof b) {
824825
if (typeof a === 'string' && Number.isNaN(+a)) throw NaN
825826
if (typeof b === 'string' && Number.isNaN(+b)) throw NaN
827+
return func(+a, +b)
826828
}
827829
return func(a, b)
828830
}
@@ -832,8 +834,8 @@ function createComparator (name, func) {
832834
if (!strict && typeof current !== typeof prev) {
833835
if (typeof current === 'string' && Number.isNaN(+current)) throw NaN
834836
if (i === 1 && typeof prev === 'string' && Number.isNaN(+prev)) throw NaN
835-
}
836-
if (!func(prev, current)) return false
837+
if (!func(+prev, +current)) return false
838+
} else if (!func(prev, current)) return false
837839
prev = current
838840
}
839841
return true

optimizer.js

+1
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,7 @@ function checkIdioms (logic, engine, above) {
125125
if (typeof a !== typeof b) {
126126
if (typeof a === 'string' && Number.isNaN(+a)) throw NaN
127127
if (typeof b === 'string' && Number.isNaN(+b)) throw NaN
128+
return _comparisonFunc(+a, +b)
128129
}
129130
return _comparisonFunc(a, b)
130131
}

suites/greaterThan.json

+36
Original file line numberDiff line numberDiff line change
@@ -148,5 +148,41 @@
148148
"rule": { ">": [1, "A"] },
149149
"data": {},
150150
"error": { "type": "NaN" }
151+
},
152+
{
153+
"description": "> with (null, 1)",
154+
"rule": { ">": [null, 1] },
155+
"data": {},
156+
"result": false
157+
},
158+
{
159+
"description": "> with (1, null)",
160+
"rule": { ">": [1, null] },
161+
"data": {},
162+
"result": true
163+
},
164+
{
165+
"description": "> with (null, 0)",
166+
"rule": { ">": [null, 0] },
167+
"data": {},
168+
"result": false
169+
},
170+
{
171+
"description": "> with (null, true)",
172+
"rule": { ">": [null, true] },
173+
"data": {},
174+
"result": false
175+
},
176+
{
177+
"description": "> with (1, true)",
178+
"rule": { ">": [1, true] },
179+
"data": {},
180+
"result": false
181+
},
182+
{
183+
"description": "> with (0, false)",
184+
"rule": { ">": [0, false] },
185+
"data": {},
186+
"result": false
151187
}
152188
]

suites/greaterThanEquals.json

+38-2
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,8 @@
9696
"result": true
9797
},
9898
{
99-
"description": "> with (1n, As)",
100-
"rule": { ">": [1, "A"] },
99+
"description": ">= with (1n, As)",
100+
"rule": { ">=": [1, "A"] },
101101
"data": {},
102102
"error": { "type": "NaN" }
103103
},
@@ -106,5 +106,41 @@
106106
"rule": { ">=": [1, "A"] },
107107
"data": {},
108108
"error": { "type": "NaN" }
109+
},
110+
{
111+
"description": ">= with (null, 1)",
112+
"rule": { ">=": [null, 1] },
113+
"data": {},
114+
"result": false
115+
},
116+
{
117+
"description": ">= with (1, null)",
118+
"rule": { ">=": [1, null] },
119+
"data": {},
120+
"result": true
121+
},
122+
{
123+
"description": ">= with (null, 0)",
124+
"rule": { ">=": [null, 0] },
125+
"data": {},
126+
"result": true
127+
},
128+
{
129+
"description": ">= with (null, true)",
130+
"rule": { ">=": [null, true] },
131+
"data": {},
132+
"result": false
133+
},
134+
{
135+
"description": ">= with (1, true)",
136+
"rule": { ">=": [1, true] },
137+
"data": {},
138+
"result": true
139+
},
140+
{
141+
"description": ">= with (0, false)",
142+
"rule": { ">=": [0, false] },
143+
"data": {},
144+
"result": true
109145
}
110146
]

suites/lessThan.json

+36
Original file line numberDiff line numberDiff line change
@@ -208,5 +208,41 @@
208208
"rule": { "<": [1, "A"] },
209209
"data": {},
210210
"error": { "type": "NaN" }
211+
},
212+
{
213+
"description": "< with (null, 1)",
214+
"rule": { "<": [null, 1] },
215+
"data": {},
216+
"result": true
217+
},
218+
{
219+
"description": "< with (1, null)",
220+
"rule": { "<": [1, null] },
221+
"data": {},
222+
"result": false
223+
},
224+
{
225+
"description": "< with (null, 0)",
226+
"rule": { "<": [null, 0] },
227+
"data": {},
228+
"result": false
229+
},
230+
{
231+
"description": "< with (null, true)",
232+
"rule": { "<": [null, true] },
233+
"data": {},
234+
"result": true
235+
},
236+
{
237+
"description": "< with (1, true)",
238+
"rule": { "<": [1, true] },
239+
"data": {},
240+
"result": false
241+
},
242+
{
243+
"description": "< with (0, false)",
244+
"rule": { "<": [0, false] },
245+
"data": {},
246+
"result": false
211247
}
212248
]

suites/lessThanEquals.json

+36
Original file line numberDiff line numberDiff line change
@@ -58,5 +58,41 @@
5858
"rule": { "<=": [1, "A"] },
5959
"data": {},
6060
"error": { "type": "NaN" }
61+
},
62+
{
63+
"description": "<= with (null, 1)",
64+
"rule": { "<=": [null, 1] },
65+
"data": {},
66+
"result": true
67+
},
68+
{
69+
"description": "<= with (1, null)",
70+
"rule": { "<=": [1, null] },
71+
"data": {},
72+
"result": false
73+
},
74+
{
75+
"description": "<= with (null, 0)",
76+
"rule": { "<=": [null, 0] },
77+
"data": {},
78+
"result": true
79+
},
80+
{
81+
"description": "<= with (null, true)",
82+
"rule": { "<": [null, true] },
83+
"data": {},
84+
"result": true
85+
},
86+
{
87+
"description": "<= with (1, true)",
88+
"rule": { "<=": [1, true] },
89+
"data": {},
90+
"result": true
91+
},
92+
{
93+
"description": "<= with (0, false)",
94+
"rule": { "<=": [0, false] },
95+
"data": {},
96+
"result": true
6197
}
6298
]

suites/softEquals.json

+36
Original file line numberDiff line numberDiff line change
@@ -148,5 +148,41 @@
148148
"rule": { "==": [1, "A"] },
149149
"data": {},
150150
"error": { "type": "NaN" }
151+
},
152+
{
153+
"description": "== with (null, 1)",
154+
"rule": { "==": [null, 1] },
155+
"data": {},
156+
"result": false
157+
},
158+
{
159+
"description": "== with (1, null)",
160+
"rule": { "==": [1, null] },
161+
"data": {},
162+
"result": false
163+
},
164+
{
165+
"description": "== with (null, 0)",
166+
"rule": { "==": [null, 0] },
167+
"data": {},
168+
"result": true
169+
},
170+
{
171+
"description": "== with (null, true)",
172+
"rule": { "==": [null, true] },
173+
"data": {},
174+
"result": false
175+
},
176+
{
177+
"description": "== with (1, true)",
178+
"rule": { "==": [1, true] },
179+
"data": {},
180+
"result": true
181+
},
182+
{
183+
"description": "== with (0, false)",
184+
"rule": { "==": [0, false] },
185+
"data": {},
186+
"result": true
151187
}
152188
]

suites/softNotEquals.json

+36
Original file line numberDiff line numberDiff line change
@@ -142,5 +142,41 @@
142142
"rule": { "!=": [1, "A"] },
143143
"data": {},
144144
"error": { "type": "NaN" }
145+
},
146+
{
147+
"description": "!= with (null, 1)",
148+
"rule": { "!=": [null, 1] },
149+
"data": {},
150+
"result": true
151+
},
152+
{
153+
"description": "!= with (1, null)",
154+
"rule": { "!=": [1, null] },
155+
"data": {},
156+
"result": true
157+
},
158+
{
159+
"description": "!= with (null, 0)",
160+
"rule": { "!=": [null, 0] },
161+
"data": {},
162+
"result": false
163+
},
164+
{
165+
"description": "!= with (null, true)",
166+
"rule": { "!=": [null, true] },
167+
"data": {},
168+
"result": true
169+
},
170+
{
171+
"description": "!= with (1, true)",
172+
"rule": { "!=": [1, true] },
173+
"data": {},
174+
"result": false
175+
},
176+
{
177+
"description": "!= with (0, false)",
178+
"rule": { "!=": [0, false] },
179+
"data": {},
180+
"result": false
145181
}
146182
]

suites/strictEquals.json

+36
Original file line numberDiff line numberDiff line change
@@ -148,5 +148,41 @@
148148
"rule": { "===": [1, "A"] },
149149
"data": {},
150150
"result": false
151+
},
152+
{
153+
"description": "=== with (null, 1)",
154+
"rule": { "===": [null, 1] },
155+
"data": {},
156+
"result": false
157+
},
158+
{
159+
"description": "=== with (1, null)",
160+
"rule": { "===": [1, null] },
161+
"data": {},
162+
"result": false
163+
},
164+
{
165+
"description": "=== with (null, 0)",
166+
"rule": { "===": [null, 0] },
167+
"data": {},
168+
"result": false
169+
},
170+
{
171+
"description": "=== with (null, true)",
172+
"rule": { "===": [null, true] },
173+
"data": {},
174+
"result": false
175+
},
176+
{
177+
"description": "=== with (1, true)",
178+
"rule": { "===": [1, true] },
179+
"data": {},
180+
"result": false
181+
},
182+
{
183+
"description": "=== with (0, false)",
184+
"rule": { "===": [0, false] },
185+
"data": {},
186+
"result": false
151187
}
152188
]

0 commit comments

Comments
 (0)