Merge branch 'develop' into feature/sax2
This commit is contained in:
		
						commit
						e1ea8369ad
					
				
					 9 changed files with 122 additions and 44 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
cmake_minimum_required(VERSION 3.0.0)
 | 
			
		||||
cmake_minimum_required(VERSION 3.8)
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
## PROJECT
 | 
			
		||||
| 
						 | 
				
			
			@ -44,6 +44,8 @@ endif()
 | 
			
		|||
##
 | 
			
		||||
add_library(${NLOHMANN_JSON_TARGET_NAME} INTERFACE)
 | 
			
		||||
 | 
			
		||||
target_compile_features(${NLOHMANN_JSON_TARGET_NAME} INTERFACE cxx_std_11)
 | 
			
		||||
 | 
			
		||||
target_include_directories(
 | 
			
		||||
    ${NLOHMANN_JSON_TARGET_NAME}
 | 
			
		||||
    INTERFACE
 | 
			
		||||
| 
						 | 
				
			
			@ -51,8 +53,8 @@ target_include_directories(
 | 
			
		|||
    $<INSTALL_INTERFACE:include>
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
## add debug view defintion file for msvc (natvis) [cmake <= 3.2.2 does not support export of source files]
 | 
			
		||||
if (MSVC AND CMAKE_VERSION VERSION_GREATER "3.2.2")
 | 
			
		||||
## add debug view defintion file for msvc (natvis)
 | 
			
		||||
if (MSVC)
 | 
			
		||||
    set(NLOHMANN_ADD_NATVIS TRUE)
 | 
			
		||||
    set(NLOHMANN_NATVIS_FILE "nlohmann_json.natvis")
 | 
			
		||||
    target_sources(
 | 
			
		||||
| 
						 | 
				
			
			@ -62,7 +64,7 @@ if (MSVC AND CMAKE_VERSION VERSION_GREATER "3.2.2")
 | 
			
		|||
            $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/${NLOHMANN_NATVIS_FILE}>  
 | 
			
		||||
    )
 | 
			
		||||
endif()
 | 
			
		||||
           
 | 
			
		||||
 | 
			
		||||
##
 | 
			
		||||
## TESTS
 | 
			
		||||
## create and configure the unit test target
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,9 +1,9 @@
 | 
			
		|||
cmake_minimum_required(VERSION 3.0)
 | 
			
		||||
cmake_minimum_required(VERSION 3.8)
 | 
			
		||||
project(JSON_Benchmarks LANGUAGES CXX)
 | 
			
		||||
 | 
			
		||||
# set compiler flags
 | 
			
		||||
if((CMAKE_CXX_COMPILER_ID MATCHES GNU) OR (CMAKE_CXX_COMPILER_ID MATCHES Clang))
 | 
			
		||||
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -flto -DNDEBUG -O3")
 | 
			
		||||
   set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -flto -DNDEBUG -O3")
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
# configure Google Benchmarks
 | 
			
		||||
| 
						 | 
				
			
			@ -23,4 +23,5 @@ file(COPY ${CMAKE_SOURCE_DIR}/../test/data/regression/floats.json
 | 
			
		|||
 | 
			
		||||
# benchmark binary
 | 
			
		||||
add_executable(json_benchmarks src/benchmarks.cpp)
 | 
			
		||||
target_compile_features(json_benchmarks PRIVATE cxx_std_11)
 | 
			
		||||
target_link_libraries(json_benchmarks benchmark ${CMAKE_THREAD_LIBS_INIT})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,8 +17,8 @@ int main()
 | 
			
		|||
 | 
			
		||||
    // output values and comparisons
 | 
			
		||||
    std::cout << std::boolalpha;
 | 
			
		||||
    std::cout << array_1 << " == " << array_2 << " " << (array_1 > array_2) << '\n';
 | 
			
		||||
    std::cout << object_1 << " == " << object_2 << " " << (object_1 > object_2) << '\n';
 | 
			
		||||
    std::cout << number_1 << " == " << number_2 << " " << (number_1 > number_2) << '\n';
 | 
			
		||||
    std::cout << string_1 << " == " << string_2 << " " << (string_1 > string_2) << '\n';
 | 
			
		||||
    std::cout << array_1 << " > " << array_2 << " " << (array_1 > array_2) << '\n';
 | 
			
		||||
    std::cout << object_1 << " > " << object_2 << " " << (object_1 > object_2) << '\n';
 | 
			
		||||
    std::cout << number_1 << " > " << number_2 << " " << (number_1 > number_2) << '\n';
 | 
			
		||||
    std::cout << string_1 << " > " << string_2 << " " << (string_1 > string_2) << '\n';
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
<a target="_blank" href="https://wandbox.org/permlink/yiz7oCHVpFHSALB1"><b>online</b></a>
 | 
			
		||||
<a target="_blank" href="https://wandbox.org/permlink/ntF7DMzC85gbQKHu"><b>online</b></a>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
[1,2,3] == [1,2,4] false
 | 
			
		||||
{"A":"a","B":"b"} == {"A":"a","B":"b"} false
 | 
			
		||||
17 == 17.0000000000001 false
 | 
			
		||||
"foo" == "bar" true
 | 
			
		||||
[1,2,3] > [1,2,4] false
 | 
			
		||||
{"A":"a","B":"b"} > {"A":"a","B":"b"} false
 | 
			
		||||
17 > 17.0000000000001 false
 | 
			
		||||
"foo" > "bar" true
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,9 +149,9 @@ class binary_writer
 | 
			
		|||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            case value_t::number_float: // Double-Precision Float
 | 
			
		||||
            case value_t::number_float:
 | 
			
		||||
            {
 | 
			
		||||
                oa->write_character(static_cast<CharType>(0xFB));
 | 
			
		||||
                oa->write_character(get_cbor_float_prefix(j.m_value.number_float));
 | 
			
		||||
                write_number(j.m_value.number_float);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -409,9 +409,9 @@ class binary_writer
 | 
			
		|||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            case value_t::number_float: // float 64
 | 
			
		||||
            case value_t::number_float:
 | 
			
		||||
            {
 | 
			
		||||
                oa->write_character(static_cast<CharType>(0xCB));
 | 
			
		||||
                oa->write_character(get_msgpack_float_prefix(j.m_value.number_float));
 | 
			
		||||
                write_number(j.m_value.number_float);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -588,7 +588,7 @@ class binary_writer
 | 
			
		|||
                if (use_type and not j.m_value.array->empty())
 | 
			
		||||
                {
 | 
			
		||||
                    assert(use_count);
 | 
			
		||||
                    const char first_prefix = ubjson_prefix(j.front());
 | 
			
		||||
                    const CharType first_prefix = ubjson_prefix(j.front());
 | 
			
		||||
                    const bool same_prefix = std::all_of(j.begin() + 1, j.end(),
 | 
			
		||||
                                                         [this, first_prefix](const BasicJsonType & v)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -599,7 +599,7 @@ class binary_writer
 | 
			
		|||
                    {
 | 
			
		||||
                        prefix_required = false;
 | 
			
		||||
                        oa->write_character(static_cast<CharType>('$'));
 | 
			
		||||
                        oa->write_character(static_cast<CharType>(first_prefix));
 | 
			
		||||
                        oa->write_character(first_prefix);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -633,7 +633,7 @@ class binary_writer
 | 
			
		|||
                if (use_type and not j.m_value.object->empty())
 | 
			
		||||
                {
 | 
			
		||||
                    assert(use_count);
 | 
			
		||||
                    const char first_prefix = ubjson_prefix(j.front());
 | 
			
		||||
                    const CharType first_prefix = ubjson_prefix(j.front());
 | 
			
		||||
                    const bool same_prefix = std::all_of(j.begin(), j.end(),
 | 
			
		||||
                                                         [this, first_prefix](const BasicJsonType & v)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -644,7 +644,7 @@ class binary_writer
 | 
			
		|||
                    {
 | 
			
		||||
                        prefix_required = false;
 | 
			
		||||
                        oa->write_character(static_cast<CharType>('$'));
 | 
			
		||||
                        oa->write_character(static_cast<CharType>(first_prefix));
 | 
			
		||||
                        oa->write_character(first_prefix);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -712,7 +712,7 @@ class binary_writer
 | 
			
		|||
    {
 | 
			
		||||
        if (add_prefix)
 | 
			
		||||
        {
 | 
			
		||||
            oa->write_character(static_cast<CharType>('D'));  // float64
 | 
			
		||||
            oa->write_character(get_ubjson_float_prefix(n));
 | 
			
		||||
        }
 | 
			
		||||
        write_number(n);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -833,7 +833,7 @@ class binary_writer
 | 
			
		|||
          write_number_with_ubjson_prefix. Therefore, we return 'L' for any
 | 
			
		||||
          value that does not fit the previous limits.
 | 
			
		||||
    */
 | 
			
		||||
    char ubjson_prefix(const BasicJsonType& j) const noexcept
 | 
			
		||||
    CharType ubjson_prefix(const BasicJsonType& j) const noexcept
 | 
			
		||||
    {
 | 
			
		||||
        switch (j.type())
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -892,7 +892,7 @@ class binary_writer
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            case value_t::number_float:
 | 
			
		||||
                return 'D';
 | 
			
		||||
                return get_ubjson_float_prefix(j.m_value.number_float);
 | 
			
		||||
 | 
			
		||||
            case value_t::string:
 | 
			
		||||
                return 'S';
 | 
			
		||||
| 
						 | 
				
			
			@ -908,6 +908,36 @@ class binary_writer
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_cbor_float_prefix(float)
 | 
			
		||||
    {
 | 
			
		||||
        return static_cast<CharType>(0xFA);  // Single-Precision Float
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_cbor_float_prefix(double)
 | 
			
		||||
    {
 | 
			
		||||
        return static_cast<CharType>(0xFB);  // Double-Precision Float
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_msgpack_float_prefix(float)
 | 
			
		||||
    {
 | 
			
		||||
        return static_cast<CharType>(0xCA);  // float 32
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_msgpack_float_prefix(double)
 | 
			
		||||
    {
 | 
			
		||||
        return static_cast<CharType>(0xCB);  // float 64
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_ubjson_float_prefix(float)
 | 
			
		||||
    {
 | 
			
		||||
        return 'd';  // float 32
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_ubjson_float_prefix(double)
 | 
			
		||||
    {
 | 
			
		||||
        return 'D';  // float 64
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  private:
 | 
			
		||||
    /// whether we can assume little endianess
 | 
			
		||||
    const bool is_little_endian = binary_reader<BasicJsonType>::little_endianess();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7238,9 +7238,9 @@ class binary_writer
 | 
			
		|||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            case value_t::number_float: // Double-Precision Float
 | 
			
		||||
            case value_t::number_float:
 | 
			
		||||
            {
 | 
			
		||||
                oa->write_character(static_cast<CharType>(0xFB));
 | 
			
		||||
                oa->write_character(get_cbor_float_prefix(j.m_value.number_float));
 | 
			
		||||
                write_number(j.m_value.number_float);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -7498,9 +7498,9 @@ class binary_writer
 | 
			
		|||
                break;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            case value_t::number_float: // float 64
 | 
			
		||||
            case value_t::number_float:
 | 
			
		||||
            {
 | 
			
		||||
                oa->write_character(static_cast<CharType>(0xCB));
 | 
			
		||||
                oa->write_character(get_msgpack_float_prefix(j.m_value.number_float));
 | 
			
		||||
                write_number(j.m_value.number_float);
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			@ -7677,7 +7677,7 @@ class binary_writer
 | 
			
		|||
                if (use_type and not j.m_value.array->empty())
 | 
			
		||||
                {
 | 
			
		||||
                    assert(use_count);
 | 
			
		||||
                    const char first_prefix = ubjson_prefix(j.front());
 | 
			
		||||
                    const CharType first_prefix = ubjson_prefix(j.front());
 | 
			
		||||
                    const bool same_prefix = std::all_of(j.begin() + 1, j.end(),
 | 
			
		||||
                                                         [this, first_prefix](const BasicJsonType & v)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -7688,7 +7688,7 @@ class binary_writer
 | 
			
		|||
                    {
 | 
			
		||||
                        prefix_required = false;
 | 
			
		||||
                        oa->write_character(static_cast<CharType>('$'));
 | 
			
		||||
                        oa->write_character(static_cast<CharType>(first_prefix));
 | 
			
		||||
                        oa->write_character(first_prefix);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -7722,7 +7722,7 @@ class binary_writer
 | 
			
		|||
                if (use_type and not j.m_value.object->empty())
 | 
			
		||||
                {
 | 
			
		||||
                    assert(use_count);
 | 
			
		||||
                    const char first_prefix = ubjson_prefix(j.front());
 | 
			
		||||
                    const CharType first_prefix = ubjson_prefix(j.front());
 | 
			
		||||
                    const bool same_prefix = std::all_of(j.begin(), j.end(),
 | 
			
		||||
                                                         [this, first_prefix](const BasicJsonType & v)
 | 
			
		||||
                    {
 | 
			
		||||
| 
						 | 
				
			
			@ -7733,7 +7733,7 @@ class binary_writer
 | 
			
		|||
                    {
 | 
			
		||||
                        prefix_required = false;
 | 
			
		||||
                        oa->write_character(static_cast<CharType>('$'));
 | 
			
		||||
                        oa->write_character(static_cast<CharType>(first_prefix));
 | 
			
		||||
                        oa->write_character(first_prefix);
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -7801,7 +7801,7 @@ class binary_writer
 | 
			
		|||
    {
 | 
			
		||||
        if (add_prefix)
 | 
			
		||||
        {
 | 
			
		||||
            oa->write_character(static_cast<CharType>('D'));  // float64
 | 
			
		||||
            oa->write_character(get_ubjson_float_prefix(n));
 | 
			
		||||
        }
 | 
			
		||||
        write_number(n);
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -7922,7 +7922,7 @@ class binary_writer
 | 
			
		|||
          write_number_with_ubjson_prefix. Therefore, we return 'L' for any
 | 
			
		||||
          value that does not fit the previous limits.
 | 
			
		||||
    */
 | 
			
		||||
    char ubjson_prefix(const BasicJsonType& j) const noexcept
 | 
			
		||||
    CharType ubjson_prefix(const BasicJsonType& j) const noexcept
 | 
			
		||||
    {
 | 
			
		||||
        switch (j.type())
 | 
			
		||||
        {
 | 
			
		||||
| 
						 | 
				
			
			@ -7981,7 +7981,7 @@ class binary_writer
 | 
			
		|||
            }
 | 
			
		||||
 | 
			
		||||
            case value_t::number_float:
 | 
			
		||||
                return 'D';
 | 
			
		||||
                return get_ubjson_float_prefix(j.m_value.number_float);
 | 
			
		||||
 | 
			
		||||
            case value_t::string:
 | 
			
		||||
                return 'S';
 | 
			
		||||
| 
						 | 
				
			
			@ -7997,6 +7997,36 @@ class binary_writer
 | 
			
		|||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_cbor_float_prefix(float)
 | 
			
		||||
    {
 | 
			
		||||
        return static_cast<CharType>(0xFA);  // Single-Precision Float
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_cbor_float_prefix(double)
 | 
			
		||||
    {
 | 
			
		||||
        return static_cast<CharType>(0xFB);  // Double-Precision Float
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_msgpack_float_prefix(float)
 | 
			
		||||
    {
 | 
			
		||||
        return static_cast<CharType>(0xCA);  // float 32
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_msgpack_float_prefix(double)
 | 
			
		||||
    {
 | 
			
		||||
        return static_cast<CharType>(0xCB);  // float 64
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_ubjson_float_prefix(float)
 | 
			
		||||
    {
 | 
			
		||||
        return 'd';  // float 32
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    static constexpr CharType get_ubjson_float_prefix(double)
 | 
			
		||||
    {
 | 
			
		||||
        return 'D';  // float 64
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
  private:
 | 
			
		||||
    /// whether we can assume little endianess
 | 
			
		||||
    const bool is_little_endian = binary_reader<BasicJsonType>::little_endianess();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,15 +6,14 @@ option(JSON_Coverage "Build test suite with coverage information" OFF)
 | 
			
		|||
if(JSON_Sanitizer)
 | 
			
		||||
    message(STATUS "Building test suite with Clang sanitizer")
 | 
			
		||||
    if(NOT MSVC)
 | 
			
		||||
        set(CMAKE_CXX_FLAGS "-std=c++11 -g -O2 -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer")
 | 
			
		||||
        set(CMAKE_CXX_FLAGS "-g -O2 -fsanitize=address -fsanitize=undefined -fno-omit-frame-pointer")
 | 
			
		||||
    endif()
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
if(JSON_Valgrind)
 | 
			
		||||
    find_program(CMAKE_MEMORYCHECK_COMMAND valgrind)
 | 
			
		||||
    message(STATUS "Executing test suite with Valgrind (${CMAKE_MEMORYCHECK_COMMAND})")
 | 
			
		||||
    set(MEMORYCHECK_COMMAND_OPTIONS "--error-exitcode=1 --leak-check=full")
 | 
			
		||||
    set(memcheck_command "${CMAKE_MEMORYCHECK_COMMAND} ${CMAKE_MEMORYCHECK_COMMAND_OPTIONS}")
 | 
			
		||||
    set(memcheck_command "${CMAKE_MEMORYCHECK_COMMAND} ${CMAKE_MEMORYCHECK_COMMAND_OPTIONS} --error-exitcode=1 --leak-check=full")
 | 
			
		||||
    separate_arguments(memcheck_command)
 | 
			
		||||
endif()
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -62,11 +61,10 @@ add_library(catch_main OBJECT
 | 
			
		|||
    "src/unit.cpp"
 | 
			
		||||
)
 | 
			
		||||
set_target_properties(catch_main PROPERTIES
 | 
			
		||||
    CXX_STANDARD 11
 | 
			
		||||
    CXX_STANDARD_REQUIRED ON
 | 
			
		||||
    COMPILE_DEFINITIONS "$<$<CXX_COMPILER_ID:MSVC>:_SCL_SECURE_NO_WARNINGS>"
 | 
			
		||||
    COMPILE_OPTIONS "$<$<CXX_COMPILER_ID:MSVC>:/EHsc;$<$<CONFIG:Release>:/Od>>"
 | 
			
		||||
)
 | 
			
		||||
target_compile_features(catch_main PUBLIC cxx_std_11)
 | 
			
		||||
target_include_directories(catch_main PRIVATE "thirdparty/catch")
 | 
			
		||||
 | 
			
		||||
# https://stackoverflow.com/questions/2368811/how-to-set-warning-level-in-cmake
 | 
			
		||||
| 
						 | 
				
			
			@ -96,13 +94,12 @@ foreach(file ${files})
 | 
			
		|||
 | 
			
		||||
    add_executable(${testcase} $<TARGET_OBJECTS:catch_main> ${file})
 | 
			
		||||
    set_target_properties(${testcase} PROPERTIES
 | 
			
		||||
        CXX_STANDARD 11
 | 
			
		||||
        CXX_STANDARD_REQUIRED ON
 | 
			
		||||
        COMPILE_DEFINITIONS "$<$<CXX_COMPILER_ID:MSVC>:_SCL_SECURE_NO_WARNINGS>"
 | 
			
		||||
        COMPILE_OPTIONS "$<$<CXX_COMPILER_ID:MSVC>:/EHsc;$<$<CONFIG:Release>:/Od>>"
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    target_compile_definitions(${testcase} PRIVATE CATCH_CONFIG_FAST_COMPILE)
 | 
			
		||||
    target_compile_features(${testcase} PRIVATE cxx_std_11)
 | 
			
		||||
    target_include_directories(${testcase} PRIVATE "thirdparty/catch")
 | 
			
		||||
    target_include_directories(${testcase} PRIVATE "thirdparty/fifo_map")
 | 
			
		||||
    target_include_directories(${testcase} PRIVATE ${NLOHMANN_JSON_INCLUDE_BUILD_DIR})
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -114,6 +114,13 @@ struct nocopy
 | 
			
		|||
};
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
// for #1021
 | 
			
		||||
/////////////////////////////////////////////////////////////////////
 | 
			
		||||
 | 
			
		||||
using float_json = nlohmann::basic_json<std::map, std::vector, std::string, bool, std::int64_t, std::uint64_t, float>;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
TEST_CASE("regression tests")
 | 
			
		||||
{
 | 
			
		||||
    SECTION("issue #60 - Double quotation mark is not parsed correctly")
 | 
			
		||||
| 
						 | 
				
			
			@ -1597,4 +1604,15 @@ TEST_CASE("regression tests")
 | 
			
		|||
        auto j = json::parse(geojsonExample, cb, true);
 | 
			
		||||
        CHECK(j == json());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    SECTION("issue #1021 - to/from_msgpack only works with standard typization")
 | 
			
		||||
    {
 | 
			
		||||
        float_json j = 1000.0;
 | 
			
		||||
        CHECK(float_json::from_cbor(float_json::to_cbor(j)) == j);
 | 
			
		||||
        CHECK(float_json::from_msgpack(float_json::to_msgpack(j)) == j);
 | 
			
		||||
        CHECK(float_json::from_ubjson(float_json::to_ubjson(j)) == j);
 | 
			
		||||
 | 
			
		||||
        float_json j2 = {1000.0, 2000.0, 3000.0};
 | 
			
		||||
        CHECK(float_json::from_ubjson(float_json::to_ubjson(j2, true, true)) == j2);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue