@@ -150,8 +150,8 @@ namespace nix {
150
150
TEST_F (PrimOpTest, attrValues) {
151
151
auto v = eval (" builtins.attrValues { x = \" foo\" ; a = 1; }" );
152
152
ASSERT_THAT (v, IsListOfSize (2 ));
153
- ASSERT_THAT (*v.listElems ()[0 ], IsIntEq (1 ));
154
- ASSERT_THAT (*v.listElems ()[1 ], IsStringEq (" foo" ));
153
+ ASSERT_THAT (*v.listView ()[0 ], IsIntEq (1 ));
154
+ ASSERT_THAT (*v.listView ()[1 ], IsStringEq (" foo" ));
155
155
}
156
156
157
157
TEST_F (PrimOpTest, getAttr) {
@@ -250,8 +250,8 @@ namespace nix {
250
250
TEST_F (PrimOpTest, catAttrs) {
251
251
auto v = eval (" builtins.catAttrs \" a\" [{a = 1;} {b = 0;} {a = 2;}]" );
252
252
ASSERT_THAT (v, IsListOfSize (2 ));
253
- ASSERT_THAT (*v.listElems ()[0 ], IsIntEq (1 ));
254
- ASSERT_THAT (*v.listElems ()[1 ], IsIntEq (2 ));
253
+ ASSERT_THAT (*v.listView ()[0 ], IsIntEq (1 ));
254
+ ASSERT_THAT (*v.listView ()[1 ], IsIntEq (2 ));
255
255
}
256
256
257
257
TEST_F (PrimOpTest, functionArgs) {
@@ -320,7 +320,8 @@ namespace nix {
320
320
TEST_F (PrimOpTest, tail) {
321
321
auto v = eval (" builtins.tail [ 3 2 1 0 ]" );
322
322
ASSERT_THAT (v, IsListOfSize (3 ));
323
- for (const auto [n, elem] : enumerate(v.listItems ()))
323
+ auto listView = v.listView ();
324
+ for (const auto [n, elem] : enumerate(listView))
324
325
ASSERT_THAT (*elem, IsIntEq (2 - static_cast <int >(n)));
325
326
}
326
327
@@ -331,17 +332,17 @@ namespace nix {
331
332
TEST_F (PrimOpTest, map) {
332
333
auto v = eval (" map (x: \" foo\" + x) [ \" bar\" \" bla\" \" abc\" ]" );
333
334
ASSERT_THAT (v, IsListOfSize (3 ));
334
- auto elem = v.listElems ()[0 ];
335
+ auto elem = v.listView ()[0 ];
335
336
ASSERT_THAT (*elem, IsThunk ());
336
337
state.forceValue (*elem, noPos);
337
338
ASSERT_THAT (*elem, IsStringEq (" foobar" ));
338
339
339
- elem = v.listElems ()[1 ];
340
+ elem = v.listView ()[1 ];
340
341
ASSERT_THAT (*elem, IsThunk ());
341
342
state.forceValue (*elem, noPos);
342
343
ASSERT_THAT (*elem, IsStringEq (" foobla" ));
343
344
344
- elem = v.listElems ()[2 ];
345
+ elem = v.listView ()[2 ];
345
346
ASSERT_THAT (*elem, IsThunk ());
346
347
state.forceValue (*elem, noPos);
347
348
ASSERT_THAT (*elem, IsStringEq (" fooabc" ));
@@ -350,7 +351,7 @@ namespace nix {
350
351
TEST_F (PrimOpTest, filter) {
351
352
auto v = eval (" builtins.filter (x: x == 2) [ 3 2 3 2 3 2 ]" );
352
353
ASSERT_THAT (v, IsListOfSize (3 ));
353
- for (const auto elem : v.listItems ())
354
+ for (const auto elem : v.listView ())
354
355
ASSERT_THAT (*elem, IsIntEq (2 ));
355
356
}
356
357
@@ -367,7 +368,8 @@ namespace nix {
367
368
TEST_F (PrimOpTest, concatLists) {
368
369
auto v = eval (" builtins.concatLists [[1 2] [3 4]]" );
369
370
ASSERT_THAT (v, IsListOfSize (4 ));
370
- for (const auto [i, elem] : enumerate(v.listItems ()))
371
+ auto listView = v.listView ();
372
+ for (const auto [i, elem] : enumerate(listView))
371
373
ASSERT_THAT (*elem, IsIntEq (static_cast <int >(i)+1 ));
372
374
}
373
375
@@ -405,7 +407,8 @@ namespace nix {
405
407
auto v = eval (" builtins.genList (x: x + 1) 3" );
406
408
ASSERT_EQ (v.type (), nList);
407
409
ASSERT_EQ (v.listSize (), 3u );
408
- for (const auto [i, elem] : enumerate(v.listItems ())) {
410
+ auto listView = v.listView ();
411
+ for (const auto [i, elem] : enumerate(listView)) {
409
412
ASSERT_THAT (*elem, IsThunk ());
410
413
state.forceValue (*elem, noPos);
411
414
ASSERT_THAT (*elem, IsIntEq (static_cast <int >(i)+1 ));
@@ -418,7 +421,8 @@ namespace nix {
418
421
ASSERT_EQ (v.listSize (), 6u );
419
422
420
423
const std::vector<int > numbers = { 42 , 77 , 147 , 249 , 483 , 526 };
421
- for (const auto [n, elem] : enumerate(v.listItems ()))
424
+ auto listView = v.listView ();
425
+ for (const auto [n, elem] : enumerate(listView))
422
426
ASSERT_THAT (*elem, IsIntEq (numbers[n]));
423
427
}
424
428
@@ -429,17 +433,17 @@ namespace nix {
429
433
auto right = v.attrs ()->get (createSymbol (" right" ));
430
434
ASSERT_NE (right, nullptr );
431
435
ASSERT_THAT (*right->value , IsListOfSize (2 ));
432
- ASSERT_THAT (*right->value ->listElems ()[0 ], IsIntEq (23 ));
433
- ASSERT_THAT (*right->value ->listElems ()[1 ], IsIntEq (42 ));
436
+ ASSERT_THAT (*right->value ->listView ()[0 ], IsIntEq (23 ));
437
+ ASSERT_THAT (*right->value ->listView ()[1 ], IsIntEq (42 ));
434
438
435
439
auto wrong = v.attrs ()->get (createSymbol (" wrong" ));
436
440
ASSERT_NE (wrong, nullptr );
437
441
ASSERT_EQ (wrong->value ->type (), nList);
438
442
ASSERT_EQ (wrong->value ->listSize (), 3u );
439
443
ASSERT_THAT (*wrong->value , IsListOfSize (3 ));
440
- ASSERT_THAT (*wrong->value ->listElems ()[0 ], IsIntEq (1 ));
441
- ASSERT_THAT (*wrong->value ->listElems ()[1 ], IsIntEq (9 ));
442
- ASSERT_THAT (*wrong->value ->listElems ()[2 ], IsIntEq (3 ));
444
+ ASSERT_THAT (*wrong->value ->listView ()[0 ], IsIntEq (1 ));
445
+ ASSERT_THAT (*wrong->value ->listView ()[1 ], IsIntEq (9 ));
446
+ ASSERT_THAT (*wrong->value ->listView ()[2 ], IsIntEq (3 ));
443
447
}
444
448
445
449
TEST_F (PrimOpTest, concatMap) {
@@ -448,7 +452,8 @@ namespace nix {
448
452
ASSERT_EQ (v.listSize (), 6u );
449
453
450
454
const std::vector<int > numbers = { 1 , 2 , 0 , 3 , 4 , 0 };
451
- for (const auto [n, elem] : enumerate(v.listItems ()))
455
+ auto listView = v.listView ();
456
+ for (const auto [n, elem] : enumerate(listView))
452
457
ASSERT_THAT (*elem, IsIntEq (numbers[n]));
453
458
}
454
459
@@ -682,7 +687,8 @@ namespace nix {
682
687
ASSERT_THAT (v, IsListOfSize (4 ));
683
688
684
689
const std::vector<std::string_view> strings = { " 1" , " 2" , " 3" , " git" };
685
- for (const auto [n, p] : enumerate(v.listItems ()))
690
+ auto listView = v.listView ();
691
+ for (const auto [n, p] : enumerate(listView))
686
692
ASSERT_THAT (*p, IsStringEq (strings[n]));
687
693
}
688
694
@@ -772,67 +778,67 @@ namespace nix {
772
778
auto v = eval (" builtins.split \" (a)b\" \" abc\" " );
773
779
ASSERT_THAT (v, IsListOfSize (3 ));
774
780
775
- ASSERT_THAT (*v.listElems ()[0 ], IsStringEq (" " ));
781
+ ASSERT_THAT (*v.listView ()[0 ], IsStringEq (" " ));
776
782
777
- ASSERT_THAT (*v.listElems ()[1 ], IsListOfSize (1 ));
778
- ASSERT_THAT (*v.listElems ()[1 ]->listElems ()[0 ], IsStringEq (" a" ));
783
+ ASSERT_THAT (*v.listView ()[1 ], IsListOfSize (1 ));
784
+ ASSERT_THAT (*v.listView ()[1 ]->listView ()[0 ], IsStringEq (" a" ));
779
785
780
- ASSERT_THAT (*v.listElems ()[2 ], IsStringEq (" c" ));
786
+ ASSERT_THAT (*v.listView ()[2 ], IsStringEq (" c" ));
781
787
}
782
788
783
789
TEST_F (PrimOpTest, split2) {
784
790
// v is expected to be a list [ "" [ "a" ] "b" [ "c"] "" ]
785
791
auto v = eval (" builtins.split \" ([ac])\" \" abc\" " );
786
792
ASSERT_THAT (v, IsListOfSize (5 ));
787
793
788
- ASSERT_THAT (*v.listElems ()[0 ], IsStringEq (" " ));
794
+ ASSERT_THAT (*v.listView ()[0 ], IsStringEq (" " ));
789
795
790
- ASSERT_THAT (*v.listElems ()[1 ], IsListOfSize (1 ));
791
- ASSERT_THAT (*v.listElems ()[1 ]->listElems ()[0 ], IsStringEq (" a" ));
796
+ ASSERT_THAT (*v.listView ()[1 ], IsListOfSize (1 ));
797
+ ASSERT_THAT (*v.listView ()[1 ]->listView ()[0 ], IsStringEq (" a" ));
792
798
793
- ASSERT_THAT (*v.listElems ()[2 ], IsStringEq (" b" ));
799
+ ASSERT_THAT (*v.listView ()[2 ], IsStringEq (" b" ));
794
800
795
- ASSERT_THAT (*v.listElems ()[3 ], IsListOfSize (1 ));
796
- ASSERT_THAT (*v.listElems ()[3 ]->listElems ()[0 ], IsStringEq (" c" ));
801
+ ASSERT_THAT (*v.listView ()[3 ], IsListOfSize (1 ));
802
+ ASSERT_THAT (*v.listView ()[3 ]->listView ()[0 ], IsStringEq (" c" ));
797
803
798
- ASSERT_THAT (*v.listElems ()[4 ], IsStringEq (" " ));
804
+ ASSERT_THAT (*v.listView ()[4 ], IsStringEq (" " ));
799
805
}
800
806
801
807
TEST_F (PrimOpTest, split3) {
802
808
auto v = eval (" builtins.split \" (a)|(c)\" \" abc\" " );
803
809
ASSERT_THAT (v, IsListOfSize (5 ));
804
810
805
811
// First list element
806
- ASSERT_THAT (*v.listElems ()[0 ], IsStringEq (" " ));
812
+ ASSERT_THAT (*v.listView ()[0 ], IsStringEq (" " ));
807
813
808
814
// 2nd list element is a list [ "" null ]
809
- ASSERT_THAT (*v.listElems ()[1 ], IsListOfSize (2 ));
810
- ASSERT_THAT (*v.listElems ()[1 ]->listElems ()[0 ], IsStringEq (" a" ));
811
- ASSERT_THAT (*v.listElems ()[1 ]->listElems ()[1 ], IsNull ());
815
+ ASSERT_THAT (*v.listView ()[1 ], IsListOfSize (2 ));
816
+ ASSERT_THAT (*v.listView ()[1 ]->listView ()[0 ], IsStringEq (" a" ));
817
+ ASSERT_THAT (*v.listView ()[1 ]->listView ()[1 ], IsNull ());
812
818
813
819
// 3rd element
814
- ASSERT_THAT (*v.listElems ()[2 ], IsStringEq (" b" ));
820
+ ASSERT_THAT (*v.listView ()[2 ], IsStringEq (" b" ));
815
821
816
822
// 4th element is a list: [ null "c" ]
817
- ASSERT_THAT (*v.listElems ()[3 ], IsListOfSize (2 ));
818
- ASSERT_THAT (*v.listElems ()[3 ]->listElems ()[0 ], IsNull ());
819
- ASSERT_THAT (*v.listElems ()[3 ]->listElems ()[1 ], IsStringEq (" c" ));
823
+ ASSERT_THAT (*v.listView ()[3 ], IsListOfSize (2 ));
824
+ ASSERT_THAT (*v.listView ()[3 ]->listView ()[0 ], IsNull ());
825
+ ASSERT_THAT (*v.listView ()[3 ]->listView ()[1 ], IsStringEq (" c" ));
820
826
821
827
// 5th element is the empty string
822
- ASSERT_THAT (*v.listElems ()[4 ], IsStringEq (" " ));
828
+ ASSERT_THAT (*v.listView ()[4 ], IsStringEq (" " ));
823
829
}
824
830
825
831
TEST_F (PrimOpTest, split4) {
826
832
auto v = eval (" builtins.split \" ([[:upper:]]+)\" \" FOO \" " );
827
833
ASSERT_THAT (v, IsListOfSize (3 ));
828
- auto first = v.listElems ()[0 ];
829
- auto second = v.listElems ()[1 ];
830
- auto third = v.listElems ()[2 ];
834
+ auto first = v.listView ()[0 ];
835
+ auto second = v.listView ()[1 ];
836
+ auto third = v.listView ()[2 ];
831
837
832
838
ASSERT_THAT (*first, IsStringEq (" " ));
833
839
834
840
ASSERT_THAT (*second, IsListOfSize (1 ));
835
- ASSERT_THAT (*second->listElems ()[0 ], IsStringEq (" FOO" ));
841
+ ASSERT_THAT (*second->listView ()[0 ], IsStringEq (" FOO" ));
836
842
837
843
ASSERT_THAT (*third, IsStringEq (" " ));
838
844
}
@@ -850,14 +856,14 @@ namespace nix {
850
856
TEST_F (PrimOpTest, match3) {
851
857
auto v = eval (" builtins.match \" a(b)(c)\" \" abc\" " );
852
858
ASSERT_THAT (v, IsListOfSize (2 ));
853
- ASSERT_THAT (*v.listElems ()[0 ], IsStringEq (" b" ));
854
- ASSERT_THAT (*v.listElems ()[1 ], IsStringEq (" c" ));
859
+ ASSERT_THAT (*v.listView ()[0 ], IsStringEq (" b" ));
860
+ ASSERT_THAT (*v.listView ()[1 ], IsStringEq (" c" ));
855
861
}
856
862
857
863
TEST_F (PrimOpTest, match4) {
858
864
auto v = eval (" builtins.match \" [[:space:]]+([[:upper:]]+)[[:space:]]+\" \" FOO \" " );
859
865
ASSERT_THAT (v, IsListOfSize (1 ));
860
- ASSERT_THAT (*v.listElems ()[0 ], IsStringEq (" FOO" ));
866
+ ASSERT_THAT (*v.listView ()[0 ], IsStringEq (" FOO" ));
861
867
}
862
868
863
869
TEST_F (PrimOpTest, match5) {
@@ -874,7 +880,8 @@ namespace nix {
874
880
875
881
// ensure that the list is sorted
876
882
const std::vector<std::string_view> expected { " a" , " x" , " y" , " z" };
877
- for (const auto [n, elem] : enumerate(v.listItems ()))
883
+ auto listView = v.listView ();
884
+ for (const auto [n, elem] : enumerate(listView))
878
885
ASSERT_THAT (*elem, IsStringEq (expected[n]));
879
886
}
880
887
0 commit comments