Skip to content

isNull, isUndefined convenience functions #125

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,10 @@

## Next version

### API changes

- Add `Nullable.isNull`, `Nullable.isUndefined`, and similar functions to `Nullable` and `Null` modules. https://github.com/rescript-association/rescript-core/pull/125

## 0.4.0

### API changes
Expand Down
5 changes: 5 additions & 0 deletions src/Core__Null.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,10 @@ function flatMap(value, f) {
}
}

function isNull(i) {
return i === null;
}

export {
equal ,
compare ,
Expand All @@ -72,5 +76,6 @@ export {
map ,
mapWithDefault ,
flatMap ,
isNull ,
}
/* No side effect */
2 changes: 2 additions & 0 deletions src/Core__Null.res
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,5 @@ let flatMap = (value, f) =>
| Some(x) => f(x)
| None => null
}

let isNull = i => i == null
14 changes: 14 additions & 0 deletions src/Core__Null.resi
Original file line number Diff line number Diff line change
Expand Up @@ -174,3 +174,17 @@ Null.flatMap(null, addIfAboveOne) // null
```
*/
let flatMap: (t<'a>, 'a => t<'b>) => t<'b>

/**
`isNull(value)` checks if `value===null`

## Examples

```rescript
"abc"->Null.make->Null.isNull // false
Nullable.undefined->Null.make->Null.isNull // false
Null.null->Null.isNull // true
None->Null.make->Null.isNull // false
```
*/
let isNull: t<'a> => bool
19 changes: 19 additions & 0 deletions src/Core__Nullable.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,22 @@ function flatMap(value, f) {
}
}

function isNull(i) {
return i === null;
}

function isUndefined(i) {
return i === undefined;
}

function isNullOrUndefined(i) {
if (i === undefined) {
return true;
} else {
return i === null;
}
}

export {
equal ,
compare ,
Expand All @@ -71,5 +87,8 @@ export {
map ,
mapWithDefault ,
flatMap ,
isNull ,
isUndefined ,
isNullOrUndefined ,
}
/* No side effect */
4 changes: 4 additions & 0 deletions src/Core__Nullable.res
Original file line number Diff line number Diff line change
Expand Up @@ -49,3 +49,7 @@ let flatMap = (value, f) =>
| Some(x) => f(x)
| None => Obj.magic(value)
}

let isNull = i => i == null
let isUndefined = i => i == undefined
let isNullOrUndefined = i => i == undefined || i == null
42 changes: 42 additions & 0 deletions src/Core__Nullable.resi
Original file line number Diff line number Diff line change
Expand Up @@ -184,3 +184,45 @@ Nullable.flatMap(Nullable.null, addIfAboveOne) // undefined
```
*/
let flatMap: (t<'a>, 'a => t<'b>) => t<'b>

/**
`isNull(value)` checks if `value===null`

## Examples

```rescript
"abc"->Nullable.make->Nullable.isNull // false
Nullable.undefined->Nullable.isNull // false
Nullable.null->Nullable.isNull // true
None->Nullable.make->Nullable.isNull // false
```
*/
let isNull: t<'a> => bool

/**
`isUndefined(value)` checks if `value===undefined`

## Examples

```rescript
"abc"->Nullable.make->Nullable.isUndefined // false
Nullable.null->Nullable.isUndefined // false
Nullable.undefined->Nullable.isUndefined // true
None->Nullable.make->Nullable.isUndefined // true
```
*/
let isUndefined: t<'a> => bool

/**
`isNullOrUndefined(value)` checks if `value===undefined || value===null`

## Examples

```rescript
"abc"->Nullable.make->Nullable.isNullOrUndefined // false
Nullable.null->Nullable.isNullOrUndefined // true
Nullable.undefined->Nullable.isUndefined // true
None->Nullable.make->Nullable.isNullOrUndefined // true
```
*/
let isNullOrUndefined: t<'a> => bool
173 changes: 173 additions & 0 deletions test/NullableTests.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
// Generated by ReScript, PLEASE EDIT WITH CARE

import * as Test from "./Test.mjs";
import * as Caml_obj from "rescript/lib/es6/caml_obj.js";
import * as Core__Null from "../src/Core__Null.mjs";
import * as Core__Nullable from "../src/Core__Nullable.mjs";

var eq = Caml_obj.equal;

Test.run([
[
"NullableTests.res",
7,
20,
38
],
"isNull when null"
], Core__Nullable.isNull(null), eq, true);

Test.run([
[
"NullableTests.res",
8,
20,
39
],
"isNull when undef"
], Core__Nullable.isNull(undefined), eq, false);

Test.run([
[
"NullableTests.res",
9,
20,
37
],
"isNull when abc"
], Core__Nullable.isNull("abc"), eq, false);

Test.run([
[
"NullableTests.res",
10,
20,
38
],
"isNull when None"
], Core__Nullable.isNull(undefined), eq, false);

Test.run([
[
"NullableTests.res",
12,
20,
39
],
"isUndef when null"
], Core__Nullable.isUndefined(null), eq, false);

Test.run([
[
"NullableTests.res",
13,
20,
40
],
"isUndef when undef"
], Core__Nullable.isUndefined(undefined), eq, true);

Test.run([
[
"NullableTests.res",
14,
20,
38
],
"isUndef when abc"
], Core__Nullable.isUndefined("abc"), eq, false);

Test.run([
[
"NullableTests.res",
15,
20,
39
],
"isUndef when None"
], Core__Nullable.isUndefined(undefined), eq, true);

Test.run([
[
"NullableTests.res",
17,
20,
45
],
"isNullOrUndef when null"
], Core__Nullable.isNullOrUndefined(null), eq, true);

Test.run([
[
"NullableTests.res",
19,
13,
39
],
"isNullOrUndef when undef"
], Core__Nullable.isNullOrUndefined(undefined), eq, true);

Test.run([
[
"NullableTests.res",
25,
13,
37
],
"isNullOrUndef when abc"
], Core__Nullable.isNullOrUndefined("abc"), eq, false);

Test.run([
[
"NullableTests.res",
31,
13,
38
],
"isNullOrUndef when None"
], Core__Nullable.isNullOrUndefined(undefined), eq, true);

Test.run([
[
"NullableTests.res",
37,
20,
56
],
"isNull when null using Null module"
], Core__Null.isNull(null), eq, true);

Test.run([
[
"NullableTests.res",
39,
13,
50
],
"isNull when undef using Null module"
], Core__Null.isNull(undefined), eq, false);

Test.run([
[
"NullableTests.res",
44,
20,
55
],
"isNull when abc using Null module"
], Core__Null.isNull("abc"), eq, false);

Test.run([
[
"NullableTests.res",
45,
20,
56
],
"isNull when None using Null module"
], Core__Null.isNull(undefined), eq, false);

export {
eq ,
}
/* Not a pure module */
45 changes: 45 additions & 0 deletions test/NullableTests.res
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
open RescriptCore

let eq = (a, b) => a == b

// ===== isNull, isUndefined, isNullOrUndefined =====

Test.run(__POS_OF__("isNull when null"), Nullable.null->Nullable.isNull, eq, true)
Test.run(__POS_OF__("isNull when undef"), Nullable.undefined->Nullable.isNull, eq, false)
Test.run(__POS_OF__("isNull when abc"), "abc"->Nullable.make->Nullable.isNull, eq, false)
Test.run(__POS_OF__("isNull when None"), None->Nullable.make->Nullable.isNull, eq, false)

Test.run(__POS_OF__("isUndef when null"), Nullable.null->Nullable.isUndefined, eq, false)
Test.run(__POS_OF__("isUndef when undef"), Nullable.undefined->Nullable.isUndefined, eq, true)
Test.run(__POS_OF__("isUndef when abc"), "abc"->Nullable.make->Nullable.isUndefined, eq, false)
Test.run(__POS_OF__("isUndef when None"), None->Nullable.make->Nullable.isUndefined, eq, true)

Test.run(__POS_OF__("isNullOrUndef when null"), Nullable.null->Nullable.isNullOrUndefined, eq, true)
Test.run(
__POS_OF__("isNullOrUndef when undef"),
Nullable.undefined->Nullable.isNullOrUndefined,
eq,
true,
)
Test.run(
__POS_OF__("isNullOrUndef when abc"),
"abc"->Nullable.make->Nullable.isNullOrUndefined,
eq,
false,
)
Test.run(
__POS_OF__("isNullOrUndef when None"),
None->Nullable.make->Nullable.isNullOrUndefined,
eq,
true,
)

Test.run(__POS_OF__("isNull when null using Null module"), Null.null->Null.isNull, eq, true)
Test.run(
__POS_OF__("isNull when undef using Null module"),
Nullable.undefined->Null.make->Null.isNull,
eq,
false,
)
Test.run(__POS_OF__("isNull when abc using Null module"), "abc"->Null.make->Null.isNull, eq, false)
Test.run(__POS_OF__("isNull when None using Null module"), None->Null.make->Null.isNull, eq, false)
7 changes: 4 additions & 3 deletions test/TestSuite.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import * as ArrayTests from "./ArrayTests.mjs";
import * as ErrorTests from "./ErrorTests.mjs";
import * as PromiseTest from "./PromiseTest.mjs";
import * as ResultTests from "./ResultTests.mjs";
import * as NullableTests from "./NullableTests.mjs";
import * as TypedArrayTests from "./TypedArrayTests.mjs";

var bign = TestTests.bign;
Expand Down Expand Up @@ -34,8 +35,6 @@ var forEachIfOkCallFunction = ResultTests.forEachIfOkCallFunction;

var forEachIfErrorDoNotCallFunction = ResultTests.forEachIfErrorDoNotCallFunction;

var eq = TypedArrayTests.eq;

var num1 = TypedArrayTests.num1;

var num2 = TypedArrayTests.num2;
Expand All @@ -50,6 +49,8 @@ var areSame = TypedArrayTests.areSame;

var o = TypedArrayTests.o;

var eq = NullableTests.eq;

export {
bign ,
TestError ,
Expand All @@ -64,13 +65,13 @@ export {
$$catch ,
forEachIfOkCallFunction ,
forEachIfErrorDoNotCallFunction ,
eq ,
num1 ,
num2 ,
num3 ,
assertTrue ,
assertWillThrow ,
areSame ,
o ,
eq ,
}
/* IntTests Not a pure module */
Loading