diff options
author | adisbladis <adisbladis@gmail.com> | 2023-11-24 16:10:13 +1300 |
---|---|---|
committer | github-actions[bot] <github-actions[bot]@users.noreply.github.com> | 2023-11-27 13:45:05 +0000 |
commit | 836ef86948668e7a18c8831ed436495e42ae5350 (patch) | |
tree | dba673e5fcbdb5ea88f8956598e7b312b356bbce /lib/tests | |
parent | f9e160416542d790ad6ea5969da792c24601e5b3 (diff) |
lib.attrsets.matchAttrs: Avoid some list allocations when walking structure
Benchmarks (`nix-instantiate ./. -A python3`): - Before: ``` json { "cpuTime": 0.29049500823020935, "envs": { "bytes": 4484216, "elements": 221443, "number": 169542 }, "gc": { "heapSize": 402915328, "totalBytes": 53086800 }, "list": { "bytes": 749424, "concats": 4242, "elements": 93678 }, "nrAvoided": 253991, "nrFunctionCalls": 149848, "nrLookups": 49612, "nrOpUpdateValuesCopied": 1587837, "nrOpUpdates": 10104, "nrPrimOpCalls": 130356, "nrThunks": 358981, "sets": { "bytes": 30423600, "elements": 1859999, "number": 41476 }, "sizes": { "Attr": 16, "Bindings": 16, "Env": 16, "Value": 24 }, "symbols": { "bytes": 236145, "number": 24453 }, "values": { "bytes": 10502520, "number": 437605 } } ``` - After: ``` json { "cpuTime": 0.2946169972419739, "envs": { "bytes": 3315224, "elements": 172735, "number": 120834 }, "gc": { "heapSize": 402915328, "totalBytes": 48718432 }, "list": { "bytes": 347568, "concats": 4242, "elements": 43446 }, "nrAvoided": 173252, "nrFunctionCalls": 101140, "nrLookups": 73595, "nrOpUpdateValuesCopied": 1587837, "nrOpUpdates": 10104, "nrPrimOpCalls": 83067, "nrThunks": 304216, "sets": { "bytes": 29704096, "elements": 1831673, "number": 24833 }, "sizes": { "Attr": 16, "Bindings": 16, "Env": 16, "Value": 24 }, "symbols": { "bytes": 236145, "number": 24453 }, "values": { "bytes": 8961552, "number": 373398 } } ``` (cherry picked from commit 013a0a1357c446d0a46b4bbd8f68512fd9223257)
Diffstat (limited to 'lib/tests')
-rw-r--r-- | lib/tests/misc.nix | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/lib/tests/misc.nix b/lib/tests/misc.nix index 8f4a37149d92c..9f1fee2ba2341 100644 --- a/lib/tests/misc.nix +++ b/lib/tests/misc.nix @@ -831,6 +831,26 @@ runTests { }; }; + testMatchAttrsMatchingExact = { + expr = matchAttrs { cpu = { bits = 64; }; } { cpu = { bits = 64; }; }; + expected = true; + }; + + testMatchAttrsMismatch = { + expr = matchAttrs { cpu = { bits = 128; }; } { cpu = { bits = 64; }; }; + expected = false; + }; + + testMatchAttrsMatchingImplicit = { + expr = matchAttrs { cpu = { }; } { cpu = { bits = 64; }; }; + expected = true; + }; + + testMatchAttrsMissingAttrs = { + expr = matchAttrs { cpu = {}; } { }; + expected = false; + }; + testOverrideExistingEmpty = { expr = overrideExisting {} { a = 1; }; expected = {}; |