From 77c2c4bf267100fbd77dbb7f1e390ede67a253f1 Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 17:10:02 +0100 Subject: [PATCH 01/11] handles empty string --- lib/string-calculator.js | 5 ++--- test/string-calculator-test.js | 24 +++++------------------- 2 files changed, 7 insertions(+), 22 deletions(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index 4e5388d..485150b 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -1,4 +1,3 @@ -exports.add = function (string) { - let numbers = string.split(/,|\n/).map(Number) - return numbers.reduce((a, b) => a + b) +module.exports.add = function (string) { + return 0 } diff --git a/test/string-calculator-test.js b/test/string-calculator-test.js index 281af1f..4281bb2 100644 --- a/test/string-calculator-test.js +++ b/test/string-calculator-test.js @@ -1,22 +1,8 @@ -const assert = require('assert') -const calculator = require('../lib/string-calculator') +const {equal} = require('assert') -describe('string-calculator', function () { - describe('add', function () { - it('is 0 for an empty string', function () { - assert.equal(calculator.add(''), 0) - }) - - it('is a number for a string with only a number', function () { - assert.equal(calculator.add('1'), 1) - }) - - it('is the sum of the numbers for a string of any amount of comma-separated numbers', function () { - assert.equal(calculator.add('1,2,3'), 6) - }) - - it('handles also \\n as number delimiter', function () { - assert.equal(calculator.add('1\n2'), 3) - }) +describe('StringCalculator', function () { + const StringCalculator = require('../lib/string-calculator') + it('returns 0 on empty string', function () { + equal(StringCalculator.add(''), 0) }) }) From e21a69f9a370ffa4b6c0e8a793ee17eaa1ac759b Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 17:16:52 +0100 Subject: [PATCH 02/11] handles single value --- lib/string-calculator.js | 3 +++ test/string-calculator-test.js | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index 485150b..9539306 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -1,3 +1,6 @@ module.exports.add = function (string) { + if (string.length > 0) { + return parseInt(string) + } return 0 } diff --git a/test/string-calculator-test.js b/test/string-calculator-test.js index 4281bb2..e76a573 100644 --- a/test/string-calculator-test.js +++ b/test/string-calculator-test.js @@ -5,4 +5,8 @@ describe('StringCalculator', function () { it('returns 0 on empty string', function () { equal(StringCalculator.add(''), 0) }) + + it('returns number for a single number string', function () { + equal(StringCalculator.add('1'), 1) + }) }) From 85a8cda8fd72b5099c42482f36a36949c22c3319 Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 17:23:05 +0100 Subject: [PATCH 03/11] handles two values --- lib/string-calculator.js | 7 ++++++- test/string-calculator-test.js | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index 9539306..6f02c19 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -1,6 +1,11 @@ module.exports.add = function (string) { if (string.length > 0) { - return parseInt(string) + if(string.indexOf(',') !== -1) { + let numbers = string.split(',') + return parseInt(numbers[0]) + parseInt(numbers[1]) + } else { + return parseInt(string) + } } return 0 } diff --git a/test/string-calculator-test.js b/test/string-calculator-test.js index e76a573..cb626fb 100644 --- a/test/string-calculator-test.js +++ b/test/string-calculator-test.js @@ -9,4 +9,8 @@ describe('StringCalculator', function () { it('returns number for a single number string', function () { equal(StringCalculator.add('1'), 1) }) + + it('returns sum for a comma separated string with 2 values', function () { + equal(StringCalculator.add('1,2'), 3) + }) }) From e7a50f060d5cd43e32170e641fc629ff98accbc5 Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 17:25:31 +0100 Subject: [PATCH 04/11] refactoring --- lib/string-calculator.js | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index 6f02c19..ab119bc 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -1,11 +1,11 @@ module.exports.add = function (string) { - if (string.length > 0) { - if(string.indexOf(',') !== -1) { - let numbers = string.split(',') - return parseInt(numbers[0]) + parseInt(numbers[1]) - } else { - return parseInt(string) - } + if (string.length === 0) { + return 0 + } + if (string.indexOf(',') !== -1) { + let numbers = string.split(',') + return parseInt(numbers[0]) + parseInt(numbers[1]) + } else { + return parseInt(string) } - return 0 } From 59e2a20c821e616bb6b6b75e13882c25e252ee95 Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 17:32:40 +0100 Subject: [PATCH 05/11] sum an unknown number of comma separated values --- lib/string-calculator.js | 7 +++++-- test/string-calculator-test.js | 6 +++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index ab119bc..1879b1b 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -3,8 +3,11 @@ module.exports.add = function (string) { return 0 } if (string.indexOf(',') !== -1) { - let numbers = string.split(',') - return parseInt(numbers[0]) + parseInt(numbers[1]) + let sum = 0 + for (let i = 0, numbers = string.split(','); i < numbers.length; i++) { + sum += parseInt(numbers[i]) + } + return sum } else { return parseInt(string) } diff --git a/test/string-calculator-test.js b/test/string-calculator-test.js index cb626fb..896a5c1 100644 --- a/test/string-calculator-test.js +++ b/test/string-calculator-test.js @@ -10,7 +10,11 @@ describe('StringCalculator', function () { equal(StringCalculator.add('1'), 1) }) - it('returns sum for a comma separated string with 2 values', function () { + it('returns sum for a comma separated string with two values', function () { equal(StringCalculator.add('1,2'), 3) }) + + it('returns sum for an unknown number of comma separated values', function () { + equal(StringCalculator.add('1,2,3,4'), 10) + }) }) From 15a776fe30c2ec14ab30e3cf94c4ec9965a8ce8b Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 17:38:44 +0100 Subject: [PATCH 06/11] handles new line delimiter --- lib/string-calculator.js | 10 ++++++++-- test/string-calculator-test.js | 4 ++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index 1879b1b..b3f4b08 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -2,9 +2,15 @@ module.exports.add = function (string) { if (string.length === 0) { return 0 } - if (string.indexOf(',') !== -1) { + var delimiter = '' + if(string.indexOf('\n') !== -1) { + delimiter = '\n' + } else { + delimiter = ',' + } + if (delimiter !== '') { let sum = 0 - for (let i = 0, numbers = string.split(','); i < numbers.length; i++) { + for (let i = 0, numbers = string.split(delimiter); i < numbers.length; i++) { sum += parseInt(numbers[i]) } return sum diff --git a/test/string-calculator-test.js b/test/string-calculator-test.js index 896a5c1..1b01a6e 100644 --- a/test/string-calculator-test.js +++ b/test/string-calculator-test.js @@ -17,4 +17,8 @@ describe('StringCalculator', function () { it('returns sum for an unknown number of comma separated values', function () { equal(StringCalculator.add('1,2,3,4'), 10) }) + + it('returns sum for an unknown number of an end-of-line separated values', function () { + equal(StringCalculator.add('1\n2'), 3) + }) }) From a9076baf4280413e81a0e3a923cb0bf9ba28bcfc Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 17:49:44 +0100 Subject: [PATCH 07/11] refactoring handles new lines --- lib/string-calculator.js | 19 +++++-------------- 1 file changed, 5 insertions(+), 14 deletions(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index b3f4b08..e422fcd 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -2,19 +2,10 @@ module.exports.add = function (string) { if (string.length === 0) { return 0 } - var delimiter = '' - if(string.indexOf('\n') !== -1) { - delimiter = '\n' - } else { - delimiter = ',' - } - if (delimiter !== '') { - let sum = 0 - for (let i = 0, numbers = string.split(delimiter); i < numbers.length; i++) { - sum += parseInt(numbers[i]) - } - return sum - } else { - return parseInt(string) + let sum = 0 + let numbers = string.split(/,|\n/g) + for (let i = 0; i < numbers.length; i++) { + sum += parseInt(numbers[i]) } + return sum } From b44ad12ac598d97198a54c8a1c5efd9a520eaddc Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 18:07:52 +0100 Subject: [PATCH 08/11] added customDelimiterParser --- lib/string-calculator.js | 9 +++++++ test/string-calculator-test.js | 47 ++++++++++++++++++++++++---------- 2 files changed, 43 insertions(+), 13 deletions(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index e422fcd..b7d6391 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -2,6 +2,7 @@ module.exports.add = function (string) { if (string.length === 0) { return 0 } + let customDelimiter = module.exports.parseCustomDelimiter(string) let sum = 0 let numbers = string.split(/,|\n/g) for (let i = 0; i < numbers.length; i++) { @@ -9,3 +10,11 @@ module.exports.add = function (string) { } return sum } + + module.exports.parseCustomDelimiter = function (string) { + if(string.length > 2 && string[0] === '/' && string[1] === '/') { + return string[2] + } else { + return '' + } + } diff --git a/test/string-calculator-test.js b/test/string-calculator-test.js index 1b01a6e..149c7b2 100644 --- a/test/string-calculator-test.js +++ b/test/string-calculator-test.js @@ -2,23 +2,44 @@ const {equal} = require('assert') describe('StringCalculator', function () { const StringCalculator = require('../lib/string-calculator') - it('returns 0 on empty string', function () { - equal(StringCalculator.add(''), 0) - }) - it('returns number for a single number string', function () { - equal(StringCalculator.add('1'), 1) - }) + describe('#add', function () { + const {add} = StringCalculator - it('returns sum for a comma separated string with two values', function () { - equal(StringCalculator.add('1,2'), 3) - }) + it('returns 0 on empty string', function () { + equal(add(''), 0) + }) + + it('returns number for a single number string', function () { + equal(add('1'), 1) + }) + + it('returns sum for a comma separated string with two values', function () { + equal(add('1,2'), 3) + }) - it('returns sum for an unknown number of comma separated values', function () { - equal(StringCalculator.add('1,2,3,4'), 10) + it('returns sum for an unknown number of comma separated values', function () { + equal(add('1,2,3,4'), 10) + }) + + it('returns sum for an unknown number of an end-of-line separated values', function () { + equal(add('1\n2'), 3) + }) + + it.skip('returns sum for custom delimited values', function () { + equal(add('//x\n1x2'), 3) + }) }) - it('returns sum for an unknown number of an end-of-line separated values', function () { - equal(StringCalculator.add('1\n2'), 3) + describe('#parseCustomDelimiter', function () { + const {parseCustomDelimiter: parse} = StringCalculator + + it('returns empty string if no custom delimiter is specified', function () { + equal(parse('1,2'), '') + }) + + it('returns a custom delimiter', function () { + equal(parse('//x\n1x2'), 'x') + }) }) }) From ae87c7e20da569ce05a5b5eb08e1039da8dd97a9 Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 18:11:56 +0100 Subject: [PATCH 09/11] added custom delimiter registration --- lib/string-calculator.js | 18 +++++++++++------- test/string-calculator-test.js | 2 +- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index b7d6391..7895b35 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -5,16 +5,20 @@ module.exports.add = function (string) { let customDelimiter = module.exports.parseCustomDelimiter(string) let sum = 0 let numbers = string.split(/,|\n/g) + if (customDelimiter !== '') { + string = string.substr(3, string.length) + numbers = string.split(customDelimiter) + } for (let i = 0; i < numbers.length; i++) { sum += parseInt(numbers[i]) } return sum } - module.exports.parseCustomDelimiter = function (string) { - if(string.length > 2 && string[0] === '/' && string[1] === '/') { - return string[2] - } else { - return '' - } - } +module.exports.parseCustomDelimiter = function (string) { + if (string.length > 2 && string[0] === '/' && string[1] === '/') { + return string[2] + } else { + return '' + } +} diff --git a/test/string-calculator-test.js b/test/string-calculator-test.js index 149c7b2..7bc862d 100644 --- a/test/string-calculator-test.js +++ b/test/string-calculator-test.js @@ -26,7 +26,7 @@ describe('StringCalculator', function () { equal(add('1\n2'), 3) }) - it.skip('returns sum for custom delimited values', function () { + it('returns sum for custom delimited values', function () { equal(add('//x\n1x2'), 3) }) }) From 486c8c71f2ac75a2c5ccc08299d6877a0cb60e72 Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 18:14:13 +0100 Subject: [PATCH 10/11] fix --- lib/string-calculator.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index 7895b35..ce2ac96 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -1,4 +1,6 @@ -module.exports.add = function (string) { +module.exports = { add, parseCustomDelimiter } + +function add (string) { if (string.length === 0) { return 0 } @@ -15,7 +17,7 @@ module.exports.add = function (string) { return sum } -module.exports.parseCustomDelimiter = function (string) { +function parseCustomDelimiter (string) { if (string.length > 2 && string[0] === '/' && string[1] === '/') { return string[2] } else { From d8b6d1baac8d66dbb8b06fa0b592625c522317f7 Mon Sep 17 00:00:00 2001 From: Ivo von Putzer Reibegg Date: Mon, 12 Dec 2016 18:18:47 +0100 Subject: [PATCH 11/11] refactoring on custom delimited --- lib/string-calculator.js | 10 +++++----- test/string-calculator-test.js | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/lib/string-calculator.js b/lib/string-calculator.js index ce2ac96..0a3232b 100644 --- a/lib/string-calculator.js +++ b/lib/string-calculator.js @@ -4,12 +4,14 @@ function add (string) { if (string.length === 0) { return 0 } - let customDelimiter = module.exports.parseCustomDelimiter(string) + let customDelimiter = parseCustomDelimiter(string) let sum = 0 - let numbers = string.split(/,|\n/g) - if (customDelimiter !== '') { + let numbers + if (customDelimiter) { string = string.substr(3, string.length) numbers = string.split(customDelimiter) + } else { + numbers = string.split(/,|\n/g) } for (let i = 0; i < numbers.length; i++) { sum += parseInt(numbers[i]) @@ -20,7 +22,5 @@ function add (string) { function parseCustomDelimiter (string) { if (string.length > 2 && string[0] === '/' && string[1] === '/') { return string[2] - } else { - return '' } } diff --git a/test/string-calculator-test.js b/test/string-calculator-test.js index 7bc862d..a92e3d6 100644 --- a/test/string-calculator-test.js +++ b/test/string-calculator-test.js @@ -34,8 +34,8 @@ describe('StringCalculator', function () { describe('#parseCustomDelimiter', function () { const {parseCustomDelimiter: parse} = StringCalculator - it('returns empty string if no custom delimiter is specified', function () { - equal(parse('1,2'), '') + it('returns undefined if no custom delimiter is specified', function () { + equal(parse('1,2'), undefined) }) it('returns a custom delimiter', function () {