Skip to content
Open
42 changes: 42 additions & 0 deletions tdd_intro/demo/01_bob/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,45 @@ He answers 'Whatever.' to anything else.
#include <gtest/gtest.h>
#include <string>

const std::string g_tellBobAnswer = "Sure";
const std::string g_yellBobAnswer = "Whoa, chill out!";
const std::string g_emptyBobAnswer = "Fine. Be that way!";
const std::string g_defaultBobAnswer = "Whatever.";

std::string CallBob(const std::string& str)
{
if (str.empty())
{
return g_emptyBobAnswer;
}
if (str.back() == '!')
{
return g_yellBobAnswer;
}
else if (str.back() == '?')
{
return g_tellBobAnswer;
}

return g_defaultBobAnswer;
}

TEST(bob, AnswerSureOnQuestion)
{
ASSERT_EQ(g_tellBobAnswer, CallBob("Are you ok?"));
}

TEST(bob, AnswerChillOnYell)
{
ASSERT_EQ(g_yellBobAnswer, CallBob("Yell!!!!"));
}

TEST(bob, AnswerOnEmptyString)
{
ASSERT_EQ(g_emptyBobAnswer, CallBob(""));
}

TEST(bob, AnswerOnAnythingElse)
{
ASSERT_EQ(g_defaultBobAnswer, CallBob("Anything else"));
}
61 changes: 61 additions & 0 deletions tdd_intro/demo/01_fizz_buzz/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,64 @@
* a multiple of 15 = FizzBuzz
* any other number = <nothing>
*/

const std::string g_fizzString = "Fizz";
const std::string g_buzzString = "Buzz";
const std::string g_fizzBuzzString = "FizzBuzz";

std::string FizzBuzz(int num)
{
std::string fizzBuzzStr;

if (num % 3 == 0)
{
fizzBuzzStr = g_fizzString;
}

if (num % 5 == 0)
{
fizzBuzzStr += g_buzzString;
}

return fizzBuzzStr;
}


TEST(FizzBuzzTest, Fizz)
{
EXPECT_EQ(g_fizzString, FizzBuzz(3));
}

TEST(FizzBuzzTest, Buzz)
{
EXPECT_EQ(g_buzzString, FizzBuzz(5));
}

TEST(FizzBuzzTest, Fizz6)
{
EXPECT_EQ(g_fizzString, FizzBuzz(6));
}

TEST(FizzBuzzTest, Buzz10)
{
EXPECT_EQ(g_buzzString, FizzBuzz(10));
}

TEST(FizzBuzzTest, FizzBuzz)
{
EXPECT_EQ(g_fizzBuzzString, FizzBuzz(15));
}

TEST(FizzBuzzTest, FizzBuzzEmpty)
{
EXPECT_EQ("", FizzBuzz(1));
}

TEST(FizzBuzzTest, Acceptance)
{
EXPECT_EQ(g_buzzString, FizzBuzz(35));
EXPECT_EQ(g_fizzString, FizzBuzz(66));
EXPECT_EQ(g_fizzBuzzString, FizzBuzz(45));
EXPECT_EQ("", FizzBuzz(17));
EXPECT_EQ("", FizzBuzz(-23));
}
73 changes: 73 additions & 0 deletions tdd_intro/demo/02_anagram/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,76 @@ Given "listen" and a list of candidates like "enlists" "google" "inlets" "banana
_from http://exercism.io/_
*/
#include <gtest/gtest.h>
typedef std::vector<std::string> strings;

bool IsAnagramPresent(std::string first, std::string second)
{
std::sort(first.begin(), first.end());
std::sort(second.begin(), second.end());

return first == second;
}

strings ReturnAnagrams(std::string target, const strings& variants)
{
strings anagrams;
for (std::string variant : variants)
{
if (IsAnagramPresent(target, variant))
{
anagrams.push_back(variant);
}
}

return anagrams;
}

TEST (anagrams, emptyString)
{
EXPECT_TRUE(IsAnagramPresent("", ""));
}

TEST(anagrams, notEqualWords)
{
EXPECT_FALSE(IsAnagramPresent("word", "lock"));
}

TEST(anagrams, anagram)
{
EXPECT_TRUE(IsAnagramPresent("listen", "inlets"));
}

TEST(anagrams, returnEmptyString)
{
EXPECT_EQ(strings(), ReturnAnagrams("", strings()));
}

TEST(anagrams, singleAnagram)
{
EXPECT_EQ( strings({"inlets"}), ReturnAnagrams("listen", strings({"inlets"})));
}

TEST(anagrams, otherSignleAnagram)
{
EXPECT_EQ( strings({"letsin"}), ReturnAnagrams("listen", strings({"letsin"})));
}

TEST(anagrams, signleNotAnagram)
{
EXPECT_EQ( strings(), ReturnAnagrams("listen", strings({"letiin"})));
}

TEST(anagrams, multipleWordsOnaAnagram)
{
EXPECT_EQ(strings({"inlets"}), ReturnAnagrams("listen", strings({"inlets", "google"})));
}

TEST(anagrams, multipleAnagrams)
{
EXPECT_EQ(strings({"inlets", "inelts"}), ReturnAnagrams("listen", strings({"inlets", "inelts"})));
}

TEST(anagrams, multipleAnagramsNotInOrder)
{
EXPECT_EQ(strings({"inelts", "inlets"}), ReturnAnagrams("listen", strings({"inlets", "inelts"})));
}
85 changes: 85 additions & 0 deletions tdd_intro/homework/02_ternary_numbers/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,88 @@ 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.
*/

#include <cmath>

const unsigned int MaxNumber = 2;
const unsigned int PowNumeber = 3;
const unsigned int IndexMultiplier = 3;

unsigned int TernaryNumber(unsigned int index, unsigned int number)
{
if (number > MaxNumber)
{
return 0;
}

return number * static_cast<unsigned int>(std::pow(PowNumeber, index));
}

unsigned int ConvertTernaryNumbers(const std::string &numbers)
{
if (numbers.empty())
{
return 0;
}

unsigned int sum = 0;
for (auto rIter = numbers.rbegin(); rIter != numbers.rend(); ++rIter)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

слишком большой шаг, один тест не мог привести к циклу с различными условиями и скорее всего на этом этапе тернарный оператор в 46 строке не полностью покрыт

{
unsigned int number = std::stoul(std::string(1, *rIter));
if (number > MaxNumber)
{
return 0;
}

unsigned int rIterIndex = rIter - numbers.rbegin();
unsigned int place = rIterIndex == 0 ? 1 : rIterIndex * IndexMultiplier;
unsigned int num = TernaryNumber(place, number);

sum += num;
}

return sum;
}

TEST(TernaryNumbers, OneNumber)
{
ASSERT_EQ(3, TernaryNumber(1, 1));
}

TEST(TernaryNumbers, WrongNumber)
{
ASSERT_EQ(0, TernaryNumber(1, 3));
}

TEST(TernaryNumbers, OneIndexTwoNumber)
{
ASSERT_EQ(6, TernaryNumber(1, 2));
}

TEST(TernaryNumbers, EmptyNumberString)
{
ASSERT_EQ(0, ConvertTernaryNumbers(""));
}

TEST(TernaryNumbers, OneNumberString)
{
ASSERT_EQ(3, ConvertTernaryNumbers("1"));
}

TEST(TernaryNumbers, MultipleNumberString)
{
ASSERT_EQ(27, ConvertTernaryNumbers("10"));
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

3 было правильно, а 27 нет.
Неправильный тест повлиял на всю дальнейшую работу

}

TEST(TernaryNumbers, WrongMultipleNumberString)
{
ASSERT_EQ(0, ConvertTernaryNumbers("13"));
}

TEST(TernaryNumbers, Acceptence)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

функция работает неправильно https://www.epochconverter.com/numbers/bin-oct-dec-hex

{
ASSERT_EQ(0, ConvertTernaryNumbers("3102"));
ASSERT_EQ(0, ConvertTernaryNumbers("0"));
ASSERT_EQ(6, ConvertTernaryNumbers("02"));
ASSERT_EQ(19743, ConvertTernaryNumbers("1022"));
}
1 change: 1 addition & 0 deletions tdd_intro/homework/homework.pro
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
TEMPLATE = subdirs

SUBDIRS += \
00_intro \
01_leap_year \
02_ternary_numbers \
03_bank_ocr \
Expand Down