Skip to content
This repository has been archived by the owner on Nov 25, 2021. It is now read-only.

Commit

Permalink
WIP: Magic++ fully integrated. (modulo hard-coded include paths). Add…
Browse files Browse the repository at this point in the history
…ed all float types to user-defined literals. single datapoint test: FAIL
  • Loading branch information
bRad committed Feb 4, 2017
1 parent 4958cd9 commit 33c742f
Show file tree
Hide file tree
Showing 6 changed files with 62 additions and 25 deletions.
7 changes: 6 additions & 1 deletion Sources/Modules/CppGrapher/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,20 @@ set(SOURCE_FILES
CppGrapher.h
Validation/Argument.cpp
Validation/DataFile.cpp
Graphing/Visualization.cpp
${THIRD_PARTY_SOURCE_FILES}
${HELPERS_SOURCE_FILES})

add_library(CppGrapher ${SOURCE_FILES})

target_compile_definitions(CppGrapher PRIVATE MAGICKCORE_QUANTUM_DEPTH=16 MAGICKCORE_HDRI_ENABLE)
target_include_directories(CppGrapher PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/
${CMAKE_CURRENT_SOURCE_DIR}/../
${CMAKE_CURRENT_SOURCE_DIR}/../3rdParty/any/
${CMAKE_CURRENT_SOURCE_DIR}/../3rdParty/Optional/
${CMAKE_CURRENT_SOURCE_DIR}/../3rdParty/tinyutf8/
${CMAKE_CURRENT_SOURCE_DIR}/../3rdParty/variant/)
${CMAKE_CURRENT_SOURCE_DIR}/../3rdParty/variant/
/usr/local/include/ImageMagick-7/)

target_link_libraries (CppGrapher PUBLIC Magick++-7.Q16HDRI)
6 changes: 5 additions & 1 deletion Sources/Modules/CppGrapher/CppGrapher.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@

#include <vector>
#include <fstream>
#include "Magick++.h"

//save compiler switches - external libs often can't handle ultra-strict compiler settings
#include "tinyutf8.h"
Expand Down Expand Up @@ -47,7 +48,8 @@ class CppGrapher
/// @throws May throw any std::exception listed by any method in the CppGrapher class (see below).
int Main( const std::vector<utf8_string>& args );

private:
//Protected allows tests to access 'private' methods via subclassing.
protected:
/// Ensure expected/required arguments have been received.
///
/// @param args[in] A vector of UTF-8 strings representing the arguments given to the program.
Expand Down Expand Up @@ -108,6 +110,8 @@ class CppGrapher
/// @throws Typically, TokenNotFoundException.
std::tuple<utf8_string::size_type, utf8_string::size_type> FindNextToken( const utf8_string& line,
utf8_string::size_type& pos ) const;

Magick::Image MakeDefaultGraph();
};

/// @example ../Tests/Unit/Lib.UnitTests.cpp
Expand Down
7 changes: 7 additions & 0 deletions Sources/Modules/CppGrapher/Graphing/Visualization.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "CppGrapher.h"

Magick::Image CppGrapher::MakeDefaultGraph()
{
return Magick::Image();
}

25 changes: 14 additions & 11 deletions Sources/Modules/Helpers/UserDefinedLiterals.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,21 +24,24 @@ struct LiteralParser<sum, first, rest...>
};

//Add common fixed-width signed value literals
template<char... chars> constexpr i8 operator ""_i8() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr i16 operator ""_i16() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr i32 operator ""_i32() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr i64 operator ""_i64() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr i8 operator""_i8() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr i16 operator""_i16() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr i32 operator""_i32() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr i64 operator""_i64() { return {LiteralParser<0, chars...>::value}; }

//Add common fixed-width unsigned value literals
template<char... chars> constexpr u8 operator "" _u8() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr u16 operator ""_u16() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr u32 operator ""_u32() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr u64 operator ""_u64() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr u8 operator""_u8() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr u16 operator""_u16() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr u32 operator""_u32() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr u64 operator""_u64() { return {LiteralParser<0, chars...>::value}; }

//Add literals for ptrdiff_t and size_t
template<char... chars> constexpr isz operator ""_isz() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr usz operator ""_usz() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr isz operator""_isz() { return {LiteralParser<0, chars...>::value}; }
template<char... chars> constexpr usz operator""_usz() { return {LiteralParser<0, chars...>::value}; }

//TODO: Add float & double support
//Add support for floating point formats
inline f32 operator"" _f32(long double v) { return v; }
inline f64 operator"" _f64(long double v) { return v; }
inline f80 operator""_f80(long double v) { return v; }

#endif //USER_DEFINED_LITERALS_H
4 changes: 3 additions & 1 deletion Sources/Tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ set(TEST_SOURCE_FILES
add_executable(Tests ${TEST_SOURCE_FILES})

target_include_directories(Tests PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/Catch/include/)
${CMAKE_CURRENT_SOURCE_DIR}/3rdParty/Catch/include/
/usr/local/include/ImageMagick-7/)

target_compile_definitions(Tests PRIVATE MAGICKCORE_QUANTUM_DEPTH=16 MAGICKCORE_HDRI_ENABLE)
target_link_libraries (Tests PUBLIC Runner CppGrapher)
38 changes: 27 additions & 11 deletions Sources/Tests/Unit/CppGrapher.Graphing.Visualization.UnitTests.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2,29 +2,45 @@
#include "catch.hpp"
#include "CppGrapher.h"
#include "Helpers/Filesystem.h"
#include "Magick++.h"
#include "Helpers/UserDefinedLiterals.h"

using namespace Magick;

class TestApp : public CppGrapher
{
public:
Image MakeDefaultGraph()
{
return CppGrapher::MakeDefaultGraph();
}
};

SCENARIO("Graphics tests")
{
GIVEN("an app instance")
GIVEN( "a graphics-enabled app instance" )
{
auto app = CppGrapher();
auto app = TestApp();
auto resultFilename = utf8_string( u8"cpp-grapher-output.png" );

WHEN("fed a data file rendering a single pixel at the origin (0, 0)")
WHEN( "fed a data file rendering a single pixel at the origin (0, 0)" )
{
auto filename = utf8_string( u8"cpp-grapher-test.one_pixel" );
auto fileContents = u8"pixel_one, 0 0";
auto fileContents = utf8_string( u8"pixel_one, 0 0" );
auto fs = TemporaryFileStream( filename, fileContents );
auto args = std::vector<utf8_string> { u8"cpp-grapher_via-test-runner", filename };

//TODO suppress stdout output
//TODO suppress stdout output?
app.Main( args );

THEN("a bitmap should be rendered with one pixel set at (0, 0)")
THEN( "a bitmap should be rendered with one pixel set at (0, 0)" )
{
//TODO read image file
//generate 0-pixel image file
//diff images
auto referenceImage = app.MakeDefaultGraph();
auto resultImage = Image();
resultImage.read( resultFilename.cpp_str() );
auto distortion = 0.0_f64;
auto diffImage = referenceImage.compare( resultImage,
MetricType::AbsoluteErrorMetric,
&distortion );
diffImage.write( "cpp-grapher-diff.png" );
//assert (count non-black pixels == 1)
}
}
Expand Down

0 comments on commit 33c742f

Please sign in to comment.