Skip to content

Commit 479de11

Browse files
committed
isNull and other convenience functions
1 parent 3b84757 commit 479de11

10 files changed

+309
-3
lines changed

src/Core__Null.mjs

+5
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,17 @@ function flatMap(value, f) {
5454
}
5555
}
5656

57+
function isNull(i) {
58+
return i === null;
59+
}
60+
5761
export {
5862
fromOption ,
5963
getWithDefault ,
6064
getExn ,
6165
map ,
6266
mapWithDefault ,
6367
flatMap ,
68+
isNull ,
6469
}
6570
/* No side effect */

src/Core__Null.res

+2
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,5 @@ let flatMap = (value, f) =>
4545
| Some(x) => f(x)
4646
| None => null
4747
}
48+
49+
let isNull = i => i == null

src/Core__Null.resi

+14
Original file line numberDiff line numberDiff line change
@@ -170,3 +170,17 @@ Null.flatMap(null, addIfAboveOne) // null
170170
```
171171
*/
172172
let flatMap: (t<'a>, 'a => t<'b>) => t<'b>
173+
174+
/**
175+
`isNull(value)` checks if `value===null`
176+
177+
## Examples
178+
179+
```rescript
180+
"abc"->Null.make->Null.isNull // false
181+
Nullable.undefined->Null.make->Null.isNull // false
182+
Null.null->Null.isNull // true
183+
None->Null.make->Null.isNull // false
184+
```
185+
*/
186+
let isNull: t<'a> => bool

src/Core__Nullable.mjs

+19
Original file line numberDiff line numberDiff line change
@@ -53,12 +53,31 @@ function flatMap(value, f) {
5353
}
5454
}
5555

56+
function isNull(i) {
57+
return i === null;
58+
}
59+
60+
function isUndefined(i) {
61+
return i === undefined;
62+
}
63+
64+
function isNullOrUndefined(i) {
65+
if (i === undefined) {
66+
return true;
67+
} else {
68+
return i === null;
69+
}
70+
}
71+
5672
export {
5773
fromOption ,
5874
getWithDefault ,
5975
getExn ,
6076
map ,
6177
mapWithDefault ,
6278
flatMap ,
79+
isNull ,
80+
isUndefined ,
81+
isNullOrUndefined ,
6382
}
6483
/* No side effect */

src/Core__Nullable.res

+4
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,7 @@ let flatMap = (value, f) =>
4545
| Some(x) => f(x)
4646
| None => Obj.magic(value)
4747
}
48+
49+
let isNull = i => i == null
50+
let isUndefined = i => i == undefined
51+
let isNullOrUndefined = i => i == undefined || i == null

src/Core__Nullable.resi

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

test/NullableTests.mjs

+173
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

+45
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

+4-3
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

1011
var bign = TestTests.bign;
1112

@@ -29,12 +30,12 @@ var panicTest = ErrorTests.panicTest;
2930

3031
var $$catch = IntTests.$$catch;
3132

32-
var eq = ResultTests.eq;
33-
3433
var forEachIfOkCallFunction = ResultTests.forEachIfOkCallFunction;
3534

3635
var forEachIfErrorDoNotCallFunction = ResultTests.forEachIfErrorDoNotCallFunction;
3736

37+
var eq = NullableTests.eq;
38+
3839
export {
3940
bign ,
4041
TestError ,
@@ -47,8 +48,8 @@ export {
4748
Concurrently ,
4849
panicTest ,
4950
$$catch ,
50-
eq ,
5151
forEachIfOkCallFunction ,
5252
forEachIfErrorDoNotCallFunction ,
53+
eq ,
5354
}
5455
/* IntTests Not a pure module */

test/TestSuite.res

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ include ErrorTests
44
include ArrayTests
55
include IntTests
66
include ResultTests
7+
include NullableTests

0 commit comments

Comments
 (0)