MIRROR: javascript for 馃悳's, a tiny runtime with big ambitions
1// Test Array methods functionality
2
3console.log("=== Array Methods Tests ===\n");
4
5// Test 1: push and pop (existing)
6console.log("Test 1: push() and pop()");
7let arr1 = [1, 2, 3];
8console.log(" Initial:", arr1);
9arr1.push(4);
10console.log(" After push(4):", arr1);
11arr1.push(5, 6);
12console.log(" After push(5, 6):", arr1);
13let popped = arr1.pop();
14console.log(" Popped value:", popped);
15console.log(" After pop():", arr1);
16
17// Test 2: slice
18console.log("\nTest 2: slice()");
19let arr2 = [10, 20, 30, 40, 50];
20console.log(" Original:", arr2);
21console.log(" slice(1, 3):", arr2.slice(1, 3));
22console.log(" slice(2):", arr2.slice(2));
23console.log(" slice(-2):", arr2.slice(-2));
24console.log(" slice(0, -2):", arr2.slice(0, -2));
25console.log(" slice(-4, -1):", arr2.slice(-4, -1));
26console.log(" Original unchanged:", arr2);
27
28// Test 3: join
29console.log("\nTest 3: join()");
30let arr3 = ["apple", "banana", "cherry"];
31console.log(" Array:", arr3);
32console.log(" join(', '):", arr3.join(", "));
33console.log(" join(' - '):", arr3.join(" - "));
34console.log(" join(''):", arr3.join(""));
35console.log(" join():", arr3.join());
36
37let numbers = [1, 2, 3, 4, 5];
38console.log(" Numbers:", numbers);
39console.log(" join('-'):", numbers.join("-"));
40
41// Test 4: includes
42console.log("\nTest 4: includes()");
43let arr4 = [1, 2, 3, 4, 5];
44console.log(" Array:", arr4);
45console.log(" includes(3):", arr4.includes(3));
46console.log(" includes(6):", arr4.includes(6));
47console.log(" includes(1):", arr4.includes(1));
48console.log(" includes(5):", arr4.includes(5));
49console.log(" includes(0):", arr4.includes(0));
50
51// Test 5: includes with different types
52console.log("\nTest 5: includes() with different types");
53let mixed = [1, "hello", true, false, 42];
54console.log(" Array:", mixed);
55console.log(" includes(1):", mixed.includes(1));
56console.log(" includes('hello'):", mixed.includes("hello"));
57console.log(" includes('Hello'):", mixed.includes("Hello"));
58console.log(" includes(true):", mixed.includes(true));
59console.log(" includes(false):", mixed.includes(false));
60console.log(" includes(42):", mixed.includes(42));
61console.log(" includes(0):", mixed.includes(0));
62
63// Test 6: Combining methods
64console.log("\nTest 6: Combining array methods");
65let data = [10, 20, 30, 40, 50, 60, 70];
66console.log(" Original:", data);
67let subset = data.slice(2, 5);
68console.log(" slice(2, 5):", subset);
69console.log(" Joined:", subset.join(" -> "));
70console.log(" includes(40):", subset.includes(40));
71console.log(" includes(10):", subset.includes(10));
72
73// Test 7: Building CSV
74console.log("\nTest 7: Building CSV");
75let headers = ["Name", "Age", "City"];
76let row1 = ["Alice", "25", "NYC"];
77let row2 = ["Bob", "30", "LA"];
78console.log(" " + headers.join(","));
79console.log(" " + row1.join(","));
80console.log(" " + row2.join(","));
81
82// Test 8: Array manipulation
83console.log("\nTest 8: Array manipulation");
84let queue = [];
85console.log(" Initial queue:", queue);
86queue.push("task1");
87queue.push("task2");
88queue.push("task3");
89console.log(" After adding tasks:", queue);
90let first = queue.slice(0, 1);
91console.log(" First task:", first);
92let remaining = queue.slice(1);
93console.log(" Remaining:", remaining);
94
95// Test 9: Finding elements
96console.log("\nTest 9: Finding elements");
97let items = ["apple", "banana", "cherry", "date"];
98console.log(" Items:", items);
99if (items.includes("banana")) {
100 console.log(" Found 'banana' in the list");
101}
102if (!items.includes("grape")) {
103 console.log(" 'grape' not found in the list");
104}
105
106// Test 10: Slice for copy
107console.log("\nTest 10: Copying array with slice");
108let original = [1, 2, 3, 4, 5];
109let copy = original.slice();
110console.log(" Original:", original);
111console.log(" Copy:", copy);
112copy.push(6);
113console.log(" After push to copy:", copy);
114console.log(" Original unchanged:", original);
115
116// Test 11: Working with ranges
117console.log("\nTest 11: Working with ranges");
118let range = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
119console.log(" Full range:", range);
120console.log(" First 3:", range.slice(0, 3));
121console.log(" Last 3:", range.slice(-3));
122console.log(" Middle:", range.slice(3, 7));
123
124// Test 12: Edge cases
125console.log("\nTest 12: Edge cases");
126let empty = [];
127console.log(" Empty array:", empty);
128console.log(" slice():", empty.slice());
129console.log(" join(','):", "'" + empty.join(",") + "'");
130console.log(" includes(1):", empty.includes(1));
131let popped_empty = empty.pop();
132console.log(" pop() on empty:", popped_empty);
133
134let single = [42];
135console.log(" Single element [42]:");
136console.log(" slice():", single.slice());
137console.log(" join():", single.join(","));
138console.log(" includes(42):", single.includes(42));
139console.log(" includes(0):", single.includes(0));
140
141// Test 13: Practical example - path segments
142console.log("\nTest 13: Path processing");
143let pathSegments = ["home", "user", "documents", "file.txt"];
144console.log(" Segments:", pathSegments);
145let path = "/" + pathSegments.join("/");
146console.log(" Path:", path);
147let filename = pathSegments.slice(-1);
148console.log(" Filename:", filename);
149let directory = pathSegments.slice(0, -1);
150console.log(" Directory parts:", directory);
151
152// Test 14: Data filtering (manual)
153console.log("\nTest 14: Manual filtering");
154let scores = [85, 92, 78, 95, 88, 73, 91];
155console.log(" All scores:", scores);
156let highScores = [];
157for (let i = 0; i < scores.length; i++) {
158 if (scores[i] >= 90) {
159 highScores.push(scores[i]);
160 }
161}
162console.log(" High scores (>= 90):", highScores);
163console.log(" Joined:", highScores.join(", "));
164
165// Test 15: Checking membership
166console.log("\nTest 15: Membership checking");
167let allowedUsers = ["admin", "user1", "user2", "guest"];
168let username = "user1";
169console.log(" Allowed users:", allowedUsers);
170console.log(" Check '" + username + "':", allowedUsers.includes(username));
171username = "hacker";
172console.log(" Check '" + username + "':", allowedUsers.includes(username));
173
174console.log("\n=== All tests completed ===");