diff options
author | Peter Saxton <peterhsaxton@gmail.com> | 2024-02-18 22:27:52 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2024-02-22 12:27:13 +0000 |
commit | fa81f992f4d39f5d8ec0890273dcb36e08b2a831 (patch) | |
tree | 58844074044f10e26b710ca5a3cbf861969e76f9 | |
parent | 315967f36ea5b38d50e70cba79ad8471b8cd454a (diff) | |
download | javascript-fa81f992f4d39f5d8ec0890273dcb36e08b2a831.tar.gz javascript-fa81f992f4d39f5d8ec0890273dcb36e08b2a831.zip |
add reference_equal function
-rw-r--r-- | src/ffi.mjs | 4 | ||||
-rw-r--r-- | src/gleam/javascript.gleam | 3 | ||||
-rw-r--r-- | test/gleam/javascript_test.gleam | 11 |
3 files changed, 18 insertions, 0 deletions
diff --git a/src/ffi.mjs b/src/ffi.mjs index 6f667c0..0af2c65 100644 --- a/src/ffi.mjs +++ b/src/ffi.mjs @@ -127,6 +127,10 @@ export function set_reference(ref, value) { return previous; } +export function reference_equal(a,b) { + return a === b +} + export function all_promises(...promises) { if (promises.length === 1) { return Promise.all(promises[0]); diff --git a/src/gleam/javascript.gleam b/src/gleam/javascript.gleam index a0c12ba..b1c7fd9 100644 --- a/src/gleam/javascript.gleam +++ b/src/gleam/javascript.gleam @@ -35,3 +35,6 @@ pub fn update_reference(ref: Reference(a), f: fn(a) -> a) -> a { set_reference(ref, f(value)) value } + +@external(javascript, "../ffi.mjs", "reference_equal") +pub fn reference_equal(a: Reference(a), b: Reference(a)) -> Bool diff --git a/test/gleam/javascript_test.gleam b/test/gleam/javascript_test.gleam index c15186f..0cd3e1c 100644 --- a/test/gleam/javascript_test.gleam +++ b/test/gleam/javascript_test.gleam @@ -2,6 +2,7 @@ import gleam/javascript.{ BooleanType, FunctionType, NumberType, ObjectType, StringType, SymbolType, UndefinedType, } +import gleeunit/should pub fn type_of_test() { let assert UndefinedType = javascript.type_of(Nil) @@ -34,3 +35,13 @@ pub fn reference_test() { let assert 2 = javascript.set_reference(ref, 3) let assert 3 = javascript.dereference(ref) } + +pub fn reference_equality_test() { + javascript.make_reference(0) + |> javascript.reference_equal(javascript.make_reference(0)) + |> should.equal(False) + + let ref = javascript.make_reference(0) + javascript.reference_equal(ref, ref) + |> should.equal(True) +} |