From 57ef45ad35c2972a29d472536b8e105d60000fd8 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Tue, 14 Jan 2025 18:23:11 -0300 Subject: [PATCH 01/18] [GREEN]: should know that for the numbers 1, 2 and 3, the minimum is 1 --- .../2_2_Stats_Calculator/src/index.spec.ts | 9 +++++++-- .../2_2_Stats_Calculator/src/index.ts | 7 +++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index ced7dc176..bd45b3f40 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -1,5 +1,10 @@ +import {StatsCalculator} from "./index"; describe('stats calculator', () => { - - + it('should know that for the numbers 1, 2 and 3, the minimum is 1', () => { + const result = { + min: 1, + } + expect(StatsCalculator.run()).toEqual(result); + }) }) \ No newline at end of file diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index e69de29bb..30a8c89c6 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -0,0 +1,7 @@ +export class StatsCalculator { + static run() { + return { + min: 1 + } + } +} \ No newline at end of file From 29d71ead845d17c20d24716e1faafb47f117ee5a Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 13:47:30 -0300 Subject: [PATCH 02/18] [REFACTOR]: improved test --- .../2_2_Stats_Calculator/src/index.spec.ts | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index bd45b3f40..c4a28999a 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -2,9 +2,7 @@ import {StatsCalculator} from "./index"; describe('stats calculator', () => { it('should know that for the numbers 1, 2 and 3, the minimum is 1', () => { - const result = { - min: 1, - } - expect(StatsCalculator.run()).toEqual(result); + expect(StatsCalculator.run()).toHaveProperty('min') + expect(StatsCalculator.run().min).toBe(1) }) }) \ No newline at end of file From 6539aae673081c1c9a13de96208a6b4afa1f821b Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:01:20 -0300 Subject: [PATCH 03/18] [GREEN]: should know that for the numbers 1, 2 and 3, the maximum is 3 --- .../2_2_Stats_Calculator/src/index.spec.ts | 5 +++++ .../2_2_Stats_Calculator/src/index.ts | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index c4a28999a..288adec9a 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -5,4 +5,9 @@ describe('stats calculator', () => { expect(StatsCalculator.run()).toHaveProperty('min') expect(StatsCalculator.run().min).toBe(1) }) + + it('should know that for the numbers 1, 2 and 3, the maximum is 3', () => { + expect(StatsCalculator.run()).toHaveProperty('max') + expect(StatsCalculator.run().max).toBe(3) + }) }) \ No newline at end of file diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index 30a8c89c6..0d365d76f 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -1,7 +1,8 @@ export class StatsCalculator { static run() { return { - min: 1 + min: 1, + max: 3 } } } \ No newline at end of file From 74c6b691c7d6e42fc4a4a87bbf736290c75f5117 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:02:54 -0300 Subject: [PATCH 04/18] [REFACTOR]: add return type --- .../2_2_Stats_Calculator/src/index.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index 0d365d76f..645959ce7 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -1,5 +1,12 @@ +export type Statistics = { + min: number, + max: number, + numberOfElements: number, + average: number +} + export class StatsCalculator { - static run() { + static run(): StatsCalculator { return { min: 1, max: 3 From 02203d9e8fc22668261c64dba977a98ba5524ae6 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:04:39 -0300 Subject: [PATCH 05/18] [GREEN]: should know that for the numbers 1, 2 and 3, the number of elements is 3 --- .../2_2_Stats_Calculator/src/index.spec.ts | 5 +++++ .../2_2_Stats_Calculator/src/index.ts | 6 +++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index 288adec9a..7acb8bd4a 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -10,4 +10,9 @@ describe('stats calculator', () => { expect(StatsCalculator.run()).toHaveProperty('max') expect(StatsCalculator.run().max).toBe(3) }) + + it('should know that for the numbers 1, 2 and 3, the number of elements is 3', () => { + expect(StatsCalculator.run()).toHaveProperty('numberOfElements') + expect(StatsCalculator.run().numberOfElements).toBe(3) + }) }) \ No newline at end of file diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index 645959ce7..a3bc4177f 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -2,14 +2,14 @@ export type Statistics = { min: number, max: number, numberOfElements: number, - average: number } export class StatsCalculator { - static run(): StatsCalculator { + static run(): Statistics { return { min: 1, - max: 3 + max: 3, + numberOfElements: 3 } } } \ No newline at end of file From 9949c1ba3ac9e6eb6249994e34f87f7decbdb691 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:06:04 -0300 Subject: [PATCH 06/18] [GREEN]: should know that for the numbers 1, 2 and 3, the average is 2 --- .../2_2_Stats_Calculator/src/index.spec.ts | 5 +++++ .../2_2_Stats_Calculator/src/index.ts | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index 7acb8bd4a..a9384ebb2 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -15,4 +15,9 @@ describe('stats calculator', () => { expect(StatsCalculator.run()).toHaveProperty('numberOfElements') expect(StatsCalculator.run().numberOfElements).toBe(3) }) + + it('should know that for the numbers 1, 2 and 3, the average is 2', () => { + expect(StatsCalculator.run()).toHaveProperty('average') + expect(StatsCalculator.run().average).toBe(2) + }) }) \ No newline at end of file diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index a3bc4177f..3ddd71da8 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -2,6 +2,7 @@ export type Statistics = { min: number, max: number, numberOfElements: number, + average: number } export class StatsCalculator { @@ -9,7 +10,8 @@ export class StatsCalculator { return { min: 1, max: 3, - numberOfElements: 3 + numberOfElements: 3, + average: 2 } } } \ No newline at end of file From e83a37803e1cc489ec49daf17d7c835f4e1cfc1f Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:19:01 -0300 Subject: [PATCH 07/18] [GREEN]: should know that for the numbers 2, 3, 1 and 6 the minimum is 1, the maximum is 6, the number of elements is 4 and the average is 3 --- .../2_2_Stats_Calculator/src/index.spec.ts | 34 ++++++++++++++----- .../2_2_Stats_Calculator/src/index.ts | 15 +++++--- 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index a9384ebb2..f3fa171ce 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -1,23 +1,39 @@ -import {StatsCalculator} from "./index"; +import {Statistics, StatsCalculator} from "./index"; describe('stats calculator', () => { it('should know that for the numbers 1, 2 and 3, the minimum is 1', () => { - expect(StatsCalculator.run()).toHaveProperty('min') - expect(StatsCalculator.run().min).toBe(1) + const numbers: number[] = [1, 2, 3]; + expect(StatsCalculator.run(numbers)).toHaveProperty('min') + expect(StatsCalculator.run(numbers).min).toBe(1) }) it('should know that for the numbers 1, 2 and 3, the maximum is 3', () => { - expect(StatsCalculator.run()).toHaveProperty('max') - expect(StatsCalculator.run().max).toBe(3) + const numbers: number[] = [1, 2, 3]; + expect(StatsCalculator.run(numbers)).toHaveProperty('max') + expect(StatsCalculator.run(numbers).max).toBe(3) }) it('should know that for the numbers 1, 2 and 3, the number of elements is 3', () => { - expect(StatsCalculator.run()).toHaveProperty('numberOfElements') - expect(StatsCalculator.run().numberOfElements).toBe(3) + const numbers: number[] = [1, 2, 3]; + expect(StatsCalculator.run(numbers)).toHaveProperty('numberOfElements') + expect(StatsCalculator.run(numbers).numberOfElements).toBe(3) }) it('should know that for the numbers 1, 2 and 3, the average is 2', () => { - expect(StatsCalculator.run()).toHaveProperty('average') - expect(StatsCalculator.run().average).toBe(2) + const numbers: number[] = [1, 2, 3]; + expect(StatsCalculator.run(numbers)).toHaveProperty('average') + expect(StatsCalculator.run(numbers).average).toBe(2) + }) + + it('should know that for the numbers 2, 3, 1 and 6 the minimum is 1, the maximum is 6, the number of elements is 4 and the average is 3', () => { + const numbers: number[] = [2, 3, 1, 6]; + + const expected: Statistics = { + min:1, + max: 6, + numberOfElements: 4, + average: 3 + } + expect(StatsCalculator.run(numbers)).toEqual(expected); }) }) \ No newline at end of file diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index 3ddd71da8..84bd32c73 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -6,12 +6,17 @@ export type Statistics = { } export class StatsCalculator { - static run(): Statistics { + static run(numbers: number[]): Statistics { + const min = numbers.reduce((min, current) => current < min ? current : min); + const max = numbers.reduce((max, current) => current > max ? current : max); + const numberOfElements = numbers.length; + const sum = numbers.reduce((total, current) => total + current, 0); + const average = sum / numberOfElements; return { - min: 1, - max: 3, - numberOfElements: 3, - average: 2 + min, + max, + numberOfElements, + average } } } \ No newline at end of file From f92be73fbcd74b70f13f6dcf543a368f38727ad2 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:21:07 -0300 Subject: [PATCH 08/18] [REFACTOR]: extract method --- .../2_2_Stats_Calculator/src/index.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index 84bd32c73..f1ec5150d 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -7,11 +7,12 @@ export type Statistics = { export class StatsCalculator { static run(numbers: number[]): Statistics { - const min = numbers.reduce((min, current) => current < min ? current : min); - const max = numbers.reduce((max, current) => current > max ? current : max); + const min = this.getMin(numbers); + const max = this.getMax(numbers); const numberOfElements = numbers.length; - const sum = numbers.reduce((total, current) => total + current, 0); + const sum = this.getSum(numbers); const average = sum / numberOfElements; + return { min, max, @@ -19,4 +20,16 @@ export class StatsCalculator { average } } + + private static getMin(numbers: number[]) { + return numbers.reduce((min, current) => current < min ? current : min); + } + + private static getMax(numbers: number[]) { + return numbers.reduce((max, current) => current > max ? current : max); + } + + private static getSum(numbers: number[]) { + return numbers.reduce((total, current) => total + current, 0); + } } \ No newline at end of file From b95ec6cdc954534dd6ab878778d6499e4439684c Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:24:06 -0300 Subject: [PATCH 09/18] [GREEN]: should know that for the numbers 2, 4, 21, -8, 53 and 40 the minimum is -8, the maximum is 53, the number of elements is 6 and the average is 18.666666666667 --- .../2_2_Stats_Calculator/src/index.spec.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index f3fa171ce..9c2584e52 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -29,11 +29,23 @@ describe('stats calculator', () => { const numbers: number[] = [2, 3, 1, 6]; const expected: Statistics = { - min:1, + min: 1, max: 6, numberOfElements: 4, average: 3 } expect(StatsCalculator.run(numbers)).toEqual(expected); }) + + it('should know that for the numbers 2, 4, 21, -8, 53 and 40 the minimum is -8, the maximum is 53, the number of elements is 6 and the average is 18.666666666667', () => { + const numbers: number[] = [2, 4, 21, -8, 53, 40]; + + const expected: Statistics = { + min: -8, + max: 53, + numberOfElements: 6, + average: 18.666666666666668 + } + expect(StatsCalculator.run(numbers)).toEqual(expected); + }) }) \ No newline at end of file From fab0e5647374ef3f3d5815f6725da8d7881ad327 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:32:51 -0300 Subject: [PATCH 10/18] [REFACTOR]: improve naming and extract method --- .../2_2_Stats_Calculator/src/index.spec.ts | 2 +- .../2_2_Stats_Calculator/src/index.ts | 23 ++++++++++++------- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index 9c2584e52..0e1e4e007 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -37,7 +37,7 @@ describe('stats calculator', () => { expect(StatsCalculator.run(numbers)).toEqual(expected); }) - it('should know that for the numbers 2, 4, 21, -8, 53 and 40 the minimum is -8, the maximum is 53, the number of elements is 6 and the average is 18.666666666667', () => { + it('should know that for the numbers 2, 4, 21, -8, 53 and 40 the minimum is -8, the maximum is 53, the number of elements is 6 and the average is 18.666666666666668', () => { const numbers: number[] = [2, 4, 21, -8, 53, 40]; const expected: Statistics = { diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index f1ec5150d..055aab9e9 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -7,11 +7,10 @@ export type Statistics = { export class StatsCalculator { static run(numbers: number[]): Statistics { - const min = this.getMin(numbers); - const max = this.getMax(numbers); - const numberOfElements = numbers.length; - const sum = this.getSum(numbers); - const average = sum / numberOfElements; + const min = this.minOf(numbers); + const max = this.maxOf(numbers); + const numberOfElements = this.numberOfElementsOf(numbers); + const average = this.averageOf(numbers); return { min, @@ -21,15 +20,23 @@ export class StatsCalculator { } } - private static getMin(numbers: number[]) { + private static minOf(numbers: number[]) { return numbers.reduce((min, current) => current < min ? current : min); } - private static getMax(numbers: number[]) { + private static maxOf(numbers: number[]) { return numbers.reduce((max, current) => current > max ? current : max); } - private static getSum(numbers: number[]) { + private static numberOfElementsOf(numbers: number[]) { + return numbers.length; + } + + private static averageOf(numbers: number[]) { + return this.sumOf(numbers) / numbers.length; + } + + private static sumOf(numbers: number[]) { return numbers.reduce((total, current) => total + current, 0); } } \ No newline at end of file From a60522c72fbc122d22c8e033780361d7fb694f90 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:34:37 -0300 Subject: [PATCH 11/18] [GREEN]: should know that for the numbers 0, 0 and 0 the minimum is 0, the maximum is 0, the number of elements is 3 and the average is 0 --- .../2_2_Stats_Calculator/src/index.spec.ts | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index 0e1e4e007..24678411e 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -48,4 +48,16 @@ describe('stats calculator', () => { } expect(StatsCalculator.run(numbers)).toEqual(expected); }) + + it('should know that for the numbers 0, 0 and 0 the minimum is 0, the maximum is 0, the number of elements is 3 and the average is 0', () => { + const numbers: number[] = [0, 0, 0]; + + const expected: Statistics = { + min: 0, + max: 0, + numberOfElements: 3, + average: 0 + } + expect(StatsCalculator.run(numbers)).toEqual(expected); + }) }) \ No newline at end of file From a79d6e770310d654765cbc4b365d3649d1735371 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:39:28 -0300 Subject: [PATCH 12/18] [GREEN]: should throw an error if the list contains a non number --- .../2_2_Stats_Calculator/src/index.spec.ts | 6 ++++++ .../2_2_Stats_Calculator/src/index.ts | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index 24678411e..9aed3b28b 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -60,4 +60,10 @@ describe('stats calculator', () => { } expect(StatsCalculator.run(numbers)).toEqual(expected); }) + + it('should throw an error if the list contains a non number', () => { + const numbers: number[] = [0, 0, Number("d")]; + + expect(() => StatsCalculator.run(numbers)).toThrow(); + }) }) \ No newline at end of file diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index 055aab9e9..7cfb1802d 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -7,6 +7,10 @@ export type Statistics = { export class StatsCalculator { static run(numbers: number[]): Statistics { + if(numbers.includes(Number("NaN"))) { + throw new Error() + } + const min = this.minOf(numbers); const max = this.maxOf(numbers); const numberOfElements = this.numberOfElementsOf(numbers); From e8aac312920ea0b27731f6eae693ff75d51fd1c0 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:42:23 -0300 Subject: [PATCH 13/18] [GREEN]: should throw an error message "Input contains invalid numbers (e.g., NaN or non-numeric values)." if the list contains a non number --- .../2_2_Stats_Calculator/src/index.spec.ts | 4 ++-- .../2_2_Stats_Calculator/src/index.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index 9aed3b28b..a30a4378a 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -61,9 +61,9 @@ describe('stats calculator', () => { expect(StatsCalculator.run(numbers)).toEqual(expected); }) - it('should throw an error if the list contains a non number', () => { + it('should throw an error message \"Input contains invalid numbers (e.g., NaN or non-numeric values).\" if the list contains a non number', () => { const numbers: number[] = [0, 0, Number("d")]; - expect(() => StatsCalculator.run(numbers)).toThrow(); + expect(() => StatsCalculator.run(numbers)).toThrowError("Input contains invalid numbers (e.g., NaN or non-numeric values)."); }) }) \ No newline at end of file diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index 7cfb1802d..dee6ff478 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -7,8 +7,8 @@ export type Statistics = { export class StatsCalculator { static run(numbers: number[]): Statistics { - if(numbers.includes(Number("NaN"))) { - throw new Error() + if(numbers.some(num => typeof num !== "number" || isNaN(num))) { + throw new Error("Input contains invalid numbers (e.g., NaN or non-numeric values).") } const min = this.minOf(numbers); From 5181b6e4f1c526b06281ba5a0fb34f6f8cad01a4 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:44:52 -0300 Subject: [PATCH 14/18] [GREEN]: should throw an error message "Input must be a non-empty array of numbers." if the list is empty --- .../2_2_Stats_Calculator/src/index.spec.ts | 6 ++++++ .../2_2_Stats_Calculator/src/index.ts | 4 ++++ 2 files changed, 10 insertions(+) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index a30a4378a..26d94e9bd 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -66,4 +66,10 @@ describe('stats calculator', () => { expect(() => StatsCalculator.run(numbers)).toThrowError("Input contains invalid numbers (e.g., NaN or non-numeric values)."); }) + + it('should throw an error message \"Input must be a non-empty array of numbers.\" if the list is empty', () => { + const numbers: number[] = []; + + expect(() => StatsCalculator.run(numbers)).toThrowError("Input must be a non-empty array of numbers."); + }) }) \ No newline at end of file diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index dee6ff478..36192d165 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -11,6 +11,10 @@ export class StatsCalculator { throw new Error("Input contains invalid numbers (e.g., NaN or non-numeric values).") } + if(numbers.length === 0 || !Array.isArray(numbers)) { + throw new Error("Input must be a non-empty array of numbers.") + } + const min = this.minOf(numbers); const max = this.maxOf(numbers); const numberOfElements = this.numberOfElementsOf(numbers); From 8a41ef02847acbbdd9278250cedf0a409e3cad26 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:47:33 -0300 Subject: [PATCH 15/18] [GREEN]: should throw an error message "Input must be a non-empty array of numbers." if the input is an object --- .../2_2_Stats_Calculator/src/index.spec.ts | 13 ++++++++++++- .../2_2_Stats_Calculator/src/index.ts | 8 ++++---- 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index 26d94e9bd..3876d7441 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -62,8 +62,9 @@ describe('stats calculator', () => { }) it('should throw an error message \"Input contains invalid numbers (e.g., NaN or non-numeric values).\" if the list contains a non number', () => { - const numbers: number[] = [0, 0, Number("d")]; + const numbers = [0, 0, "d"]; + // @ts-ignore expect(() => StatsCalculator.run(numbers)).toThrowError("Input contains invalid numbers (e.g., NaN or non-numeric values)."); }) @@ -72,4 +73,14 @@ describe('stats calculator', () => { expect(() => StatsCalculator.run(numbers)).toThrowError("Input must be a non-empty array of numbers."); }) + + it('should throw an error message \"Input must be a non-empty array of numbers.\" if the input is an object', () => { + const numbers= { + a: 1, + b: 2 + }; + + // @ts-ignore + expect(() => StatsCalculator.run(numbers)).toThrowError("Input must be a non-empty array of numbers."); + }) }) \ No newline at end of file diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index 36192d165..3254d9adc 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -7,14 +7,14 @@ export type Statistics = { export class StatsCalculator { static run(numbers: number[]): Statistics { - if(numbers.some(num => typeof num !== "number" || isNaN(num))) { - throw new Error("Input contains invalid numbers (e.g., NaN or non-numeric values).") - } - if(numbers.length === 0 || !Array.isArray(numbers)) { throw new Error("Input must be a non-empty array of numbers.") } + if(numbers.some(num => typeof num !== "number" || isNaN(num))) { + throw new Error("Input contains invalid numbers (e.g., NaN or non-numeric values).") + } + const min = this.minOf(numbers); const max = this.maxOf(numbers); const numberOfElements = this.numberOfElementsOf(numbers); From e2c19e7cf734cfc3d653e6a2ee0aa9e4bf202995 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:51:36 -0300 Subject: [PATCH 16/18] [REFACTOR]: extract method --- .../2_2_Stats_Calculator/src/index.ts | 29 +++++++++++++++---- 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts index 3254d9adc..c4d0a7b12 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.ts @@ -7,13 +7,8 @@ export type Statistics = { export class StatsCalculator { static run(numbers: number[]): Statistics { - if(numbers.length === 0 || !Array.isArray(numbers)) { - throw new Error("Input must be a non-empty array of numbers.") - } - if(numbers.some(num => typeof num !== "number" || isNaN(num))) { - throw new Error("Input contains invalid numbers (e.g., NaN or non-numeric values).") - } + this.validate(numbers); const min = this.minOf(numbers); const max = this.maxOf(numbers); @@ -28,6 +23,28 @@ export class StatsCalculator { } } + private static validate(numbers: number[]) { + if (this.isEmpty(numbers) || this.isNotArray(numbers)) { + throw new Error("Input must be a non-empty array of numbers.") + } + + if (this.someIsNotANumber(numbers)) { + throw new Error("Input contains invalid numbers (e.g., NaN or non-numeric values).") + } + } + + private static isEmpty(numbers: number[]) { + return numbers.length === 0; + } + + private static isNotArray(numbers: number[]) { + return !Array.isArray(numbers); + } + + private static someIsNotANumber(numbers: number[]) { + return numbers.some(num => typeof num !== "number" || isNaN(num)); + } + private static minOf(numbers: number[]) { return numbers.reduce((min, current) => current < min ? current : min); } From a862dd60710fb72e2715b644af9c5a93985527a9 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 14:59:54 -0300 Subject: [PATCH 17/18] [REFACTOR]: join first tests into one --- .../2_2_Stats_Calculator/src/index.spec.ts | 28 ++++++------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index 3876d7441..3a352685a 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -1,28 +1,16 @@ import {Statistics, StatsCalculator} from "./index"; describe('stats calculator', () => { - it('should know that for the numbers 1, 2 and 3, the minimum is 1', () => { + it("should know that for the numbers 1, 2 and 3, the minimum is 1, the maximum is 3, the number of elements is 3 and the average is 2", () => { const numbers: number[] = [1, 2, 3]; - expect(StatsCalculator.run(numbers)).toHaveProperty('min') - expect(StatsCalculator.run(numbers).min).toBe(1) - }) - - it('should know that for the numbers 1, 2 and 3, the maximum is 3', () => { - const numbers: number[] = [1, 2, 3]; - expect(StatsCalculator.run(numbers)).toHaveProperty('max') - expect(StatsCalculator.run(numbers).max).toBe(3) - }) - - it('should know that for the numbers 1, 2 and 3, the number of elements is 3', () => { - const numbers: number[] = [1, 2, 3]; - expect(StatsCalculator.run(numbers)).toHaveProperty('numberOfElements') - expect(StatsCalculator.run(numbers).numberOfElements).toBe(3) - }) - it('should know that for the numbers 1, 2 and 3, the average is 2', () => { - const numbers: number[] = [1, 2, 3]; - expect(StatsCalculator.run(numbers)).toHaveProperty('average') - expect(StatsCalculator.run(numbers).average).toBe(2) + const expected: Statistics = { + min: 1, + max: 3, + numberOfElements: 3, + average: 2 + } + expect(StatsCalculator.run(numbers)).toEqual(expected); }) it('should know that for the numbers 2, 3, 1 and 6 the minimum is 1, the maximum is 6, the number of elements is 4 and the average is 3', () => { From 25878cbe7fa8bf6224fdf8ce91a7cb009d538dd3 Mon Sep 17 00:00:00 2001 From: Jose Garrera Date: Wed, 15 Jan 2025 15:08:14 -0300 Subject: [PATCH 18/18] [REFACTOR]: it.each for happy cases --- .../2_2_Stats_Calculator/src/index.spec.ts | 44 ++++++------------- 1 file changed, 14 insertions(+), 30 deletions(-) diff --git a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts index 3a352685a..16cc2caf9 100644 --- a/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts +++ b/ThePhasesOfCraftship/2_best_practice_first/testingBasics/exercises/2_Arrange_Act_Assert_Backwards/2_2_Stats_Calculator/src/index.spec.ts @@ -1,52 +1,36 @@ import {Statistics, StatsCalculator} from "./index"; -describe('stats calculator', () => { - it("should know that for the numbers 1, 2 and 3, the minimum is 1, the maximum is 3, the number of elements is 3 and the average is 2", () => { - const numbers: number[] = [1, 2, 3]; +type HappyCase = [number[], Statistics]; - const expected: Statistics = { +describe('stats calculator', () => { + const happyCases: HappyCase[] = [ + [[1, 2, 3], { min: 1, max: 3, numberOfElements: 3, average: 2 - } - expect(StatsCalculator.run(numbers)).toEqual(expected); - }) - - it('should know that for the numbers 2, 3, 1 and 6 the minimum is 1, the maximum is 6, the number of elements is 4 and the average is 3', () => { - const numbers: number[] = [2, 3, 1, 6]; - - const expected: Statistics = { + }], + [[2, 3, 1, 6], { min: 1, max: 6, numberOfElements: 4, average: 3 - } - expect(StatsCalculator.run(numbers)).toEqual(expected); - }) - - it('should know that for the numbers 2, 4, 21, -8, 53 and 40 the minimum is -8, the maximum is 53, the number of elements is 6 and the average is 18.666666666666668', () => { - const numbers: number[] = [2, 4, 21, -8, 53, 40]; - - const expected: Statistics = { + }], + [[2, 4, 21, -8, 53, 40], { min: -8, max: 53, numberOfElements: 6, average: 18.666666666666668 - } - expect(StatsCalculator.run(numbers)).toEqual(expected); - }) - - it('should know that for the numbers 0, 0 and 0 the minimum is 0, the maximum is 0, the number of elements is 3 and the average is 0', () => { - const numbers: number[] = [0, 0, 0]; - - const expected: Statistics = { + }], + [[0, 0, 0], { min: 0, max: 0, numberOfElements: 3, average: 0 - } - expect(StatsCalculator.run(numbers)).toEqual(expected); + }] + ]; + it.each(happyCases)("should know that for the numbers %s the result should be %s", (numbers, expected) => { + expect(StatsCalculator.run(numbers)).toEqual(expected) }) it('should throw an error message \"Input contains invalid numbers (e.g., NaN or non-numeric values).\" if the list contains a non number', () => {