summary refs log tree commit diff
path: root/lib/tests/misc.nix
diff options
context:
space:
mode:
authorSilvan Mosberger <silvan.mosberger@tweag.io>2023-09-22 02:38:15 +0200
committerSilvan Mosberger <silvan.mosberger@tweag.io>2023-09-26 18:55:54 +0200
commit9893fee947ceba487f0475bbecfea6d5959e2e6f (patch)
tree4f3e06ac4ff2ab654f4d41b8d628fe9bf434db3b /lib/tests/misc.nix
parent7a0b5c36c943f4f257c93f3c3e7fed22ffe2d67c (diff)
downloadnixpkgs-9893fee947ceba487f0475bbecfea6d5959e2e6f.tar
nixpkgs-9893fee947ceba487f0475bbecfea6d5959e2e6f.tar.gz
nixpkgs-9893fee947ceba487f0475bbecfea6d5959e2e6f.tar.bz2
nixpkgs-9893fee947ceba487f0475bbecfea6d5959e2e6f.tar.lz
nixpkgs-9893fee947ceba487f0475bbecfea6d5959e2e6f.tar.xz
nixpkgs-9893fee947ceba487f0475bbecfea6d5959e2e6f.tar.zst
nixpkgs-9893fee947ceba487f0475bbecfea6d5959e2e6f.zip
lib.lists.foldl': Add tests
Diffstat (limited to 'lib/tests/misc.nix')
-rw-r--r--lib/tests/misc.nix32
1 files changed, 32 insertions, 0 deletions
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix
index 80223dccb26..50d615c5be3 100644
--- a/lib/tests/misc.nix
+++ b/lib/tests/misc.nix
@@ -505,6 +505,38 @@ runTests {
       };
     };
 
+  testFoldl'Empty = {
+    expr = foldl' (acc: el: abort "operation not called") 0 [ ];
+    expected = 0;
+  };
+
+  testFoldl'IntegerAdding = {
+    expr = foldl' (acc: el: acc + el) 0 [ 1 2 3 ];
+    expected = 6;
+  };
+
+  # The accumulator isn't forced deeply
+  testFoldl'NonDeep = {
+    expr = take 3 (foldl'
+      (acc: el: [ el ] ++ acc)
+      [ (abort "unevaluated list entry") ]
+      [ 1 2 3 ]);
+    expected = [ 3 2 1 ];
+  };
+
+  # The same as builtins.foldl', lib.foldl' doesn't evaluate the first accumulator strictly
+  testFoldl'StrictInitial = {
+    expr = (builtins.tryEval (foldl' (acc: el: el) (throw "hello") [])).success;
+    expected = true;
+  };
+
+  # Make sure we don't get a stack overflow for large lists
+  # This number of elements would notably cause a stack overflow if it was implemented without the `foldl'` builtin
+  testFoldl'Large = {
+    expr = foldl' (acc: el: acc + el) 0 (range 0 100000);
+    expected = 5000050000;
+  };
+
   testTake = testAllTrue [
     ([] == (take 0 [  1 2 3 ]))
     ([1] == (take 1 [  1 2 3 ]))