tests/benchmark: make benchmark cases... bigger

Signed-off-by: NotAShelf <raf@notashelf.dev>
Change-Id: Iabd307b475f6568cff4d1ae6e5ae56ef6a6a6964
This commit is contained in:
raf 2026-02-23 02:24:10 +03:00
commit 3347699a8c
Signed by: NotAShelf
GPG key ID: 29D95B64378DB4BF
3 changed files with 267 additions and 30 deletions

View file

@ -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;
};
# Recursive attrset
recursive = rec {
x = 10;
y = x * 2;
z = y + x;
result = z * 3;
# 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;
};
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;
}

View file

@ -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;
# Attrset operations
# 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;
# 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;
}

View file

@ -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)"