From 07a5175b644f3c5077527f80b01710a6e45c3598 Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Sat, 12 Sep 2026 22:43:16 -0500 Subject: [PATCH 01/13] Fix error handling for fibonacci() when count is NaN Previous logic allows fibonacci('hello') to return 1 instead of 'OOPS' --- .../object_basics/03_fibonacci/solution/fibonacci-solution.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js index 1327ce92c5e..5b58e832f02 100644 --- a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js +++ b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js @@ -8,8 +8,8 @@ const fibonacci = function(countArg) { count = countArg } - if (count < 0) return "OOPS"; if (count == 0) return 0; + if (!count || count < 0) return "OOPS"; let firstPrev = 1; let secondPrev = 0; From 378edcd50f32c42733b6202b52290ec2698ece1f Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Mon, 14 Sep 2026 17:21:18 -0500 Subject: [PATCH 02/13] Update README with input validation details Update README with additonal input validation for the Fibonacci function. --- foundations/object_basics/03_fibonacci/README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/foundations/object_basics/03_fibonacci/README.md b/foundations/object_basics/03_fibonacci/README.md index 77b62de3348..dbc7aa50e0b 100644 --- a/foundations/object_basics/03_fibonacci/README.md +++ b/foundations/object_basics/03_fibonacci/README.md @@ -2,11 +2,12 @@ Create a function that returns a specific member of the Fibonacci sequence (series of numbers in which each number is the sum of the two preceding numbers). To learn more about Fibonacci sequences, go to: https://en.wikipedia.org/wiki/Fibonacci_sequence -In this exercise, the Fibonacci sequence used is 1, 1, 2, 3, 5, 8, etc. (i.e. starting at 1, not 0). +In this exercise, the Fibonacci sequence used is 1, 1, 2, 3, 5, 8, etc. (i.e. starting at 1, not 0). The function should only accept number inputs and reject anything else. ```javascript fibonacci(4); // returns the 4th member of the series: 3 (1, 1, 2, 3) fibonacci(6); // returns 8 +fibonacci("6"); // returns "OOPS" ``` -If given a negative number, the function should return `"OOPS"`. \ No newline at end of file +If given a negative number, `NaN`, or not a number type at all, the function should return `"OOPS"`, i.e. only proceed with positive numbers.. From dcf6e5f7b4c5df6dbd3c9022036a4d222fc505a7 Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Mon, 14 Sep 2026 17:23:02 -0500 Subject: [PATCH 03/13] Update Fibonacci tests to reject invalid inputs Add additional tests to reject invalid inputs (ie. Boolean, NaN, non-number types, etc.) --- .../solution/fibonacci-solution.spec.js | 30 +++++++++++++------ 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.spec.js b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.spec.js index fdb0badfac6..1858deb5b34 100644 --- a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.spec.js +++ b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.spec.js @@ -22,16 +22,28 @@ describe('fibonacci', () => { test('doesn\'t accept negatives', () => { expect(fibonacci(-25)).toBe("OOPS"); }); - test('DOES accept strings', () => { - expect(fibonacci("0")).toBe(0); + test('doesn\'t accept strings', () => { + expect(fibonacci("0")).toBe("OOPS"); }); - test('DOES accept strings', () => { - expect(fibonacci("1")).toBe(1); + test('doesn\'t accept NaN', () => { + expect(fibonacci(NaN)).toBe("OOPS"); }); - test('DOES accept strings', () => { - expect(fibonacci("2")).toBe(1); + test('doesn\'t accept undefined', () => { + expect(fibonacci(undefined)).toBe("OOPS"); }); - test('DOES accept strings', () => { - expect(fibonacci("8")).toBe(21); + test('doesn\'t accept null', () => { + expect(fibonacci(null)).toBe("OOPS"); }); -}); \ No newline at end of file + test('doesn\'t accept Boolean', () => { + expect(fibonacci(true)).toBe("OOPS"); + }); + test('doesn\'t accept Boolean', () => { + expect(fibonacci(false)).toBe("OOPS"); + }); + test('doesn\'t accept Array', () => { + expect(fibonacci([1])).toBe("OOPS"); + }); + test('doesn\'t accept Object', () => { + expect(fibonacci({num: 1})).toBe("OOPS"); + }); +}); From 4f482f0c8483c37ca0f1c9240585700ef0dfd8de Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Mon, 14 Sep 2026 17:25:04 -0500 Subject: [PATCH 04/13] Update Fibonacci function solution for to reject non-positive number arguments Refactor input validation to handle non-numeric and negative values. Simplify the logic for returning the Fibonacci result. --- .../03_fibonacci/solution/fibonacci-solution.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js index 5b58e832f02..d9b68c19ee4 100644 --- a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js +++ b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js @@ -2,14 +2,11 @@ const fibonacci = function(countArg) { // checks argument's type and makes sure we use // a number throughout rest of function. let count - if (typeof countArg !== 'number') { - count = parseInt(countArg) - } else { - count = countArg - } - - if (count == 0) return 0; - if (!count || count < 0) return "OOPS"; + if (typeof countArg !== 'number' || countArg < 0 || Number.isNaN(countArg)) { + return "OOPS"; + } else count = countArg; + + if (count === 0) return 0; let firstPrev = 1; let secondPrev = 0; @@ -24,6 +21,8 @@ const fibonacci = function(countArg) { }; +console.log(fibonacci('hello')) + // Another way to do it is by using an iterative approach with an array containing two values, 0 and 1. // const fib = [0, 1]; // for (let i = 2; i <= count; i++) { @@ -32,3 +31,4 @@ const fibonacci = function(countArg) { // return fib[count]; module.exports = fibonacci; + From f70fca9dd2cf45dbe8ebf43dbc52f99b7939e27c Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Mon, 14 Sep 2026 17:29:59 -0500 Subject: [PATCH 05/13] Update fibonacci student tests based on revised solution scope Updated student tests to ensure fibonacci function rejects invalid inputs following solution revision. --- .../03_fibonacci/fibonacci.spec.js | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/foundations/object_basics/03_fibonacci/fibonacci.spec.js b/foundations/object_basics/03_fibonacci/fibonacci.spec.js index de632d833f2..f9276c7e616 100644 --- a/foundations/object_basics/03_fibonacci/fibonacci.spec.js +++ b/foundations/object_basics/03_fibonacci/fibonacci.spec.js @@ -1,4 +1,4 @@ -const fibonacci = require('./fibonacci') +const fibonacci = require('./fibonacci-solution') describe('fibonacci', () => { test('4th fibonacci number is 3', () => { @@ -22,16 +22,28 @@ describe('fibonacci', () => { test.skip('doesn\'t accept negatives', () => { expect(fibonacci(-25)).toBe("OOPS"); }); - test.skip('DOES accept strings', () => { - expect(fibonacci("0")).toBe(0); + test.skip('doesn\'t accept strings', () => { + expect(fibonacci("0")).toBe("OOPS"); }); - test.skip('DOES accept strings', () => { - expect(fibonacci("1")).toBe(1); + test.skip('doesn\'t accept NaN', () => { + expect(fibonacci(NaN)).toBe("OOPS"); }); - test.skip('DOES accept strings', () => { - expect(fibonacci("2")).toBe(1); + test.skip('doesn\'t accept undefined', () => { + expect(fibonacci(undefined)).toBe("OOPS"); }); - test.skip('DOES accept strings', () => { - expect(fibonacci("8")).toBe(21); + test.skip('doesn\'t accept null', () => { + expect(fibonacci(null)).toBe("OOPS"); }); -}); + test.skip('doesn\'t accept Boolean', () => { + expect(fibonacci(true)).toBe("OOPS"); + }); + test.skip('doesn\'t accept Boolean', () => { + expect(fibonacci(false)).toBe("OOPS"); + }); + test.skip('doesn\'t accept Array', () => { + expect(fibonacci([1])).toBe("OOPS"); + }); + test.skip('doesn\'t accept Object', () => { + expect(fibonacci({num: 1})).toBe("OOPS"); + }); +}) From dac34f5dd24f063575eb0cabca1ed7b211937fce Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Wed, 16 Sep 2026 00:17:00 -0500 Subject: [PATCH 06/13] Update foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js Co-authored-by: mao-sz <122839503+mao-sz@users.noreply.github.com> --- .../object_basics/03_fibonacci/solution/fibonacci-solution.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js index d9b68c19ee4..343410f436b 100644 --- a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js +++ b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js @@ -21,8 +21,6 @@ const fibonacci = function(countArg) { }; -console.log(fibonacci('hello')) - // Another way to do it is by using an iterative approach with an array containing two values, 0 and 1. // const fib = [0, 1]; // for (let i = 2; i <= count; i++) { From 1926bb9ba3ae864bd29b6be5dca20950d6b7775b Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Wed, 16 Sep 2026 00:17:15 -0500 Subject: [PATCH 07/13] Update foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js Co-authored-by: mao-sz <122839503+mao-sz@users.noreply.github.com> --- .../object_basics/03_fibonacci/solution/fibonacci-solution.js | 1 - 1 file changed, 1 deletion(-) diff --git a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js index 343410f436b..04eb87de37b 100644 --- a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js +++ b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js @@ -29,4 +29,3 @@ const fibonacci = function(countArg) { // return fib[count]; module.exports = fibonacci; - From 198be611cfe4e3b85a1319989a760a160212c5a4 Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Wed, 16 Sep 2026 00:17:26 -0500 Subject: [PATCH 08/13] Update foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js Co-authored-by: mao-sz <122839503+mao-sz@users.noreply.github.com> --- .../object_basics/03_fibonacci/solution/fibonacci-solution.js | 1 - 1 file changed, 1 deletion(-) diff --git a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js index 04eb87de37b..fbc81966e6b 100644 --- a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js +++ b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js @@ -18,7 +18,6 @@ const fibonacci = function(countArg) { } return firstPrev; - }; // Another way to do it is by using an iterative approach with an array containing two values, 0 and 1. From c3d19b002a4d618ec2103263e5a2ed000fb216a7 Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Wed, 16 Sep 2026 00:20:01 -0500 Subject: [PATCH 09/13] Update foundations/object_basics/03_fibonacci/README.md Co-authored-by: mao-sz <122839503+mao-sz@users.noreply.github.com> --- foundations/object_basics/03_fibonacci/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundations/object_basics/03_fibonacci/README.md b/foundations/object_basics/03_fibonacci/README.md index dbc7aa50e0b..09ed0e882df 100644 --- a/foundations/object_basics/03_fibonacci/README.md +++ b/foundations/object_basics/03_fibonacci/README.md @@ -2,7 +2,7 @@ Create a function that returns a specific member of the Fibonacci sequence (series of numbers in which each number is the sum of the two preceding numbers). To learn more about Fibonacci sequences, go to: https://en.wikipedia.org/wiki/Fibonacci_sequence -In this exercise, the Fibonacci sequence used is 1, 1, 2, 3, 5, 8, etc. (i.e. starting at 1, not 0). The function should only accept number inputs and reject anything else. +In this exercise, the Fibonacci sequence used is 1, 1, 2, 3, 5, 8, etc. (i.e. starting at 1, not 0): ```javascript fibonacci(4); // returns the 4th member of the series: 3 (1, 1, 2, 3) From 61576f87b8e1355f9a9bf1b76b9acc6dd3fd8197 Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Wed, 16 Sep 2026 00:20:20 -0500 Subject: [PATCH 10/13] Update foundations/object_basics/03_fibonacci/README.md Co-authored-by: mao-sz <122839503+mao-sz@users.noreply.github.com> --- foundations/object_basics/03_fibonacci/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/foundations/object_basics/03_fibonacci/README.md b/foundations/object_basics/03_fibonacci/README.md index 09ed0e882df..dbfef5cf12a 100644 --- a/foundations/object_basics/03_fibonacci/README.md +++ b/foundations/object_basics/03_fibonacci/README.md @@ -7,7 +7,6 @@ In this exercise, the Fibonacci sequence used is 1, 1, 2, 3, 5, 8, etc. (i.e. st ```javascript fibonacci(4); // returns the 4th member of the series: 3 (1, 1, 2, 3) fibonacci(6); // returns 8 -fibonacci("6"); // returns "OOPS" ``` If given a negative number, `NaN`, or not a number type at all, the function should return `"OOPS"`, i.e. only proceed with positive numbers.. From 00fa33063f2195e5e6c6db1ce9f9383a0295b402 Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Wed, 16 Sep 2026 00:20:46 -0500 Subject: [PATCH 11/13] Update foundations/object_basics/03_fibonacci/README.md Co-authored-by: mao-sz <122839503+mao-sz@users.noreply.github.com> --- foundations/object_basics/03_fibonacci/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundations/object_basics/03_fibonacci/README.md b/foundations/object_basics/03_fibonacci/README.md index dbfef5cf12a..35053046c39 100644 --- a/foundations/object_basics/03_fibonacci/README.md +++ b/foundations/object_basics/03_fibonacci/README.md @@ -9,4 +9,4 @@ fibonacci(4); // returns the 4th member of the series: 3 (1, 1, 2, 3) fibonacci(6); // returns 8 ``` -If given a negative number, `NaN`, or not a number type at all, the function should return `"OOPS"`, i.e. only proceed with positive numbers.. +If given a negative number, `NaN`, or not a number type at all, the function should return `"OOPS"`, i.e. only proceed with positive numbers. From 699184396548a0d7001f26c5625370c279d0a3a8 Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Wed, 16 Sep 2026 00:24:06 -0500 Subject: [PATCH 12/13] Change function parameter to count from countArg since no longer used --- .../03_fibonacci/solution/fibonacci-solution.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js index fbc81966e6b..481fc37b9f5 100644 --- a/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js +++ b/foundations/object_basics/03_fibonacci/solution/fibonacci-solution.js @@ -1,10 +1,9 @@ -const fibonacci = function(countArg) { +const fibonacci = function(count) { // checks argument's type and makes sure we use // a number throughout rest of function. - let count - if (typeof countArg !== 'number' || countArg < 0 || Number.isNaN(countArg)) { + if (typeof count !== 'number' || count < 0 || Number.isNaN(count)) { return "OOPS"; - } else count = countArg; + } if (count === 0) return 0; From 086e40aa463ace521e5a33d1be79bb0d175288c3 Mon Sep 17 00:00:00 2001 From: Weston Shelander <130246805+Vairiation@users.noreply.github.com> Date: Wed, 16 Sep 2026 00:31:53 -0500 Subject: [PATCH 13/13] Simplify test suite based on @mao-sz's suggestion --- .../03_fibonacci/fibonacci.spec.js | 24 ++++--------------- 1 file changed, 4 insertions(+), 20 deletions(-) diff --git a/foundations/object_basics/03_fibonacci/fibonacci.spec.js b/foundations/object_basics/03_fibonacci/fibonacci.spec.js index f9276c7e616..988337ac0d1 100644 --- a/foundations/object_basics/03_fibonacci/fibonacci.spec.js +++ b/foundations/object_basics/03_fibonacci/fibonacci.spec.js @@ -22,28 +22,12 @@ describe('fibonacci', () => { test.skip('doesn\'t accept negatives', () => { expect(fibonacci(-25)).toBe("OOPS"); }); - test.skip('doesn\'t accept strings', () => { - expect(fibonacci("0")).toBe("OOPS"); - }); test.skip('doesn\'t accept NaN', () => { expect(fibonacci(NaN)).toBe("OOPS"); }); - test.skip('doesn\'t accept undefined', () => { - expect(fibonacci(undefined)).toBe("OOPS"); - }); - test.skip('doesn\'t accept null', () => { - expect(fibonacci(null)).toBe("OOPS"); - }); - test.skip('doesn\'t accept Boolean', () => { - expect(fibonacci(true)).toBe("OOPS"); - }); - test.skip('doesn\'t accept Boolean', () => { - expect(fibonacci(false)).toBe("OOPS"); - }); - test.skip('doesn\'t accept Array', () => { - expect(fibonacci([1])).toBe("OOPS"); - }); - test.skip('doesn\'t accept Object', () => { - expect(fibonacci({num: 1})).toBe("OOPS"); + test.skip('doesn\'t accept non-numbers types', () => { + expect(fibonacci("0")).toBe("OOPS"); + expect(fibonacci([])).toBe("OOPS"); + expect(fibonacci({})).toBe("OOPS"); }); })