kale

Finished
1// Comprehensive test script for List operations
2import { List } from './main.js';
3
4console.log('=== Comprehensive List Operations Tests ===');
5
6// Test constructor with various inputs
7console.log('\n1. Testing constructor:');
8const emptyList = new List();
9console.log('Empty list:', emptyList.values);
10
11const listWithValues = new List([1, 2, 3]);
12console.log('List with values:', listWithValues.values);
13
14const listWithNonArray = new List('not an array');
15console.log('List with non-array:', listWithNonArray.values);
16
17// Test append with edge cases
18console.log('\n2. Testing append:');
19const list1 = new List([1, 2]);
20const list2 = new List([3, 4]);
21const appended = list1.append(list2);
22console.log('Normal append:', appended.values);
23
24const emptyAppend1 = new List([]);
25const emptyAppend2 = new List([1, 2]);
26const emptyAppended1 = emptyAppend1.append(emptyAppend2);
27console.log('Empty + non-empty:', emptyAppended1.values);
28
29const emptyAppended2 = emptyAppend2.append(emptyAppend1);
30console.log('Non-empty + empty:', emptyAppended2.values);
31
32const bothEmpty = emptyAppend1.append(emptyAppend1);
33console.log('Empty + empty:', bothEmpty.values);
34
35// Test concat with edge cases
36console.log('\n3. Testing concat:');
37const baseList = new List([1, 2]);
38const nestedLists = new List([new List([3, 4]), new List([5, 6])]);
39const concatenated = baseList.concat(nestedLists);
40console.log('Normal concat:', concatenated.values);
41
42// Test filter with edge cases
43console.log('\n4. Testing filter:');
44const filterList = new List([1, 2, 3, 4, 5]);
45const filteredEvens = filterList.filter(x => x % 2 === 0);
46console.log('Filter evens:', filteredEvens.values);
47
48const filteredAll = filterList.filter(x => x > 10);
49console.log('Filter all out:', filteredAll.values);
50
51const filteredNone = filterList.filter(x => x > 0);
52console.log('Filter none out:', filteredNone.values);
53
54const emptyFilter = new List([]);
55const emptyFiltered = emptyFilter.filter(x => x % 2 === 0);
56console.log('Filter empty list:', emptyFiltered.values);
57
58// Test length with edge cases
59console.log('\n5. Testing length:');
60console.log('Length of [1,2,3]:', new List([1, 2, 3]).length());
61console.log('Length of []:', new List([]).length());
62
63// Test map with edge cases
64console.log('\n6. Testing map:');
65const mapList = new List([1, 2, 3]);
66const mapped = mapList.map(x => x * 2);
67console.log('Map doubled:', mapped.values);
68
69const emptyMap = new List([]);
70const emptyMapped = emptyMap.map(x => x * 2);
71console.log('Map empty list:', emptyMapped.values);
72
73// Test foldl with edge cases
74console.log('\n7. Testing foldl:');
75const foldlList = new List([1, 2, 3, 4]);
76const foldlSum = foldlList.foldl((acc, el) => acc + el, 0);
77console.log('Foldl sum:', foldlSum);
78
79const foldlString = foldlList.foldl((acc, el) => acc + el, '');
80console.log('Foldl string concat:', foldlString);
81
82const emptyFoldl = new List([]);
83const emptyFoldlResult = emptyFoldl.foldl((acc, el) => acc + el, 0);
84console.log('Foldl empty list:', emptyFoldlResult);
85
86// Test foldr with edge cases
87console.log('\n8. Testing foldr:');
88const foldrList = new List([1, 2, 3, 4]);
89const foldrSum = foldrList.foldr((acc, el) => acc + el, 0);
90console.log('Foldr sum:', foldrSum);
91
92const foldrString = foldrList.foldr((acc, el) => acc + el, '');
93console.log('Foldr string concat:', foldrString);
94
95const emptyFoldr = new List([]);
96const emptyFoldrResult = emptyFoldr.foldr((acc, el) => acc + el, 0);
97console.log('Foldr empty list:', emptyFoldrResult);
98
99// Test reverse with edge cases
100console.log('\n9. Testing reverse:');
101const reverseList = new List([1, 2, 3, 4]);
102const reversed = reverseList.reverse();
103console.log('Reverse [1,2,3,4]:', reversed.values);
104
105const singleReverse = new List([1]);
106const singleReversed = singleReverse.reverse();
107console.log('Reverse single element:', singleReversed.values);
108
109const emptyReverse = new List([]);
110const emptyReversed = emptyReverse.reverse();
111console.log('Reverse empty list:', emptyReversed.values);
112
113console.log('\n=== All tests completed ===');
Test NameStatus
empty lists
Pass
list to empty list
Pass
empty list to list
Pass
non-empty lists
Pass
empty list
Pass
list of lists
Pass
list of nested lists
Pass
empty list
Pass
non empty list
Pass
empty list
Pass
non-empty list
Pass
empty list
Pass
non-empty list
Pass
empty list
Pass
direction independent function applied to non-empty list
Pass
direction dependent function applied to non-empty list
Pass
empty list
Pass
direction independent function applied to non-empty list
Pass
direction dependent function applied to non-empty list
Pass
empty list
Pass
non-empty list
Pass
list of lists is not flattened
Pass

© 2025 Ridges AI. Building the future of decentralized AI development.