Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit a06d324

Browse files
committed
feat: Implement test cases (arr.exercise 21)
- implement test cases - correct typos and minor logic errors (optimizing the order of operationst) - all tests pass successfully
1 parent 72b547c commit a06d324

File tree

2 files changed

+75
-7
lines changed

2 files changed

+75
-7
lines changed

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ These exercises were developed as part of:
326326
| 18 | [Kubrick Filmography](#exercise-arr-18-kubrick-filmography) | ✔️ 🧪 | [Solution](./array-exercises/18_kubrickFilmography.js) |
327327
| 19 | [Literature Analysis](#exercise-arr-19-literature-analysis) | ✔️ 🧪 | [Solution](./array-exercises/19_literatureAnalysis.js) |
328328
| 20 | [Space Missions](#exercise-arr-20-space-missions) || [Solution](./array-exercises/20_spaceMissions.js) |
329-
| 21 | [Manipulation Challenges](#exercise-arr-21-manipulation-challenge) | ✔️ | [Solution](./array-exercises/21_manipulationChallenges.js) |
329+
| 21 | [Manipulation Challenges](#exercise-arr-21-manipulation-challenge) | ✔️ 🧪 | [Solution](./array-exercises/21_manipulationChallenges.js) |
330330

331331

332332

‎array-exercises/21_manipulationChallenges.js‎

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ const filteredNumbers = mixedArray.filter((item) => (typeof(item) == 'number'));
3131
console.log('Only numbers from mixed array:',filteredNumbers);
3232

3333

34-
const mappedString = filteredNumbers.map((number) => number=('Number:'+number.toString()));
35-
console.log(' Numbers converted to a string:', mappedString);
34+
const mappedStrings = filteredNumbers.map((number) => number=('Number:'+number.toString()));
35+
console.log(' Numbers converted to a string:', mappedStrings);
3636

3737
// Part II - Reduction & Calculation
3838

@@ -68,7 +68,7 @@ mixedArray.forEach((item) => {
6868

6969
let chainedResult =
7070
mixedArray.filter((item) => typeof(item)==='number')
71-
.map((item) => 'Number: '+item);
71+
.map((item) => 'Number: '+item);
7272
console.log(`Array of numbers converted to strings (by chaining methods):`,chainedResult);
7373

7474
console.groupEnd();
@@ -107,7 +107,8 @@ console.log('Total number of numbers in the array \n- with .reduce(): ',countNum
107107

108108

109109
console.log('✨ Original filtered numbers:',filteredNumbers);
110-
const sortedDescending=filteredNumbers.sort((a,b)=> (b-a));
110+
const filterNumbers=[...filteredNumbers]
111+
const sortedDescending=filterNumbers.sort((a,b)=> (b-a));
111112
console.log(`Filtered numbers in descending order: `,sortedDescending);
112113

113114
// 3 - Unique Collection
@@ -135,15 +136,15 @@ console.log('Unique elements - with reduce():\n',uniqueE);
135136

136137
console.log('✨ Original mixed array:',mixedArray);
137138

138-
const transformedMixedAray = mixedArray.map((element)=> {
139+
const transformedMixedArray = mixedArray.map((element)=> {
139140
if (typeof(element) =='number'){
140141
return element * element;
141142
}else{
142143
return element.toUpperCase();
143144
}
144145
});
145146
console.log ('Transformed mixed array \n(strings to uppercase, numbers squared):');
146-
console.log(transformedMixedAray);
147+
console.log(transformedMixedArray);
147148
console.groupEnd();
148149

149150
// <--- SCORE ANALYSIS --->
@@ -188,3 +189,70 @@ uniqueSortedScores.sort((a,b)=>b-a);
188189
console.log(`Only uniques values (from highest to lowest): `, uniqueSortedScores);
189190

190191
console.groupEnd();
192+
193+
// <--- TEST CASES --->
194+
195+
console.log('Test Cases');
196+
197+
// Helper function for asserting equality
198+
function assertEqual(actual, expected, testName) {
199+
const areArraysEqual = (arr1, arr2) => {
200+
if (!Array.isArray(arr1) || !Array.isArray(arr2)) return actual === expected;
201+
if (arr1.length !== arr2.length) return false;
202+
for (let i = 0; i < arr1.length; i++) {
203+
if (arr1[i] !== arr2[i]) return false;
204+
}
205+
return true;
206+
};
207+
208+
if (areArraysEqual(actual, expected)) {
209+
console.log(`✅ PASS: ${testName}`);
210+
} else {
211+
console.error(`❌ FAIL: ${testName} - Expected: ${JSON.stringify(expected)}, Got: ${JSON.stringify(actual)}`);
212+
}
213+
}
214+
215+
// --- Warm-up Exercise Tests ---
216+
// Assuming you store the results in `doubledFor` and `doubledMap`
217+
// Example: const doubledFor = [2, 4, 6, 8, 10];
218+
// Example: const doubledMap = [2, 4, 6, 8, 10];
219+
assertEqual(doubledFor, [2, 4, 6, 8, 10], "Warm-up: doubledFor using for loop");
220+
assertEqual(doubledMap, [2, 4, 6, 8, 10], "Warm-up: doubledMap using .map()");
221+
222+
// --- Easy Challenge Tests ---
223+
// Assuming you store the results in `filteredNumbers`, `mappedStrings`, `totalSum`, `largestNumber`
224+
// Example: const filteredNumbers = [10, 25, 42, 15, 30];
225+
// Example: const mappedStrings = ['Number: 10', 'Number: 25', 'Number: 42', 'Number: 15', 'Number: 30'];
226+
// Example: const totalSum = 122;
227+
// Example: const largestNumber = 42;
228+
assertEqual(filteredNumbers, [10, 25, 42, 15, 30], "Easy Challenge: filteredNumbers");
229+
assertEqual(mappedStrings, ['Number: 10', 'Number: 25', 'Number: 42', 'Number: 15', 'Number: 30'], "Easy Challenge: mappedStrings");
230+
assertEqual(totalSum, 122, "Easy Challenge: totalSum");
231+
assertEqual(largestNumber, 42, "Easy Challenge: largestNumber");
232+
233+
// --- Medium Challenge Tests ---
234+
// Assuming you store the result in `chainedResult`
235+
// Example: const chainedResult = ['Number: 25', 'Number: 42', 'Number: 15', 'Number: 30'];
236+
assertEqual(chainedResult, ['Number: 10', 'Number: 25', 'Number: 42', 'Number: 15', 'Number: 30'], "Medium Challenge: chainedResult");
237+
// Note: Part 3 (forEach) involves console logging, which is visually verified.
238+
239+
// --- Choose & Use Challenge Tests ---
240+
// Assuming you store the results in `numericCount`, `sortedDescending`, `uniqueElements`, `transformedMixedArray`
241+
// Example: const numericCount = 5;
242+
// Example: const sortedDescending = [42, 30, 25, 15, 10];
243+
// Example: const uniqueElements = ['a', 'b', 'c', 'd'];
244+
// Example: const transformedMixedArray = [100, 'APPLE', 625, 1764, 'BANANA', 225, 900, 'CHERRY'];
245+
assertEqual(numericCount, 5, "Choose & Use: Challenge 1 (Value Count)");
246+
assertEqual(sortedDescending, [42, 30, 25, 15, 10], "Choose & Use: Challenge 2 (Descending Order)");
247+
assertEqual(uniqueElements, ['a', 'b', 'c', 'd'], "Choose & Use: Challenge 3 (Unique Collection)");
248+
assertEqual(transformedMixedArray, [100, 'APPLE', 625, 1764, 'BANANA', 225, 900, 'CHERRY'], "Choose & Use: Challenge 4 (Mixed Transformation)");
249+
250+
// --- Advanced Challenge Tests ---
251+
// Assuming you store the results in `sumOfFilteredScores`, `countOf25`, `uniqueSortedScores`
252+
// Example: const sumOfFilteredScores = 230;
253+
// Example: const countOf25 = 3;
254+
// Example: const uniqueSortedScores = [60, 50, 45, 25, 15, 10, 5];
255+
assertEqual(sumOfFilteredScores, 230, "Advanced Challenge: Challenge 1 (Filtering and Summation)");
256+
assertEqual(countOf25, 3, "Advanced Challenge: Challenge 2 (Counting Occurrences)");
257+
assertEqual(uniqueSortedScores, [60, 50, 45, 25, 15, 10, 5], "Advanced Challenge: Challenge 3 (Transformation and Uniqueness)");
258+

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /