Skip to content

Commit

Permalink
project: added ut and benchmark targets.
Browse files Browse the repository at this point in the history
Signed-off-by: Bartłomiej Burdukiewicz <[email protected]>
  • Loading branch information
dev-0x7C6 committed Mar 19, 2021
1 parent 19a0fda commit 1501974
Show file tree
Hide file tree
Showing 6 changed files with 113 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/compile.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ jobs:
- name: install opengl
run: sudo apt-get install mesa-common-dev libglu1-mesa-dev ninja-build -y
- name: cmake
run: CC="gcc-10" CXX="g++-10" cmake -GNinja .
run: CC="gcc-10" CXX="g++-10" cmake -GNinja -DTESTS=OFF -DBENCHMARKS=OFF .
- name: ninja
run: CC="gcc-10" CXX="g++-10" ninja
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
*.user
*.pro.user
51 changes: 49 additions & 2 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,18 @@ cmake_minimum_required(VERSION 3.12)

project(laser-engraver-toolkit)

option(TESTS "Build unit tests" ON)
option(BENCHMARKS "Build benchmarks" ON)

if (TESTS)
find_package(GTest)
endif()

if (BENCHMARKS)
include(FindPkgConfig)
pkg_check_modules(BENCHMARK REQUIRED IMPORTED_TARGET benchmark)
endif()

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
Expand All @@ -13,6 +25,19 @@ set(CMAKE_AUTORCC ON)
find_package(Qt5 COMPONENTS Core Gui Widgets SerialPort REQUIRED)
find_package(Threads)


add_library(semi-gcode-lib STATIC
src/gcode-generator.cpp
src/gcode-generator.hpp
src/semi-gcode.cpp
src/semi-gcode.hpp
)

target_link_libraries(semi-gcode-lib PUBLIC
Qt5::Core
Qt5::Widgets
)

set(sources
src/dialogs/add-engraver-dialog.cpp
src/dialogs/add-engraver-dialog.h
Expand Down Expand Up @@ -49,8 +74,6 @@ set(sources
src/select-engraver-dialog.cpp
src/select-engraver-dialog.h
src/select-engraver-dialog.ui
src/semi-gcode.cpp
src/semi-gcode.hpp
src/sheets.hpp
src/spindle-position.hpp
src/upload-strategy.cpp
Expand All @@ -66,6 +89,29 @@ set(sources
src/workspace.h
)

if (TESTS)
add_executable(laser-engraver-tests
src/ut/instruction-tests.cpp
src/ut/main.cpp
)

target_link_libraries(laser-engraver-tests
GTest::GTest
semi-gcode-lib
)
endif()

if (BENCHMARKS)
add_executable(laser-engraver-benchmark
src/benchmark/main.cpp
)

target_link_libraries(laser-engraver-benchmark
PkgConfig::BENCHMARK
semi-gcode-lib
)
endif()

add_executable(laser-engraver-toolkit ${sources})
target_compile_definitions(laser-engraver-toolkit PRIVATE QT_DEPRECATED_WARNINGS)
target_compile_definitions(laser-engraver-toolkit PRIVATE QT_DISABLE_DEPRECATED_BEFORE=0x060000)
Expand All @@ -75,6 +121,7 @@ target_link_libraries(laser-engraver-toolkit PRIVATE
Qt5::Widgets
Qt5::SerialPort
Threads::Threads
semi-gcode-lib
)

install(TARGETS laser-engraver-toolkit RUNTIME DESTINATION bin)
Expand Down
32 changes: 32 additions & 0 deletions src/benchmark/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#include <benchmark/benchmark.h>

#include <src/gcode-generator.hpp>
#include <src/semi-gcode.hpp>

#include <QApplication>
#include <QImage>
#include <QPixmap>

auto create_image() -> QImage {
QPixmap ret(256, 256);
ret.fill(Qt::black);
return ret.toImage();
}

static void generate_semi_gcode_from_image(benchmark::State &state) {
const auto image = create_image();
progress_t progress{};
while (state.KeepRunning()) {
auto ret = semi::generator::from_image(image, {}, progress);
benchmark::DoNotOptimize(ret);
}
}

BENCHMARK(generate_semi_gcode_from_image);

auto main(int argc, char **argv) -> int {
QApplication app(argc, argv);
::benchmark::Initialize(&argc, argv);
::benchmark::RunSpecifiedBenchmarks();
return 0;
}
22 changes: 22 additions & 0 deletions src/ut/instruction-tests.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#include <gtest/gtest.h>

#include <src/gcode-generator.hpp>
#include <src/instructions.hpp>
#include <src/semi-gcode.hpp>

#include <QImage>
#include <QPixmap>

auto create_image() -> QImage {
QPixmap ret(256, 256);
ret.fill(Qt::black);
return ret.toImage();
}

TEST(semi_generator, from_image) {
auto progress = progress_t{};
const auto image = create_image();
const auto codes = semi::generator::from_image(image, {}, progress);
EXPECT_GE(codes.size(), image.width() * image.height());
EXPECT_DOUBLE_EQ(progress, 1.0);
}
8 changes: 8 additions & 0 deletions src/ut/main.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
#include <gtest/gtest.h>
#include <QApplication>

int main(int argc, char *argv[]) {
QApplication app(argc, argv);
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

0 comments on commit 1501974

Please sign in to comment.