Add LCD code
This commit is contained in:
parent
b718e9e54f
commit
23bc01fa38
8 changed files with 112 additions and 22 deletions
|
@ -1,5 +1,7 @@
|
||||||
conan_cmake_run(CONANFILE conanfile.py BASIC_SETUP CMAKE_TARGETS BUILD missing)
|
conan_cmake_run(CONANFILE conanfile.py BASIC_SETUP CMAKE_TARGETS BUILD missing)
|
||||||
|
|
||||||
|
include_directories(lib)
|
||||||
|
|
||||||
add_subdirectory(lib)
|
add_subdirectory(lib)
|
||||||
add_subdirectory(src)
|
add_subdirectory(src)
|
||||||
add_subdirectory(test)
|
add_subdirectory(test)
|
||||||
|
|
|
@ -1,2 +1,6 @@
|
||||||
[< Back](../README.md)
|
[< Back](../README.md)
|
||||||
# Mod(C++) - Lcd Exercise
|
# Mod(C++) - Lcd Exercise
|
||||||
|
|
||||||
|
* Add tests in [lcd_tests.cpp](test/lcd_tests.cpp) and implementation in
|
||||||
|
[lcd.cpp](lib/lcd.cpp) to support printing all two digit numbers
|
||||||
|
* Set the MAX variable in [main.cpp](src/main.cpp) to 99 and print all the numbers
|
||||||
|
|
|
@ -1,5 +1,40 @@
|
||||||
//
|
|
||||||
// Created by patricia on 11/29/2020.
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "lcd.hpp"
|
#include "lcd.hpp"
|
||||||
|
|
||||||
|
lcd_grid lcd(std::string s1,
|
||||||
|
std::string s2,
|
||||||
|
std::string s3) {
|
||||||
|
lcd_grid result;
|
||||||
|
result.push_back(s1);
|
||||||
|
result.push_back(s2);
|
||||||
|
result.push_back(s3);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
const lcd_grid digits[] =
|
||||||
|
{
|
||||||
|
lcd(" _ ",
|
||||||
|
"| |",
|
||||||
|
"|_|"
|
||||||
|
),
|
||||||
|
lcd(" ",
|
||||||
|
" |",
|
||||||
|
" |"
|
||||||
|
),
|
||||||
|
lcd(" _ ",
|
||||||
|
" _|",
|
||||||
|
"|_ "
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
lcd_grid lcd(int value) {
|
||||||
|
if (value < 10)
|
||||||
|
return digits[value];
|
||||||
|
else {
|
||||||
|
lcd_grid lhs = lcd(value / 10);
|
||||||
|
lcd_grid rhs = digits[value % 10];
|
||||||
|
return lcd(
|
||||||
|
lhs[0] + ' ' + rhs[0],
|
||||||
|
lhs[1] + ' ' + rhs[1],
|
||||||
|
lhs[2] + ' ' + rhs[2]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#ifndef LCD_LCD_HPP
|
#pragma once
|
||||||
#define LCD_LCD_HPP
|
|
||||||
|
|
||||||
class lcd {
|
#include <string>
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
};
|
typedef std::vector<std::string> lcd_grid;
|
||||||
|
|
||||||
#endif //LCD_LCD_HPP
|
lcd_grid lcd(int value);
|
||||||
|
|
||||||
|
lcd_grid lcd(std::string s1,
|
||||||
|
std::string s2,
|
||||||
|
std::string s3);
|
||||||
|
|
|
@ -1,3 +1,12 @@
|
||||||
int main(int argc, char * argv[]) {
|
#include <iostream>
|
||||||
return 0;
|
#include "lcd.hpp"
|
||||||
|
|
||||||
|
static const int MAX = 3;
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
for (int i = 0; i < MAX; i++) {
|
||||||
|
auto grid = lcd(i);
|
||||||
|
for (const auto & line: grid)
|
||||||
|
std::cout << line << "\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,7 @@ find_package(GTest REQUIRED)
|
||||||
|
|
||||||
include(GoogleTest)
|
include(GoogleTest)
|
||||||
|
|
||||||
add_executable(lcd_tests tests.cpp)
|
add_executable(lcd_tests lcd_tests.cpp)
|
||||||
target_link_libraries(lcd_tests GTest::GTest liblcd)
|
target_link_libraries(lcd_tests GTest::GTest liblcd)
|
||||||
|
|
||||||
gtest_discover_tests(lcd_tests TEST_PREFIX lcd:)
|
gtest_discover_tests(lcd_tests TEST_PREFIX lcd:)
|
||||||
|
|
46
lcd/test/lcd_tests.cpp
Normal file
46
lcd/test/lcd_tests.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "lcd.hpp"
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
std::string to_string(lcd_grid grid) {
|
||||||
|
std::stringstream output;
|
||||||
|
for (const auto & str: grid)
|
||||||
|
output << str;
|
||||||
|
return output.str();
|
||||||
|
}
|
||||||
|
|
||||||
|
void lcd_spec(int value, lcd_grid grid) {
|
||||||
|
std::string expected = to_string(grid),
|
||||||
|
actual = to_string(lcd(value));
|
||||||
|
if (expected != actual) {
|
||||||
|
std::cerr
|
||||||
|
<< "lcd(" << value << ")\n"
|
||||||
|
<< "expected==\n"
|
||||||
|
<< expected << '\n'
|
||||||
|
<< "actual==\n"
|
||||||
|
<< actual << std::endl;
|
||||||
|
std::exit(EXIT_FAILURE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(LcdTest, Zero) {
|
||||||
|
lcd_spec(0, lcd(
|
||||||
|
" _ ",
|
||||||
|
"| |",
|
||||||
|
"|_|"
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(LcdTest, Twelve) {
|
||||||
|
lcd_spec(12, lcd(
|
||||||
|
" _ ",
|
||||||
|
" | _|",
|
||||||
|
" | |_ "
|
||||||
|
));
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char * argv[]) {
|
||||||
|
testing::InitGoogleTest(&argc, argv);
|
||||||
|
return RUN_ALL_TESTS();
|
||||||
|
}
|
|
@ -1,10 +0,0 @@
|
||||||
#include <gtest/gtest.h>
|
|
||||||
|
|
||||||
TEST(LcdTest, Initial) {
|
|
||||||
EXPECT_EQ(1, 2);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main(int argc, char* argv[]) {
|
|
||||||
testing::InitGoogleTest(&argc, argv);
|
|
||||||
return RUN_ALL_TESTS();
|
|
||||||
}
|
|
Loading…
Reference in a new issue