StringCalculator_2016_12_19
by levrun
HTML
<script src="https://cdn.jsdelivr.net/jasmine/2.5.2/jasmine.js"></script>
<script src="https://cdn.jsdelivr.net/jasmine/2.5.2/jasmine-html.js"></script>
<script src="https://cdn.jsdelivr.net/jasmine/2.5.2/boot.js"></script>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/jasmine/2.5.2/jasmine.css">
TypeScript
class StringCalculator {
private COMMA_SEPARATOR:string = ",";
private NEW_LINE:string = "\n";
private CUSTOM_SEPARATOR:string = "//";
add(input: string): number {
if(input === "") {
return 0;
}
var separator:string = this.COMMA_SEPARATOR;
if(input.substring(0,2) === this.CUSTOM_SEPARATOR) {
separator = input.substring(2,3);
input = input.substring(4, input.length);
}
var parsedInput = input.replace(this.NEW_LINE, separator);
var errors[] = [];
var array[] = parsedInput.split(separator);
var summ:int = 0;
for(let numberStr of array) {
var number:int = parseInt(numberStr);
if(number < 0) {
errors.push(numberStr);
}
summ += number;
}
if(errors.length > 0) {
var listOfNegatives:string = "";
for(var i in errors) {
listOfNegatives += errors[i] + " ";
}
throw new Error("negatives not allowed " + listOfNegatives);
}
return summ;
}
}
describe("String calculator suite", function() {
it("Test that empty string return zero", function(done) {
StringCalculator calculator = new StringCalculator();
input = "";
result = 0;
expect(calculator.add(input)).toBe(result);
setTimeout(done, 1000);
});
it("Test that one number string return the same number", function(done) {
StringCalculator calculator = new StringCalculator();
input = "1";
result = 1;
expect(calculator.add(input)).toBe(result);
setTimeout(done, 1000);
});
it("Test that two numbers return their summ", function(done) {
StringCalculator calculator = new StringCalculator();
input = "1,2";
result = 3;
expect(calculator.add(input)).toBe(result);
setTimeout(done, 1000);
});
it("Test that many numbers return their summ", function(done) {
StringCalculator calculator = new StringCalculator();
input = "1,2,3,4,5,6";
result = 21;
...