brewery
notashelf /
bfbcef9c284c54772e80b5a7f33efe9f9bcf75fa

nixir

public

Import-resolving Nix IR plugin

Star0tarball
clone
ssh://git@git.notashelf.dev:33/notashelf/nixir.git
tests/benchmark/large.nixNix237 lines4.4 KB
1
# Large benchmark for comprehensive stress testing
2
let
3
  range = start: end:
4
    if start >= end
5
    then []
6
    else [start] ++ range (start + 1) end;
7
8
  concat = a: b: a ++ b;
9
10
  factorial = n:
11
    if n <= 1
12
    then 1
13
    else n * factorial (n - 1);
14
15
  # Ackermann function (highly recursive)
16
  ackermann = m: n:
17
    if m == 0
18
    then n + 1
19
    else if n == 0
20
    then ackermann (m - 1) 1
21
    else ackermann (m - 1) (ackermann m (n - 1));
22
23
  # Greatest common divisor
24
  gcd = a: b:
25
    if b == 0
26
    then a
27
    else gcd b (a - (a / b) * b);
28
29
  # Power function
30
  pow = base: exp:
31
    if exp == 0
32
    then 1
33
    else if exp == 1
34
    then base
35
    else base * pow base (exp - 1);
36
37
  compose = f: g: x: f (g x);
38
  double = x: x * 2;
39
  addTen = x: x + 10;
40
  square = x: x * x;
41
42
  pipeline = compose square (compose double addTen);
43
44
  list_100 = range 1 101;
45
  list_50 = range 1 51;
46
  list_25 = range 1 26;
47
48
  largeAttrs = {
49
    a1 = 1;
50
    a2 = 2;
51
    a3 = 3;
52
    a4 = 4;
53
    a5 = 5;
54
    a6 = 6;
55
    a7 = 7;
56
    a8 = 8;
57
    a9 = 9;
58
    a10 = 10;
59
    b1 = 11;
60
    b2 = 12;
61
    b3 = 13;
62
    b4 = 14;
63
    b5 = 15;
64
    b6 = 16;
65
    b7 = 17;
66
    b8 = 18;
67
    b9 = 19;
68
    b10 = 20;
69
    c1 = 21;
70
    c2 = 22;
71
    c3 = 23;
72
    c4 = 24;
73
    c5 = 25;
74
    c6 = 26;
75
    c7 = 27;
76
    c8 = 28;
77
    c9 = 29;
78
    c10 = 30;
79
    d1 = 31;
80
    d2 = 32;
81
    d3 = 33;
82
    d4 = 34;
83
    d5 = 35;
84
    d6 = 36;
85
    d7 = 37;
86
    d8 = 38;
87
    d9 = 39;
88
    d10 = 40;
89
    e1 = 41;
90
    e2 = 42;
91
    e3 = 43;
92
    e4 = 44;
93
    e5 = 45;
94
    e6 = 46;
95
    e7 = 47;
96
    e8 = 48;
97
    e9 = 49;
98
    e10 = 50;
99
  };
100
101
  # Very deep nesting (10 levels)
102
  deepNest = {
103
    level1 = {
104
      level2 = {
105
        level3 = {
106
          level4 = {
107
            level5 = {
108
              level6 = {
109
                level7 = {
110
                  level8 = {
111
                    level9 = {
112
                      level10 = {
113
                        treasure = "found";
114
                        value = 12345;
115
                      };
116
                    };
117
                  };
118
                };
119
              };
120
            };
121
          };
122
        };
123
      };
124
    };
125
  };
126
127
  recursiveComplex = rec {
128
    base = 10;
129
    doubled = base * 2;
130
    tripled = base * 3;
131
132
    sum = doubled + tripled;
133
    product = doubled * tripled;
134
135
    x = base * 4;
136
    y = x + doubled;
137
    z = y * tripled;
138
139
    total = sum + product + z;
140
    final = total * base;
141
  };
142
143
  config1 = rec {
144
    multiplier = 5;
145
    base = 100;
146
    result = base * multiplier;
147
  };
148
149
  config2 = rec {
150
    offset = 50;
151
    scaled = config1.result + offset;
152
    doubled = scaled * 2;
153
  };
154
155
  config3 = rec {
156
    factor = 3;
157
    combined = config2.doubled * factor;
158
    final = combined + config1.multiplier;
159
  };
160
161
  baseConfig = {
162
    system = {
163
      arch = "x86_64";
164
      os = "linux";
165
    };
166
    settings = {
167
      enabled = true;
168
      level = 5;
169
    };
170
  };
171
172
  overrides = {
173
    system = {
174
      kernel = "6.1";
175
    };
176
    settings = {
177
      level = 10;
178
      extra = "custom";
179
    };
180
    newSection = {
181
      value = 42;
182
    };
183
  };
184
185
  merged =
186
    baseConfig
187
    // overrides
188
    // {
189
      system = baseConfig.system // overrides.system;
190
      settings =
191
        baseConfig.settings
192
        // overrides.settings
193
        // {
194
          combined = baseConfig.settings.level + overrides.settings.level;
195
        };
196
    };
197
198
  fact10 = factorial 10;
199
  fact7 = factorial 7;
200
  ack_3_3 = ackermann 3 3;
201
  gcd_48_18 = gcd 48 18;
202
  gcd_100_35 = gcd 100 35;
203
  pow_2_10 = pow 2 10;
204
  pow_3_5 = pow 3 5;
205
206
  pipelineResult = pipeline 5; # ((5 + 10) * 2)^2 = 900
207
208
  # List operations
209
  concatenated = concat [1 2 3] [4 5 6];
210
  multilevel = concat (concat [1] [2 3]) [4 5];
211
in {
212
  # Lists
213
  inherit list_100 list_50 list_25 concatenated multilevel;
214
215
  # Math results
216
  inherit fact10 fact7 ack_3_3 gcd_48_18 gcd_100_35 pow_2_10 pow_3_5 pipelineResult;
217
218
  # Data structures
219
  inherit largeAttrs merged;
220
  deepValue = deepNest.level1.level2.level3.level4.level5.level6.level7.level8.level9.level10.value;
221
  deepTreasure = deepNest.level1.level2.level3.level4.level5.level6.level7.level8.level9.level10.treasure;
222
223
  # Recursive attrsets
224
  recursiveTotal = recursiveComplex.total;
225
  recursiveFinal = recursiveComplex.final;
226
  computedZ = recursiveComplex.z;
227
228
  # Config chain
229
  config1Result = config1.result;
230
  config2Doubled = config2.doubled;
231
  config3Final = config3.final;
232
233
  # Merged config
234
  mergedCombined = merged.settings.combined;
235
  mergedArch = merged.system.arch;
236
  mergedKernel = merged.system.kernel;
237
}