From a5a756a20e37debd4e559b5fa0571004e07a58d1 Mon Sep 17 00:00:00 2001 From: Glen Fraser Date: Sun, 21 Apr 2019 20:07:19 +0200 Subject: [PATCH] Add pair_conversion registration helper with unit test --- .../dispatchkit/type_conversions.hpp | 17 ++++++++++++++ unittests/compiled_tests.cpp | 23 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/include/chaiscript/dispatchkit/type_conversions.hpp b/include/chaiscript/dispatchkit/type_conversions.hpp index 9d07ddaa..91ee1336 100644 --- a/include/chaiscript/dispatchkit/type_conversions.hpp +++ b/include/chaiscript/dispatchkit/type_conversions.hpp @@ -654,6 +654,23 @@ namespace chaiscript return chaiscript::make_shared>(user_type>(), user_type(), func); } + + template + Type_Conversion pair_conversion() + { + auto func = [](const Boxed_Value &t_bv) -> Boxed_Value { + const std::pair &from_pair = detail::Cast_Helper &>::cast(t_bv, nullptr); + + auto pair = std::make_pair( + detail::Cast_Helper::cast(from_pair.first, nullptr), + detail::Cast_Helper::cast(from_pair.second, nullptr) + ); + + return Boxed_Value(std::move(pair)); + }; + + return chaiscript::make_shared>(user_type>(), user_type>(), func); + } } diff --git a/unittests/compiled_tests.cpp b/unittests/compiled_tests.cpp index 76c31bc8..a5261655 100644 --- a/unittests/compiled_tests.cpp +++ b/unittests/compiled_tests.cpp @@ -996,6 +996,29 @@ TEST_CASE("Map conversions") } +TEST_CASE("Pair conversions") +{ + chaiscript::ChaiScript_Basic chai(create_chaiscript_stdlib(),create_chaiscript_parser()); + chai.add(chaiscript::pair_conversion()); + chai.add(chaiscript::pair_conversion()); + + { + const auto p = chai.eval>(R"cs( + Pair("chai", "script"); + )cs"); + CHECK(p.first == std::string{"chai"}); + CHECK(p.second == "script"); + } + { + const auto p = chai.eval>(R"cs( + Pair(5, 3.14); + )cs"); + CHECK(p.first == 5); + CHECK(p.second == Approx(3.14)); + } +} + + TEST_CASE("Parse floats with non-posix locale") { #ifdef CHAISCRIPT_MSVC