| 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 | } |