From 8446d29e2708f666ea5d2bdae2cc7036dee2d776 Mon Sep 17 00:00:00 2001 From: Kamila Lambert Date: Mon, 8 May 2017 16:06:12 -0700 Subject: [PATCH] all collatzConjecture tests passing --- src/collatzConjecture.js | 23 ++++++++++++++++++++ test/collatzConjecture_test.js | 38 ++++++++++++++++++++++++++++++++++ 2 files changed, 61 insertions(+) create mode 100644 src/collatzConjecture.js create mode 100644 test/collatzConjecture_test.js diff --git a/src/collatzConjecture.js b/src/collatzConjecture.js new file mode 100644 index 0000000..5cabc36 --- /dev/null +++ b/src/collatzConjecture.js @@ -0,0 +1,23 @@ +export default function collatzConjecture(input) { + + let finalArray = [], + currentNumber = input + + if (!Number.isInteger(input)) { + return undefined + } else if (input === 1) { + return [1]; + } else { + while (currentNumber !== 1) { + if (currentNumber % 2 === 0) { + finalArray.push(currentNumber) + currentNumber = currentNumber / 2 + } else { + finalArray.push(currentNumber) + currentNumber = (currentNumber * 3) + 1 + } + } + finalArray.push(currentNumber) + return finalArray + } +} diff --git a/test/collatzConjecture_test.js b/test/collatzConjecture_test.js new file mode 100644 index 0000000..41a81ff --- /dev/null +++ b/test/collatzConjecture_test.js @@ -0,0 +1,38 @@ +import { expect } from 'chai'; +import collatzConjecture from '../src/collatzConjecture'; + +describe.only('collatzConjecture()', () => { + it('should be a function', () => { + expect(collatzConjecture).to.be.a('function'); + }); + + it('should give you an array of [1] when handed 1', () => { + expect(collatzConjecture(1)).to.deep.equal([1]); + }); + + it('should give you a lengthy array when handed 7', () => { + expect(collatzConjecture(7)).to.deep.equal( + [7, + 22, + 11, + 34, + 17, + 52, + 26, + 13, + 40, + 20, + 10, + 5, + 16, + 8, + 4, + 2, + 1]); + }); + + it('should not evaluate non-numerical values', () => { + expect(collatzConjecture('string')).to.equal(undefined); + expect(collatzConjecture(['string'])).to.equal(undefined); + }); +});