diff --git a/TDDKata/Calculator.cpp b/TDDKata/Calculator.cpp
index beeae06..75bc02c 100644
--- a/TDDKata/Calculator.cpp
+++ b/TDDKata/Calculator.cpp
@@ -3,10 +3,50 @@
int Calculator::Add(std::string expression)
{
+
return 0;
}
-int Calculator::Add(char* expression)
+int Calculator::Add(const char* expression)
{
- throw 0;
+ const char* delim = ",\n";
+ char* dup = strdup(expression);
+ int sum = 0;
+ size_t len = strlen(expression);
+ if (!len)
+ return 0;
+ if (strstr(dup, ",\n") != NULL)
+ return -1;
+ char* new_delim = strstr(dup, "//");
+ if ((new_delim) && (new_delim == dup)) {
+ if (strstr(dup, "\n") == NULL) {
+ return -1;
+ } else {
+ char * dup2 = strdup(dup);
+ strcpy(dup2, new_delim + 2);
+ char *ch = dup2;
+ while (*ch != '\n')
+ ch++;
+ *ch = 0;
+ delim = dup2;
+
+ dup = strstr(dup, "\n") + 1 ;
+
+ }
+ }
+
+ char* operand = strtok(dup, delim);
+ while (operand != NULL){
+ char* ch = operand;
+ while (*ch) {
+ if (!isdigit(*ch))
+ return -1;
+ ch++;
+ }
+
+ sum += atoi(operand);
+ operand = strtok(NULL, delim);
+ }
+
+ return sum;
}
diff --git a/TDDKata/Calculator.h b/TDDKata/Calculator.h
index a508def..92ece41 100644
--- a/TDDKata/Calculator.h
+++ b/TDDKata/Calculator.h
@@ -5,6 +5,9 @@
///
class Calculator
{
+
+public:
+
///
/// Sum of elements expression
///
@@ -16,6 +19,6 @@ class Calculator
///
/// Input expression
/// Value of sum expression of expression
- int Add(char* expression);
+ int Add(const char* expression);
};
diff --git a/TDDKata/TDDKata.vcxproj b/TDDKata/TDDKata.vcxproj
index 1300175..ffef900 100644
--- a/TDDKata/TDDKata.vcxproj
+++ b/TDDKata/TDDKata.vcxproj
@@ -35,9 +35,12 @@
+
+
+
Create
@@ -45,6 +48,7 @@
Create
Create
+
diff --git a/TDDKata/TestFixture.cpp b/TDDKata/TestFixture.cpp
new file mode 100644
index 0000000..003974b
--- /dev/null
+++ b/TDDKata/TestFixture.cpp
@@ -0,0 +1,12 @@
+#include "pch.h"
+#include "TestFixture.h"
+
+void TestFixture::SetUp()
+{
+ calc = new Calculator();
+}
+
+void TestFixture::TearDown()
+{
+ delete calc;
+}
\ No newline at end of file
diff --git a/TDDKata/TestFixture.h b/TDDKata/TestFixture.h
new file mode 100644
index 0000000..369338f
--- /dev/null
+++ b/TDDKata/TestFixture.h
@@ -0,0 +1,12 @@
+#pragma once
+#include "pch.h"
+#include "Calculator.h"
+class TestFixture: public ::testing::Test
+{
+protected:
+ Calculator * calc;
+ void SetUp() override;
+
+ void TearDown() override;
+};
+
diff --git a/TDDKata/TestFixtureWithParam.cpp b/TDDKata/TestFixtureWithParam.cpp
new file mode 100644
index 0000000..a733d83
--- /dev/null
+++ b/TDDKata/TestFixtureWithParam.cpp
@@ -0,0 +1,24 @@
+#include "pch.h"
+#include "TestFixtureWithParam.h"
+
+INSTANTIATE_TEST_CASE_P(PositiveSet, TestFixtureWithParam,
+ ::testing::Values(
+ Param("0,1,2" , 3),
+ Param("0,0,0", 0),
+ Param("1", 1),
+ Param("1,2", 3),
+ Param("", 0),
+ Param("1,2,3,4,5,6", 21),
+ Param("1\n,2,3", 6),
+ Param("//;\n1;2", 3)
+ ));
+
+INSTANTIATE_TEST_CASE_P(NegativeSet, TestFixtureWithParam,
+ ::testing::Values(
+ Param("abc", -1),
+ Param("a,1,2", -1),
+ Param("1,2,a", -1),
+ Param("1 2", -1),
+ Param("1,\n", -1),
+ Param("//;1;2", -1)
+ ));
diff --git a/TDDKata/TestFixtureWithParam.h b/TDDKata/TestFixtureWithParam.h
new file mode 100644
index 0000000..6b7d4a3
--- /dev/null
+++ b/TDDKata/TestFixtureWithParam.h
@@ -0,0 +1,15 @@
+#pragma once
+#include "TestFixture.h"
+struct Param
+{
+ const char * expression;
+ int expected;
+ Param(const char * expression, int expected) :
+ expression(expression), expected(expected) {}
+};
+
+class TestFixtureWithParam :
+ public TestFixture, public ::testing::WithParamInterface
+{
+};
+
diff --git a/TDDKata/test.cpp b/TDDKata/test.cpp
index 6c6f375..9bfcb64 100644
--- a/TDDKata/test.cpp
+++ b/TDDKata/test.cpp
@@ -1,5 +1,165 @@
#include "pch.h"
- TEST(TDDKata, TestName) {
- ASSERT_EQ(1, 1);
- ASSERT_TRUE(true);
- }
\ No newline at end of file
+#include "Calculator.h"
+#include "TestFixture.h"
+#include "TestFixtureWithParam.h"
+
+
+TEST_P(TestFixtureWithParam, Sets)
+{
+ const char* nums = GetParam().expression;
+ int expected = GetParam().expected;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+ ASSERT_EQ(actual, expected);
+}
+/*
+TEST_F(TestFixture, PositiveUsual) {
+ // arrange
+ char* nums = "0,1,2";
+ int expected = 3;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+ ASSERT_EQ(actual, expected);
+}
+
+TEST_F(TestFixture, PositiveZero) {
+ // arrange
+ char* nums = "0,0,0";
+ int expected = 0;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+ ASSERT_EQ(actual, expected);
+}
+
+
+TEST_F(TestFixture, PositiveOne) {
+ // arrange
+ char* nums = "1";
+ int expected = 1;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+
+ ASSERT_EQ(actual, expected);
+}
+
+TEST_F(TestFixture, PositiveTwo) {
+ // arrange
+ char* nums = "1,2";
+ int expected = 3;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+
+ ASSERT_EQ(actual, expected);
+}
+
+TEST_F(TestFixture, PositiveEmpty) {
+ // arrange
+ char* nums = "";
+ int expected = 0;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+
+ ASSERT_EQ(actual, expected);
+}
+
+TEST_F(TestFixture, NegativeNotNumAll) {
+ // arrange
+ char* nums = "abc";
+ int expected = -1;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+
+ ASSERT_EQ(actual, expected);
+}
+
+TEST_F(TestFixture, NegativeNotNumOne) {
+ // arrange
+ char* nums = "a,1,2";
+ int expected = -1;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+
+ ASSERT_EQ(actual, expected);
+}
+
+TEST_F(TestFixture, NegativeNotNumOneAtEnd) {
+ // arrange
+ char* nums = "1,2,a";
+ int expected = -1;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+ ASSERT_EQ(actual, -1);
+}
+
+TEST_F(TestFixture, NegativeWrongSeparator) {
+ // arrange
+ char* nums = "1 2";
+ int expected = -1;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+
+ ASSERT_EQ(actual, expected);
+}
+
+TEST_F(TestFixture, PositiveFewCountOfNumbers) {
+ // arrange
+ char* nums = "1,2,3,4,5,6";
+ int expected = 21;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+ ASSERT_EQ(actual, expected);
+}
+
+TEST_F(TestFixture, PositiveNewLineSeparator) {
+ // arrange
+ char* nums = "1\n,2,3";
+ int expected = 6;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+ ASSERT_EQ(actual, expected);
+}
+
+
+TEST_F(TestFixture, NegativeNewLineSeparator) {
+ // arrange
+ char* nums = "1,\n";
+ int expected = -1;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+ ASSERT_EQ(actual, expected);
+}
+TEST_F(TestFixture, PositiveSetSeparator) {
+ // arrange
+ char* nums = "//;\n1;2";
+ int expected = 3;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+
+ ASSERT_EQ(actual, expected);
+}
+
+TEST_F(TestFixture, NegativeSetSeparatorNoNeLine) {
+ // arrange
+ char* nums = "//;1;2";
+ int expected = -1;
+ // act
+ int actual = calc->Add(nums);
+ //assert
+
+ ASSERT_EQ(actual, expected);
+}
+*/
\ No newline at end of file