about summary refs log tree commit diff
path: root/tvix/eval/src/tests/tvix_tests/eval-okay-closure-pointer-compare.nix
diff options
context:
space:
mode:
authorAdam Joseph <adam@westernsemico.com>2022-11-24T06·25-0800
committerclbot <clbot@tvl.fyi>2022-11-25T00·48+0000
commit325a7d6fa98ae7dbeabf1d8c1c34c2aed15074dd (patch)
treeb8b93df32ee5f48c2a4f6aae11605278070c240a /tvix/eval/src/tests/tvix_tests/eval-okay-closure-pointer-compare.nix
parent11874d3a7119b9a02abdbb406ca9a84c5db7fae7 (diff)
test(tvix/eval): add eval-okay-closure-pointer-compare r/5310
This test case checks two things:

* A sanity check that "pointer equality for functions" means not
  just the lambda, but also the upvalues.

* To be pointer-equal, it is not enough for the upvalues to be
  normal-form equal (i.e. `nix_eq()`-equal); the upvalues must be
  *pointer*-equal.  The second part of the test case checks for
  this.

Signed-off-by: Adam Joseph <adam@westernsemico.com>
Change-Id: I4e59327a6f199b8212e97197b212e3c3934bb3f0
Reviewed-on: https://cl.tvl.fyi/c/depot/+/7372
Reviewed-by: sterni <sternenseemann@systemli.org>
Tested-by: BuildkiteCI
Diffstat (limited to 'tvix/eval/src/tests/tvix_tests/eval-okay-closure-pointer-compare.nix')
-rw-r--r--tvix/eval/src/tests/tvix_tests/eval-okay-closure-pointer-compare.nix14
1 files changed, 14 insertions, 0 deletions
diff --git a/tvix/eval/src/tests/tvix_tests/eval-okay-closure-pointer-compare.nix b/tvix/eval/src/tests/tvix_tests/eval-okay-closure-pointer-compare.nix
new file mode 100644
index 000000000000..7c4333668df8
--- /dev/null
+++ b/tvix/eval/src/tests/tvix_tests/eval-okay-closure-pointer-compare.nix
@@ -0,0 +1,14 @@
+# For an explanation of this behavior see //tvix/docs/value-pointer-equality.md
+let
+  g = x:
+    owo: "th" + x;
+in
+[
+  (
+    { q = g "ia"; } == { q = g ("i"+"a"); }
+  )
+
+  (
+    [ (g "ia") ] == [ (g ("i"+"a")) ]
+  )
+]