aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Saxton <peterhsaxton@gmail.com>2024-02-18 22:27:52 +0100
committerLouis Pilfold <louis@lpil.uk>2024-02-22 12:27:13 +0000
commitfa81f992f4d39f5d8ec0890273dcb36e08b2a831 (patch)
tree58844074044f10e26b710ca5a3cbf861969e76f9
parent315967f36ea5b38d50e70cba79ad8471b8cd454a (diff)
downloadjavascript-fa81f992f4d39f5d8ec0890273dcb36e08b2a831.tar.gz
javascript-fa81f992f4d39f5d8ec0890273dcb36e08b2a831.zip
add reference_equal function
-rw-r--r--src/ffi.mjs4
-rw-r--r--src/gleam/javascript.gleam3
-rw-r--r--test/gleam/javascript_test.gleam11
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)
+}