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