Skip to content
Open
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
4f63261
03 - Bank OCR - Prepared test list
Dec 19, 2018
9783581
03 - Bank OCR - First red test
Dec 19, 2018
440fd14
03 - Bank OCR - Added fake for 1st test
Dec 19, 2018
9ac8076
03 - Bank OCR - Added red test for digit 1
Dec 19, 2018
5a4970f
03 - Bank OCR - Fixed test for digit 1
Dec 19, 2018
eccfe88
03 - Bank OCR - Added red test for digit 2
Dec 19, 2018
4e72a34
03 - Bank OCR - Fixed test for digit 2
Dec 19, 2018
6a78a45
03 - Bank OCR - Added red test for digit 3
Dec 19, 2018
a8a15c0
03 - Bank OCR - Fixed test for digit 3
Dec 19, 2018
941579f
03 - Bank OCR - Fixed test for digit 4
Dec 19, 2018
9959282
03 - Bank OCR - Fixed test for digit 4
Dec 19, 2018
d2c6e2f
03 - Bank OCR - Added red test for digit 5
Dec 19, 2018
551ca9c
03 - Bank OCR - Fixed test for digit 5 but broke for 0
Dec 19, 2018
3fc999a
03 - Bank OCR - Fixed test for digit 0
Dec 19, 2018
96886e8
03 - Bank OCR - Fixed test for digit 6
Dec 19, 2018
f4f71f0
03 - Bank OCR - Added red test for digit 7
Dec 19, 2018
367ccd1
03 - Bank OCR - Fixed test for digit 7
Dec 19, 2018
fa63886
03 - Bank OCR - Added red test for digit 8
Dec 19, 2018
4639745
03 - Bank OCR - Fixed test for digit 8
Dec 19, 2018
9bfd473
03 - Bank OCR - Added red test for digit 9
Dec 19, 2018
983db33
03 - Bank OCR - Refactoring
Dec 19, 2018
279431e
03 - Bank OCR - Added test for incorrect symbols
Dec 19, 2018
a04f870
03 - Bank OCR - Added red test fot all 0 number
Dec 19, 2018
5fdfea3
03 - Bank OCR - Fixed test fot all 0 number
Dec 19, 2018
1e1dc11
03 - Bank OCR - Added all 0-9 green tests and 123456789 red test
Dec 19, 2018
81e03d8
03 - Bank OCR - Fixed 123456789 test
Dec 19, 2018
f4b636f
03 - Bank OCR - Added acceptance test
Dec 19, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
215 changes: 215 additions & 0 deletions tdd_intro/homework/03_bank_ocr/test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ Example input and output
*/
#include <gtest/gtest.h>
#include <string>
#include <cmath>

const unsigned short g_digitLen = 3;
const unsigned short g_linesInDigit = 3;
Expand Down Expand Up @@ -140,6 +141,18 @@ const Digit s_digit9 = { " _ ",
"|_|",
" _|"
};
const Digit s_incorrectDigit1 = { " ",
"|_|",
" _|"
};
const Digit s_incorrectDigit2 = { " ",
"| |",
"|_|"
};
const Digit s_incorrectDigit3 = { " _ ",
"|_|",
"| |"
};

const Display s_displayAll0 = { " _ _ _ _ _ _ _ _ _ ",
"| || || || || || || || || |",
Expand Down Expand Up @@ -195,3 +208,205 @@ const Display s_display123456789 = { " _ _ _ _ _ _ _ ",
" | _| _||_||_ |_ ||_||_|",
" ||_ _| | _||_| ||_| _|"
};

const Display s_display234432234 = { " _ _ _ _ _ _ ",
" _| _||_||_| _| _| _| _||_|",
"|_ _| | | _||_ |_ _| |"
};

/*
*test list
*1) check strings with single digit 0
*2) check strings with single digit 1
*...
*10) check strings with single digit 9
*11) check incorrect symbol
*11) check 9 similar symbols
*12) check 9 random symbols
*13) acceptance test
*/

int ConvertDigit(const Digit &digit)
{
std::string high = digit.lines[0];
std::string mid = digit.lines[1];
std::string low = digit.lines[2];

int mask = high.at(1) == '_' ? 1 : 0;
mask += mid.at(0) == '|' ? 2 : 0;
mask += mid.at(1) == '_' ? 4 : 0;
mask += mid.at(2) == '|' ? 8 : 0;
mask += low.at(0) == '|' ? 16 : 0;
mask += low.at(1) == '_' ? 32 : 0;

// 1 - 001000 - 8
// 2 - 111101 - 61
// 3 - 101101 - 45
// 4 - 001110 - 14
// 5 - 100111 - 39
// 6 - 110111 - 55
// 7 - 001001 - 9
// 8 - 111111 - 63
// 9 - 101111 - 47
// 0 - 111011 - 59

switch(mask)
{
case 8:
return 1;
case 61:
return 2;
case 45:
return 3;
case 14:
return 4;
case 39:
return 5;
case 55:
return 6;
case 9:
return 7;
case 63:
return 8;
case 47:
return 9;
case 59:
return 0;

default:
throw std::runtime_error("Unknown symbol found");
}
}

int ConvertNumber(const Display &number)
{
int result = 0;
for(int i = 0; i < g_digitsOnDisplay; ++i)
{
int position = i * g_digitLen;
int multiplier = std::pow(10, g_digitsOnDisplay - i - 1);
result += multiplier * ConvertDigit({std::string(number.lines[0].c_str() + position),
std::string(number.lines[1].c_str() + position),
std::string(number.lines[2].c_str() + position)});
}
return result;
}


TEST(BankOCR, CheckDigitZero)
{
ASSERT_EQ(0, ConvertDigit(s_digit0));
}

TEST(BankOCR, CheckDigitOne)
{
ASSERT_EQ(1, ConvertDigit(s_digit1));
}

TEST(BankOCR, CheckDigitTwo)
{
ASSERT_EQ(2, ConvertDigit(s_digit2));
}

TEST(BankOCR, CheckDigitThree)
{
ASSERT_EQ(3, ConvertDigit(s_digit3));
}

TEST(BankOCR, CheckDigitFour)
{
ASSERT_EQ(4, ConvertDigit(s_digit4));
}

TEST(BankOCR, CheckDigitFive)
{
ASSERT_EQ(5, ConvertDigit(s_digit5));
}

TEST(BankOCR, CheckDigitSix)
{
ASSERT_EQ(6, ConvertDigit(s_digit6));
}

TEST(BankOCR, CheckDigitSeven)
{
ASSERT_EQ(7, ConvertDigit(s_digit7));
}

TEST(BankOCR, CheckDigitEight)
{
ASSERT_EQ(8, ConvertDigit(s_digit8));
}

TEST(BankOCR, CheckDigitNine)
{
ASSERT_EQ(9, ConvertDigit(s_digit9));
}

TEST(BankOCR, CheckIncorectDigits)
{
EXPECT_THROW(ConvertDigit(s_incorrectDigit1), std::runtime_error);
EXPECT_THROW(ConvertDigit(s_incorrectDigit2), std::runtime_error);
EXPECT_THROW(ConvertDigit(s_incorrectDigit3), std::runtime_error);
}


TEST(BankOCR, CheckNumberAll0)
{
ASSERT_EQ(000000000, ConvertNumber(s_displayAll0));
}

TEST(BankOCR, CheckNumberAll1)
{
ASSERT_EQ(111111111, ConvertNumber(s_displayAll1));
}

TEST(BankOCR, CheckNumberAll2)
{
ASSERT_EQ(222222222, ConvertNumber(s_displayAll2));
}

TEST(BankOCR, CheckNumberAll3)
{
ASSERT_EQ(333333333, ConvertNumber(s_displayAll3));
}

TEST(BankOCR, CheckNumberAll4)
{
ASSERT_EQ(444444444, ConvertNumber(s_displayAll4));
}

TEST(BankOCR, CheckNumberAll5)
{
ASSERT_EQ(555555555, ConvertNumber(s_displayAll5));
}

TEST(BankOCR, CheckNumberAll6)
{
ASSERT_EQ(666666666, ConvertNumber(s_displayAll6));
}

TEST(BankOCR, CheckNumberAll7)
{
ASSERT_EQ(777777777, ConvertNumber(s_displayAll7));
}

TEST(BankOCR, CheckNumberAll8)
{
ASSERT_EQ(888888888, ConvertNumber(s_displayAll8));
}

TEST(BankOCR, CheckNumberAll9)
{
ASSERT_EQ(999999999, ConvertNumber(s_displayAll9));
}

TEST(BankOCR, CheckNumberAll123456789)
{
ASSERT_EQ(123456789, ConvertNumber(s_display123456789));
}

TEST(BankOCR, Acceptance)
{
ASSERT_EQ(234432234, ConvertNumber(s_display234432234));
}