diff --git a/tdd_intro/homework/01_leap_year/test.cpp b/tdd_intro/homework/01_leap_year/test.cpp index 4f186c8b..f7d903df 100644 --- a/tdd_intro/homework/01_leap_year/test.cpp +++ b/tdd_intro/homework/01_leap_year/test.cpp @@ -13,3 +13,34 @@ If your language provides a method in the standard library that does this look-u */ #include + +bool IsYearLeap(unsigned int year) +{ + if(year % 4 == 0) + { + if(year % 100 == 0 && year % 400 != 0) + { + return false; + } + return true; + } + return false; +} + +TEST(LeapYear, true_for_multiple_4) +{ + ASSERT_EQ(true, IsYearLeap(1996)); + ASSERT_EQ(true, IsYearLeap(2004)); +} +TEST(LeapYear, false_for_1997) +{ + ASSERT_EQ(false, IsYearLeap(1997)); +} +TEST(LeapYear, false_for_2100) +{ + ASSERT_EQ(false, IsYearLeap(2100)); +} +TEST(LeapYear, true_for_2000) +{ + ASSERT_EQ(true, IsYearLeap(2000)); +} diff --git a/tdd_intro/homework/02_ternary_numbers/test.cpp b/tdd_intro/homework/02_ternary_numbers/test.cpp index 17503028..1fd69b9d 100644 --- a/tdd_intro/homework/02_ternary_numbers/test.cpp +++ b/tdd_intro/homework/02_ternary_numbers/test.cpp @@ -16,3 +16,109 @@ The last place in a ternary number is the 1's place. The second to last is the 3 If your language provides a method in the standard library to perform the conversion, pretend it doesn't exist and implement it yourself. */ +int TernaryDigitValue(int digit, int digitNumber) +{ + return digit * pow(3,digitNumber); +} + +TEST(TernaryDigitValue, two_for_2_and_0) +{ + ASSERT_EQ(2, TernaryDigitValue(2, 0)); +} + +TEST(TernaryDigitValue, eighteen_for_2_and_2) +{ + ASSERT_EQ(18, TernaryDigitValue(2, 2)); +} + +TEST(TernaryDigitValue, zero_for_zero_with_any_numbmer) +{ + ASSERT_EQ(0, TernaryDigitValue(0, 3)); + ASSERT_EQ(0, TernaryDigitValue(0, 1)); +} + +bool IsTernaryDigit(char symbol) +{ + return symbol >= '0' && symbol <= '2'; +} + +TEST(IsTernaryDigit, true_for_0) +{ + ASSERT_TRUE(IsTernaryDigit('0')); +} +TEST(IsTernaryDigit, false_for_a) +{ + ASSERT_FALSE(IsTernaryDigit('a')); +} + +TEST(IsTernaryDigit, false_for_3) +{ + ASSERT_FALSE(IsTernaryDigit('3')); +} + +int ConvertToInt(char symbol) +{ + return static_cast(symbol - '0'); +} +TEST(ConvertToInt, two_for_2) +{ + ASSERT_EQ(2, ConvertToInt('2')); +} + +int TernaryNumberValue(std::string number) +{ + if(number.empty()) + return 0; + + + + int sum = 0; + for(size_t i = 0, size = number.size(); i < size; ++i) + { + size_t digitNumber = size - i -1; + + char symbol = number.at(i); + if(!IsTernaryDigit(symbol)) + { + return 0; + } + int value = TernaryDigitValue(ConvertToInt(symbol), static_cast(digitNumber)); + sum+=value; + } + return sum; +} + +TEST(TernaryNumberValue, zero_for_word) +{ + ASSERT_EQ(0, TernaryNumberValue("word")); +} + +TEST(TernaryNumberValue,two_for_two) +{ + ASSERT_EQ(2, TernaryNumberValue("2")); +} + +TEST(TernaryNumberValue, zero_for_empty_string) +{ + ASSERT_EQ(0, TernaryNumberValue("")); +} +TEST(TernaryNumberValue,five_for_12) +{ + ASSERT_EQ(5, TernaryNumberValue("12")); +} +TEST(TernaryNumberValue,0_for_decimal_number) +{ + ASSERT_EQ(0, TernaryNumberValue("13")); + ASSERT_EQ(0, TernaryNumberValue("1321")); +} + +TEST(TernaryNumberValue, correct_convert_for_multidigit_numbers) +{ + ASSERT_EQ(13, TernaryNumberValue("111")); + ASSERT_EQ(40, TernaryNumberValue("1111")); +} + +TEST(TernaryNumberValue, acceptance_302_for_102012) +{ + ASSERT_EQ(302, TernaryNumberValue("102012")); +}