diff --git a/Sprint-1/implement/dedupe.js b/Sprint-1/implement/dedupe.js index 781e8718a..4fd67f406 100644 --- a/Sprint-1/implement/dedupe.js +++ b/Sprint-1/implement/dedupe.js @@ -1 +1,13 @@ -function dedupe() {} +function dedupe(value) { + const newDedupe = [...new Set(value)]; + return newDedupe; +} +/* +console.log(dedupe({})); +console.log(dedupe(["a", "a", "a", "b", "b", "c"])); // should return ['a', 'b', 'c'] +console.log(dedupe([])); // should return []; +console.log(dedupe([])); // should return ["no duplicates"] +console.log(dedupe([5, 1, 1, 2, 3, 2, 5, 8])); // should return [5, 1, 2, 3, 8] +console.log(dedupe([1, 3, 2, 4])); // should return [1, 3, 2, 4] +*/ +module.exports = dedupe; diff --git a/Sprint-1/implement/dedupe.test.js b/Sprint-1/implement/dedupe.test.js index d7c8e3d8e..6ffb17e34 100644 --- a/Sprint-1/implement/dedupe.test.js +++ b/Sprint-1/implement/dedupe.test.js @@ -1,28 +1,15 @@ const dedupe = require("./dedupe.js"); -/* -Dedupe Array -📖 Dedupe means **deduplicate** +test("given an empty array, it returns an empty array", () => { + expect(dedupe([])).toEqual([]); +}); -In this kata, you will need to deduplicate the elements of an array +test("given an array with unique elements, it returns the same array", () => { + expect(dedupe([2, 1, 4, "2", "d", "g"])).toEqual([2, 1, 4, "2", "d", "g"]); +}); -E.g. dedupe(['a','a','a','b','b','c']) returns ['a','b','c'] -E.g. dedupe([5, 1, 1, 2, 3, 2, 5, 8]) returns [5, 1, 2, 3, 8] -E.g. dedupe([1, 2, 1]) returns [1, 2] -*/ - -// Acceptance Criteria: - -// Given an empty array -// When passed to the dedupe function -// Then it should return an empty array -test.todo("given an empty array, it returns an empty array"); - -// Given an array with no duplicates -// When passed to the dedupe function -// Then it should return a copy of the original array - -// Given an array of strings or numbers -// When passed to the dedupe function -// Then it should return a new array with duplicates removed while preserving the -// first occurrence of each element from the original array. +test("given an array of strings or numbers then it should return new array with duplicates removed", () => { + expect(dedupe([2, 2, 4, 2, 3, 4, 8, 5, 4, 1, 9])).toEqual([ + 2, 4, 3, 8, 5, 1, 9, + ]); +}); diff --git a/Sprint-1/implement/max.js b/Sprint-1/implement/max.js index 6dd76378e..2768a0515 100644 --- a/Sprint-1/implement/max.js +++ b/Sprint-1/implement/max.js @@ -1,4 +1,6 @@ function findMax(elements) { + elements = elements.filter((x) => typeof x === "number"); + return Math.max(...elements); } module.exports = findMax; diff --git a/Sprint-1/implement/max.test.js b/Sprint-1/implement/max.test.js index 82f18fd88..8531ce54c 100644 --- a/Sprint-1/implement/max.test.js +++ b/Sprint-1/implement/max.test.js @@ -1,43 +1,33 @@ -/* Find the maximum element of an array of numbers - -In this kata, you will need to implement a function that find the largest numerical element of an array. - -E.g. max([30, 50, 10, 40]), target output: 50 -E.g. max(['hey', 10, 'hi', 60, 10]), target output: 60 (sum ignores any non-numerical elements) - -You should implement this function in max.js, and add tests for it in this file. - -We have set things up already so that this file can see your function from the other file. -*/ - const findMax = require("./max.js"); -// Given an empty array -// When passed to the max function -// Then it should return -Infinity -// Delete this test.todo and replace it with a test. -test.todo("given an empty array, returns -Infinity"); +test("Given an array with only +ve numbers and should return the largest of them", () => { + expect(findMax([2, 4, 2, 1, 5])).toEqual(5); +}); + +test("Given an empty array should return -Infinity", () => { + expect(findMax([])).toEqual(-Infinity); +}); -// Given an array with one number -// When passed to the max function -// Then it should return that number +test("Given an array with one number only and it should return that number", () => { + expect(findMax([7])).toEqual(7); +}); -// Given an array with both positive and negative numbers -// When passed to the max function -// Then it should return the largest number overall +test("Given an array with both positive and negative numbers and it should return the largest number", () => { + expect(findMax([1, -3, -2, 3, 4])).toEqual(4); +}); -// Given an array with just negative numbers -// When passed to the max function -// Then it should return the closest one to zero +test("Given an array with negative numbers and it should return the largest number", () => { + expect(findMax([-2, -5, -5, -3, -10])).toEqual(-2); +}); -// Given an array with decimal numbers -// When passed to the max function -// Then it should return the largest decimal number +test("Given an array with decimal numbers and it should return the largest decimal numbers", () => { + expect(findMax([2.7, 2.01, 4.4, 5.2])).toEqual(5.2); +}); -// Given an array with non-number values -// When passed to the max function -// Then it should return the max and ignore non-numeric values +test("Given an array a mix of non-numeric values and numeric values and it should return the largest from only the numeric values and ignore the non-numeric ones", () => { + expect(findMax([2, "a", 8, "12", 8.1])).toEqual(8.1); +}); -// Given an array with only non-number values -// When passed to the max function -// Then it should return the least surprising value given how it behaves for all other inputs +test("Given an array with only non-numeric values and it should return -Infinity", () => { + expect(findMax(["a", "e", "I", "o", "U"])).toEqual(-Infinity); +}); diff --git a/Sprint-1/implement/sum.js b/Sprint-1/implement/sum.js index 9062aafe3..764f1cf00 100644 --- a/Sprint-1/implement/sum.js +++ b/Sprint-1/implement/sum.js @@ -1,4 +1,10 @@ function sum(elements) { + let total = 0; + elements = elements.filter((x) => typeof x === "number"); + for (let i = 0; i < elements.length; i++) { + total += elements[i]; + } + return total; } module.exports = sum; diff --git a/Sprint-1/implement/sum.test.js b/Sprint-1/implement/sum.test.js index dd0a090ca..57e6903eb 100644 --- a/Sprint-1/implement/sum.test.js +++ b/Sprint-1/implement/sum.test.js @@ -1,36 +1,25 @@ -/* Sum the numbers in an array - -In this kata, you will need to implement a function that sums the numerical elements of an array - -E.g. sum([10, 20, 30]), target output: 60 -E.g. sum(['hey', 10, 'hi', 60, 10]), target output: 80 (ignore any non-numerical elements) -*/ - const sum = require("./sum.js"); -// Acceptance Criteria: - -// Given an empty array -// When passed to the sum function -// Then it should return 0 -test.todo("given an empty array, returns 0") +test("given an empty array, it returns an empty array", () => { + expect(sum([])).toEqual(0); +}); -// Given an array with just one number -// When passed to the sum function -// Then it should return that number +test("Given an array with just one number to the sum function Then it should return that number", () => { + expect(sum([3])).toEqual(3); +}); -// Given an array containing negative numbers -// When passed to the sum function -// Then it should still return the correct total sum +test("given an array containing negative numbers to the sum function then it should return the correct total", () => { + expect(sum([1, -1, -2, -3])).toEqual(-5); +}); -// Given an array with decimal/float numbers -// When passed to the sum function -// Then it should return the correct total sum +test("given an array with decimal/float numbers should return the correct total sum", () => { + expect(sum([2, 2.5])).toEqual(4.5); +}); -// Given an array containing non-number values -// When passed to the sum function -// Then it should ignore the non-numerical values and return the sum of the numerical elements +test("given an array non-number value should return the correct total of only the numeric ones", () => { + expect(sum([2, "2", "a", "b", 3])).toEqual(5); +}); -// Given an array with only non-number values -// When passed to the sum function -// Then it should return the least surprising value given how it behaves for all other inputs +test("given an array non-number value should return 0", () => { + expect(sum(["a", "c", "f", "3"])).toEqual(0); +});