brewery
notashelf /
2a005574d3d6791783fb70fd460753557d3e3df2

nixir

public

Import-resolving Nix IR plugin

Star0tarball
clone
ssh://git@git.notashelf.dev:33/notashelf/nixir.git

Commit 2a005574d3d6

tarball

NotAShelf <raf@notashelf.dev> · 2026-04-24 20:13 UTC

unverified3 files changed+267-30
tests/benchmark: make benchmark cases... bigger

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Iabd307b475f6568cff4d1ae6e5ae56ef6a6a6964
diff --git a/tests/benchmark/large.nix b/tests/benchmark/large.nixindex ffd7e22..bf29a77 100644--- a/tests/benchmark/large.nix+++ b/tests/benchmark/large.nix@@ -1,15 +1,50 @@-# Large :b:oke ---I mean...benchmark, for stress testing+# Large benchmark for comprehensive stress testing let-  # Generate large list   range = start: end:     if start >= end     then []     else [start] ++ range (start + 1) end; -  # Deep nesting-  deepNest = {a = {b = {c = {d = {e = {f = 42;};};};};};};+  concat = a: b: a ++ b;++  factorial = n:+    if n <= 1+    then 1+    else n * factorial (n - 1);++  # Ackermann function (highly recursive)+  ackermann = m: n:+    if m == 0+    then n + 1+    else if n == 0+    then ackermann (m - 1) 1+    else ackermann (m - 1) (ackermann m (n - 1));++  # Greatest common divisor+  gcd = a: b:+    if b == 0+    then a+    else gcd b (a - (a / b) * b);++  # Power function+  pow = base: exp:+    if exp == 0+    then 1+    else if exp == 1+    then base+    else base * pow base (exp - 1);++  compose = f: g: x: f (g x);+  double = x: x * 2;+  addTen = x: x + 10;+  square = x: x * x;++  pipeline = compose square (compose double addTen);++  list_100 = range 1 101;+  list_50 = range 1 51;+  list_25 = range 1 26; -  # Large attrset   largeAttrs = {     a1 = 1;     a2 = 2;@@ -31,17 +66,172 @@ let     b8 = 18;     b9 = 19;     b10 = 20;+    c1 = 21;+    c2 = 22;+    c3 = 23;+    c4 = 24;+    c5 = 25;+    c6 = 26;+    c7 = 27;+    c8 = 28;+    c9 = 29;+    c10 = 30;+    d1 = 31;+    d2 = 32;+    d3 = 33;+    d4 = 34;+    d5 = 35;+    d6 = 36;+    d7 = 37;+    d8 = 38;+    d9 = 39;+    d10 = 40;+    e1 = 41;+    e2 = 42;+    e3 = 43;+    e4 = 44;+    e5 = 45;+    e6 = 46;+    e7 = 47;+    e8 = 48;+    e9 = 49;+    e10 = 50;+  };++  # Very deep nesting (10 levels)+  deepNest = {+    level1 = {+      level2 = {+        level3 = {+          level4 = {+            level5 = {+              level6 = {+                level7 = {+                  level8 = {+                    level9 = {+                      level10 = {+                        treasure = "found";+                        value = 12345;+                      };+                    };+                  };+                };+              };+            };+          };+        };+      };+    };+  };++  recursiveComplex = rec {+    base = 10;+    doubled = base * 2;+    tripled = base * 3;++    sum = doubled + tripled;+    product = doubled * tripled;++    x = base * 4;+    y = x + doubled;+    z = y * tripled;++    total = sum + product + z;+    final = total * base;+  };++  config1 = rec {+    multiplier = 5;+    base = 100;+    result = base * multiplier;   }; -  # Recursive attrset-  recursive = rec {-    x = 10;-    y = x * 2;-    z = y + x;-    result = z * 3;+  config2 = rec {+    offset = 50;+    scaled = config1.result + offset;+    doubled = scaled * 2;   };++  config3 = rec {+    factor = 3;+    combined = config2.doubled * factor;+    final = combined + config1.multiplier;+  };++  baseConfig = {+    system = {+      arch = "x86_64";+      os = "linux";+    };+    settings = {+      enabled = true;+      level = 5;+    };+  };++  overrides = {+    system = {+      kernel = "6.1";+    };+    settings = {+      level = 10;+      extra = "custom";+    };+    newSection = {+      value = 42;+    };+  };++  merged =+    baseConfig+    // overrides+    // {+      system = baseConfig.system // overrides.system;+      settings =+        baseConfig.settings+        // overrides.settings+        // {+          combined = baseConfig.settings.level + overrides.settings.level;+        };+    };++  fact10 = factorial 10;+  fact7 = factorial 7;+  ack_3_3 = ackermann 3 3;+  gcd_48_18 = gcd 48 18;+  gcd_100_35 = gcd 100 35;+  pow_2_10 = pow 2 10;+  pow_3_5 = pow 3 5;++  pipelineResult = pipeline 5; # ((5 + 10) * 2)^2 = 900++  # List operations+  concatenated = concat [1 2 3] [4 5 6];+  multilevel = concat (concat [1] [2 3]) [4 5]; in {-  list_100 = range 1 100;-  deep = deepNest.a.b.c.d.e.f;-  inherit largeAttrs recursive;+  # Lists+  inherit list_100 list_50 list_25 concatenated multilevel;++  # Math results+  inherit fact10 fact7 ack_3_3 gcd_48_18 gcd_100_35 pow_2_10 pow_3_5 pipelineResult;++  # Data structures+  inherit largeAttrs merged;+  deepValue = deepNest.level1.level2.level3.level4.level5.level6.level7.level8.level9.level10.value;+  deepTreasure = deepNest.level1.level2.level3.level4.level5.level6.level7.level8.level9.level10.treasure;++  # Recursive attrsets+  recursiveTotal = recursiveComplex.total;+  recursiveFinal = recursiveComplex.final;+  computedZ = recursiveComplex.z;++  # Config chain+  config1Result = config1.result;+  config2Doubled = config2.doubled;+  config3Final = config3.final;++  # Merged config+  mergedCombined = merged.settings.combined;+  mergedArch = merged.system.arch;+  mergedKernel = merged.system.kernel; }diff --git a/tests/benchmark/medium.nix b/tests/benchmark/medium.nixindex f8db9e9..6234dca 100644--- a/tests/benchmark/medium.nix+++ b/tests/benchmark/medium.nix@@ -1,31 +1,75 @@ let-  # Recursive fibonacci (not memoized)+  # Recursive factorial+  factorial = n:+    if n <= 1+    then 1+    else n * factorial (n - 1);++  # Fibonacci sequence generator   fib = n:     if n <= 1     then n     else fib (n - 1) + fib (n - 2); -  # List operations-  numbers = [1 2 3 4 5 6 7 8 9 10];-  doubled = builtins.map (x: x * 2) numbers;+  # List concatenation test+  range = start: end:+    if start >= end+    then []+    else [start] ++ range (start + 1) end;++  # Curried function application+  add = x: y: x + y;+  add5 = add 5;++  # Complex computation+  compute = x: y: let+    a = x * 2;+    b = y + 10;+    c = a * b;+  in+    c / 2;++  # Data structures+  numbers = range 1 11; -  # Attrset operations+  # Nested attribute operations   base = {-    a = 1;-    b = 2;-    c = 3;+    config = {+      enable = true;+      value = 42;+    };+    data = {+      items = [1 2 3];+    };   };+   extended =     base     // {-      d = 4;-      e = 5;+      config =+        base.config+        // {+          extra = "test";+          multiplied = base.config.value * 2;+        };+      computed = base.config.value + 100;     }; -  # String operations-  greeting = "Hello";-  message = "${greeting}, World!";+  # Recursive attrset with selections+  recursive = rec {+    x = 10;+    y = x * 2;+    z = y + x;+    result = z * 3;+    final = result + x;+  }; in {-  fibonacci_10 = fib 10;-  inherit doubled extended message;+  fact5 = factorial 5;+  fib7 = fib 7;+  sum15 = add5 10;+  computed = compute 10 20;+  inherit numbers extended;+  deepValue = extended.config.multiplied;+  recursiveResult = recursive.result;+  recursiveFinal = recursive.final; }diff --git a/tests/benchmark/run.sh b/tests/benchmark/run.shindex 8e43fe8..c392139 100755--- a/tests/benchmark/run.sh+++ b/tests/benchmark/run.sh@@ -83,7 +83,10 @@ run_benchmark() { 	src_size=$(stat -c%s "$file" 2>/dev/null || stat -f%z "$file" 2>/dev/null) 	local ir_size 	ir_size=$(stat -c%s /tmp/bench.nixir 2>/dev/null || stat -f%z /tmp/bench.nixir 2>/dev/null)-	local ratio=$((ir_size * 100 / src_size))+	local ratio=0+	if [[ "$src_size" -gt 0 ]]; then+		ratio=$((ir_size * 100 / src_size))+	fi 	echo -e "  Source size:          ${src_size}B" 	echo -e "  IR bundle size:       ${ir_size}B (${ratio}% of source)"