diff options
author | eldritch horrors <pennae@lix.systems> | 2024-03-10 07:44:21 +0100 |
---|---|---|
committer | eldritch horrors <pennae@lix.systems> | 2024-03-14 01:52:19 -0600 |
commit | c26599b1430e4d06a0c32290837b58537a7c4600 (patch) | |
tree | e41e85d0ffdfbbb9f7c7b7feb5fb44357c026f67 /tests/functional | |
parent | 2a8f579c53537296c5d5a69a158a7cf71839390e (diff) |
libexpr: fix elided value counting in printer
using the total-attrs-printed and total-list-items-printed counters to
calculate how many attrs were elided only works properly if no nesting
is involved. once things do nest the global counter can exceed the size
of the currently printed object, leading to unsigned wrapping and great
overestimation of elided counts. counting locally in addition to global
counts fixes this.
these are functional tests because creating these objects requires the
evaluator to not be a huge amount of code, and we also want defaults to
be tested for cli usage.
fixes #14
Change-Id: Icb9a0cb21b2f4bacbc5e9dcdd8c0b9055b4088a7
Diffstat (limited to 'tests/functional')
5 files changed, 33 insertions, 1 deletions
diff --git a/tests/functional/lang/eval-fail-bad-string-interpolation-4.err.exp b/tests/functional/lang/eval-fail-bad-string-interpolation-4.err.exp index 6f907106b..b262e814d 100644 --- a/tests/functional/lang/eval-fail-bad-string-interpolation-4.err.exp +++ b/tests/functional/lang/eval-fail-bad-string-interpolation-4.err.exp @@ -6,4 +6,4 @@ error: | ^ 10| - error: cannot coerce a set to a string: { a = { a = { a = { a = "ha"; b = "ha"; c = "ha"; d = "ha"; e = "ha"; f = "ha"; g = "ha"; h = "ha"; j = "ha"; }; «4294967295 attributes elided» }; «4294967294 attributes elided» }; «4294967293 attributes elided» } + error: cannot coerce a set to a string: { a = { a = { a = { a = "ha"; b = "ha"; c = "ha"; d = "ha"; e = "ha"; f = "ha"; g = "ha"; h = "ha"; j = "ha"; }; «8 attributes elided» }; «8 attributes elided» }; «8 attributes elided» } diff --git a/tests/functional/lang/eval-fail-print-limit-list.err.exp b/tests/functional/lang/eval-fail-print-limit-list.err.exp new file mode 100644 index 000000000..2f347d15a --- /dev/null +++ b/tests/functional/lang/eval-fail-print-limit-list.err.exp @@ -0,0 +1,12 @@ +error: + … in the condition of the assert statement + at /pwd/lang/eval-fail-print-limit-list.nix:1:1: + 1| assert ( + | ^ + 2| let x = [ 1 [ 2 3 4 5 6 7 8 9 x 10 11 ] 12 ]; + + error: expected a Boolean but found a list: [ 1 [ 2 3 4 5 6 7 8 9 [ 1 «2 items elided» ] «2 items elided» ] «1 item elided» ] + at /pwd/lang/eval-fail-print-limit-list.nix:1:1: + 1| assert ( + | ^ + 2| let x = [ 1 [ 2 3 4 5 6 7 8 9 x 10 11 ] 12 ]; diff --git a/tests/functional/lang/eval-fail-print-limit-list.nix b/tests/functional/lang/eval-fail-print-limit-list.nix new file mode 100644 index 000000000..14715f04d --- /dev/null +++ b/tests/functional/lang/eval-fail-print-limit-list.nix @@ -0,0 +1,4 @@ +assert ( + let x = [ 1 [ 2 3 4 5 6 7 8 9 x 10 11 ] 12 ]; + in builtins.deepSeq x x +); 1 diff --git a/tests/functional/lang/eval-fail-print-limit-set.err.exp b/tests/functional/lang/eval-fail-print-limit-set.err.exp new file mode 100644 index 000000000..c5086fb76 --- /dev/null +++ b/tests/functional/lang/eval-fail-print-limit-set.err.exp @@ -0,0 +1,12 @@ +error: + … in the condition of the assert statement + at /pwd/lang/eval-fail-print-limit-set.nix:1:1: + 1| assert ( + | ^ + 2| let x = { a.a.a.a.a.a.a.a.a = { a.a = 1; b = 2; }; a.b.c.x = 3; c = 4; }; + + error: expected a Boolean but found a set: { a = { a = { a = { a = { a = { a = { a = { a = { a = { a = { ... }; b = 2; }; }; }; }; }; }; }; }; «1 attribute elided» }; «1 attribute elided» } + at /pwd/lang/eval-fail-print-limit-set.nix:1:1: + 1| assert ( + | ^ + 2| let x = { a.a.a.a.a.a.a.a.a = { a.a = 1; b = 2; }; a.b.c.x = 3; c = 4; }; diff --git a/tests/functional/lang/eval-fail-print-limit-set.nix b/tests/functional/lang/eval-fail-print-limit-set.nix new file mode 100644 index 000000000..b268cb7f7 --- /dev/null +++ b/tests/functional/lang/eval-fail-print-limit-set.nix @@ -0,0 +1,4 @@ +assert ( + let x = { a.a.a.a.a.a.a.a.a = { a.a = 1; b = 2; }; a.b.c.x = 3; c = 4; }; + in builtins.deepSeq x x +); 1 |