Skip to content

Commit 9a11698

Browse files
committed
isNull and other convenience functions
1 parent ad03448 commit 9a11698

10 files changed

+309
-3
lines changed

src/Core__Null.mjs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,10 @@ function flatMap(value, f) {
6363
}
6464
}
6565

66+
function isNull(i) {
67+
return i === null;
68+
}
69+
6670
export {
6771
equal ,
6872
compare ,
@@ -72,5 +76,6 @@ export {
7276
map ,
7377
mapWithDefault ,
7478
flatMap ,
79+
isNull ,
7580
}
7681
/* No side effect */

src/Core__Null.res

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,5 @@ let flatMap = (value, f) =>
4949
| Some(x) => f(x)
5050
| None => null
5151
}
52+
53+
let isNull = i => i == null

src/Core__Null.resi

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,3 +174,17 @@ Null.flatMap(null, addIfAboveOne) // null
174174
```
175175
*/
176176
let flatMap: (t<'a>, 'a => t<'b>) => t<'b>
177+
178+
/**
179+
`isNull(value)` checks if `value===null`
180+
181+
## Examples
182+
183+
```rescript
184+
"abc"->Null.make->Null.isNull // false
185+
Nullable.undefined->Null.make->Null.isNull // false
186+
Null.null->Null.isNull // true
187+
None->Null.make->Null.isNull // false
188+
```
189+
*/
190+
let isNull: t<'a> => bool

src/Core__Nullable.mjs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,22 @@ function flatMap(value, f) {
6262
}
6363
}
6464

65+
function isNull(i) {
66+
return i === null;
67+
}
68+
69+
function isUndefined(i) {
70+
return i === undefined;
71+
}
72+
73+
function isNullOrUndefined(i) {
74+
if (i === undefined) {
75+
return true;
76+
} else {
77+
return i === null;
78+
}
79+
}
80+
6581
export {
6682
equal ,
6783
compare ,
@@ -71,5 +87,8 @@ export {
7187
map ,
7288
mapWithDefault ,
7389
flatMap ,
90+
isNull ,
91+
isUndefined ,
92+
isNullOrUndefined ,
7493
}
7594
/* No side effect */

src/Core__Nullable.res

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,3 +49,7 @@ let flatMap = (value, f) =>
4949
| Some(x) => f(x)
5050
| None => Obj.magic(value)
5151
}
52+
53+
let isNull = i => i == null
54+
let isUndefined = i => i == undefined
55+
let isNullOrUndefined = i => i == undefined || i == null

src/Core__Nullable.resi

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,3 +184,45 @@ Nullable.flatMap(Nullable.null, addIfAboveOne) // undefined
184184
```
185185
*/
186186
let flatMap: (t<'a>, 'a => t<'b>) => t<'b>
187+
188+
/**
189+
`isNull(value)` checks if `value===null`
190+
191+
## Examples
192+
193+
```rescript
194+
"abc"->Nullable.make->Nullable.isNull // false
195+
Nullable.undefined->Nullable.isNull // false
196+
Nullable.null->Nullable.isNull // true
197+
None->Nullable.make->Nullable.isNull // false
198+
```
199+
*/
200+
let isNull: t<'a> => bool
201+
202+
/**
203+
`isUndefined(value)` checks if `value===undefined`
204+
205+
## Examples
206+
207+
```rescript
208+
"abc"->Nullable.make->Nullable.isUndefined // false
209+
Nullable.null->Nullable.isUndefined // false
210+
Nullable.undefined->Nullable.isUndefined // true
211+
None->Nullable.make->Nullable.isUndefined // true
212+
```
213+
*/
214+
let isUndefined: t<'a> => bool
215+
216+
/**
217+
`isNullOrUndefined(value)` checks if `value===undefined || value===null`
218+
219+
## Examples
220+
221+
```rescript
222+
"abc"->Nullable.make->Nullable.isNullOrUndefined // false
223+
Nullable.null->Nullable.isNullOrUndefined // true
224+
Nullable.undefined->Nullable.isUndefined // true
225+
None->Nullable.make->Nullable.isNullOrUndefined // true
226+
```
227+
*/
228+
let isNullOrUndefined: t<'a> => bool

test/NullableTests.mjs

Lines changed: 173 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,173 @@
1+
// Generated by ReScript, PLEASE EDIT WITH CARE
2+
3+
import * as Test from "./Test.mjs";
4+
import * as Caml_obj from "rescript/lib/es6/caml_obj.js";
5+
import * as Core__Null from "../src/Core__Null.mjs";
6+
import * as Core__Nullable from "../src/Core__Nullable.mjs";
7+
8+
var eq = Caml_obj.equal;
9+
10+
Test.run([
11+
[
12+
"NullableTests.res",
13+
7,
14+
20,
15+
38
16+
],
17+
"isNull when null"
18+
], Core__Nullable.isNull(null), eq, true);
19+
20+
Test.run([
21+
[
22+
"NullableTests.res",
23+
8,
24+
20,
25+
39
26+
],
27+
"isNull when undef"
28+
], Core__Nullable.isNull(undefined), eq, false);
29+
30+
Test.run([
31+
[
32+
"NullableTests.res",
33+
9,
34+
20,
35+
37
36+
],
37+
"isNull when abc"
38+
], Core__Nullable.isNull("abc"), eq, false);
39+
40+
Test.run([
41+
[
42+
"NullableTests.res",
43+
10,
44+
20,
45+
38
46+
],
47+
"isNull when None"
48+
], Core__Nullable.isNull(undefined), eq, false);
49+
50+
Test.run([
51+
[
52+
"NullableTests.res",
53+
12,
54+
20,
55+
39
56+
],
57+
"isUndef when null"
58+
], Core__Nullable.isUndefined(null), eq, false);
59+
60+
Test.run([
61+
[
62+
"NullableTests.res",
63+
13,
64+
20,
65+
40
66+
],
67+
"isUndef when undef"
68+
], Core__Nullable.isUndefined(undefined), eq, true);
69+
70+
Test.run([
71+
[
72+
"NullableTests.res",
73+
14,
74+
20,
75+
38
76+
],
77+
"isUndef when abc"
78+
], Core__Nullable.isUndefined("abc"), eq, false);
79+
80+
Test.run([
81+
[
82+
"NullableTests.res",
83+
15,
84+
20,
85+
39
86+
],
87+
"isUndef when None"
88+
], Core__Nullable.isUndefined(undefined), eq, true);
89+
90+
Test.run([
91+
[
92+
"NullableTests.res",
93+
17,
94+
20,
95+
45
96+
],
97+
"isNullOrUndef when null"
98+
], Core__Nullable.isNullOrUndefined(null), eq, true);
99+
100+
Test.run([
101+
[
102+
"NullableTests.res",
103+
19,
104+
13,
105+
39
106+
],
107+
"isNullOrUndef when undef"
108+
], Core__Nullable.isNullOrUndefined(undefined), eq, true);
109+
110+
Test.run([
111+
[
112+
"NullableTests.res",
113+
25,
114+
13,
115+
37
116+
],
117+
"isNullOrUndef when abc"
118+
], Core__Nullable.isNullOrUndefined("abc"), eq, false);
119+
120+
Test.run([
121+
[
122+
"NullableTests.res",
123+
31,
124+
13,
125+
38
126+
],
127+
"isNullOrUndef when None"
128+
], Core__Nullable.isNullOrUndefined(undefined), eq, true);
129+
130+
Test.run([
131+
[
132+
"NullableTests.res",
133+
37,
134+
20,
135+
56
136+
],
137+
"isNull when null using Null module"
138+
], Core__Null.isNull(null), eq, true);
139+
140+
Test.run([
141+
[
142+
"NullableTests.res",
143+
39,
144+
13,
145+
50
146+
],
147+
"isNull when undef using Null module"
148+
], Core__Null.isNull(undefined), eq, false);
149+
150+
Test.run([
151+
[
152+
"NullableTests.res",
153+
44,
154+
20,
155+
55
156+
],
157+
"isNull when abc using Null module"
158+
], Core__Null.isNull("abc"), eq, false);
159+
160+
Test.run([
161+
[
162+
"NullableTests.res",
163+
45,
164+
20,
165+
56
166+
],
167+
"isNull when None using Null module"
168+
], Core__Null.isNull(undefined), eq, false);
169+
170+
export {
171+
eq ,
172+
}
173+
/* Not a pure module */

test/NullableTests.res

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
open RescriptCore
2+
3+
let eq = (a, b) => a == b
4+
5+
// ===== isNull, isUndefined, isNullOrUndefined =====
6+
7+
Test.run(__POS_OF__("isNull when null"), Nullable.null->Nullable.isNull, eq, true)
8+
Test.run(__POS_OF__("isNull when undef"), Nullable.undefined->Nullable.isNull, eq, false)
9+
Test.run(__POS_OF__("isNull when abc"), "abc"->Nullable.make->Nullable.isNull, eq, false)
10+
Test.run(__POS_OF__("isNull when None"), None->Nullable.make->Nullable.isNull, eq, false)
11+
12+
Test.run(__POS_OF__("isUndef when null"), Nullable.null->Nullable.isUndefined, eq, false)
13+
Test.run(__POS_OF__("isUndef when undef"), Nullable.undefined->Nullable.isUndefined, eq, true)
14+
Test.run(__POS_OF__("isUndef when abc"), "abc"->Nullable.make->Nullable.isUndefined, eq, false)
15+
Test.run(__POS_OF__("isUndef when None"), None->Nullable.make->Nullable.isUndefined, eq, true)
16+
17+
Test.run(__POS_OF__("isNullOrUndef when null"), Nullable.null->Nullable.isNullOrUndefined, eq, true)
18+
Test.run(
19+
__POS_OF__("isNullOrUndef when undef"),
20+
Nullable.undefined->Nullable.isNullOrUndefined,
21+
eq,
22+
true,
23+
)
24+
Test.run(
25+
__POS_OF__("isNullOrUndef when abc"),
26+
"abc"->Nullable.make->Nullable.isNullOrUndefined,
27+
eq,
28+
false,
29+
)
30+
Test.run(
31+
__POS_OF__("isNullOrUndef when None"),
32+
None->Nullable.make->Nullable.isNullOrUndefined,
33+
eq,
34+
true,
35+
)
36+
37+
Test.run(__POS_OF__("isNull when null using Null module"), Null.null->Null.isNull, eq, true)
38+
Test.run(
39+
__POS_OF__("isNull when undef using Null module"),
40+
Nullable.undefined->Null.make->Null.isNull,
41+
eq,
42+
false,
43+
)
44+
Test.run(__POS_OF__("isNull when abc using Null module"), "abc"->Null.make->Null.isNull, eq, false)
45+
Test.run(__POS_OF__("isNull when None using Null module"), None->Null.make->Null.isNull, eq, false)

test/TestSuite.mjs

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import * as ArrayTests from "./ArrayTests.mjs";
66
import * as ErrorTests from "./ErrorTests.mjs";
77
import * as PromiseTest from "./PromiseTest.mjs";
88
import * as ResultTests from "./ResultTests.mjs";
9+
import * as NullableTests from "./NullableTests.mjs";
910
import * as TypedArrayTests from "./TypedArrayTests.mjs";
1011

1112
var bign = TestTests.bign;
@@ -34,8 +35,6 @@ var forEachIfOkCallFunction = ResultTests.forEachIfOkCallFunction;
3435

3536
var forEachIfErrorDoNotCallFunction = ResultTests.forEachIfErrorDoNotCallFunction;
3637

37-
var eq = TypedArrayTests.eq;
38-
3938
var num1 = TypedArrayTests.num1;
4039

4140
var num2 = TypedArrayTests.num2;
@@ -50,6 +49,8 @@ var areSame = TypedArrayTests.areSame;
5049

5150
var o = TypedArrayTests.o;
5251

52+
var eq = NullableTests.eq;
53+
5354
export {
5455
bign ,
5556
TestError ,
@@ -64,13 +65,13 @@ export {
6465
$$catch ,
6566
forEachIfOkCallFunction ,
6667
forEachIfErrorDoNotCallFunction ,
67-
eq ,
6868
num1 ,
6969
num2 ,
7070
num3 ,
7171
assertTrue ,
7272
assertWillThrow ,
7373
areSame ,
7474
o ,
75+
eq ,
7576
}
7677
/* IntTests Not a pure module */

test/TestSuite.res

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,3 +5,4 @@ include ArrayTests
55
include IntTests
66
include ResultTests
77
include TypedArrayTests
8+
include NullableTests

0 commit comments

Comments
 (0)