aboutsummaryrefslogtreecommitdiffstats
path: root/nihil.ucl/tests/integer.cc
diff options
context:
space:
mode:
authorLexi Winter <lexi@le-fay.org>2025-07-01 17:07:04 +0100
committerLexi Winter <lexi@le-fay.org>2025-07-01 17:07:04 +0100
commit2e2d1bd3b6c7776b77c33b94f30ead89367a71e6 (patch)
tree54d37ffadf8e677938d9b7a28e4e9b71be1e75c1 /nihil.ucl/tests/integer.cc
parent36427c0966faa7aecd586b397ed9b845f18172f5 (diff)
downloadnihil-2e2d1bd3b6c7776b77c33b94f30ead89367a71e6.tar.gz
nihil-2e2d1bd3b6c7776b77c33b94f30ead89367a71e6.tar.bz2
add nihil.std
Diffstat (limited to 'nihil.ucl/tests/integer.cc')
-rw-r--r--nihil.ucl/tests/integer.cc247
1 files changed, 0 insertions, 247 deletions
diff --git a/nihil.ucl/tests/integer.cc b/nihil.ucl/tests/integer.cc
deleted file mode 100644
index 6584764..0000000
--- a/nihil.ucl/tests/integer.cc
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * This source code is released into the public domain.
- */
-
-#include <concepts>
-#include <cstdint>
-#include <string>
-
-#include <catch2/catch_test_macros.hpp>
-#include <ucl.h>
-
-import nihil.ucl;
-
-TEST_CASE("ucl: integer: invariants", "[ucl]")
-{
- using namespace nihil::ucl;
-
- static_assert(std::same_as<std::int64_t, integer::contained_type>);
- REQUIRE(integer::ucl_type == object_type::integer);
- REQUIRE(static_cast<::ucl_type>(integer::ucl_type) == UCL_INT);
-
- static_assert(std::destructible<integer>);
- static_assert(std::default_initializable<integer>);
- static_assert(std::move_constructible<integer>);
- static_assert(std::copy_constructible<integer>);
- static_assert(std::equality_comparable<integer>);
- static_assert(std::totally_ordered<integer>);
- static_assert(std::swappable<integer>);
-}
-
-TEST_CASE("ucl: integer: constructor", "[ucl]")
-{
- using namespace nihil::ucl;
-
- SECTION("default") {
- auto i = integer();
- REQUIRE(i == 0);
- }
-
- SECTION("with value") {
- auto i = integer(42);
- REQUIRE(i == 42);
- }
-}
-
-TEST_CASE("ucl: integer: literal", "[ucl]")
-{
- SECTION("with namespace nihil::ucl::literals") {
- using namespace nihil::ucl::literals;
-
- auto i = 42_ucl;
- REQUIRE(i.type() == nihil::ucl::object_type::integer);
- REQUIRE(i == 42);
- }
-
- SECTION("with namespace nihil::literals") {
- using namespace nihil::literals;
-
- auto i = 42_ucl;
- REQUIRE(i.type() == nihil::ucl::object_type::integer);
- REQUIRE(i == 42);
- }
-}
-
-TEST_CASE("ucl: integer: construct from UCL object", "[ucl]")
-{
- using namespace nihil::ucl;
-
- SECTION("ref, correct type") {
- auto uobj = ::ucl_object_fromint(42);
-
- auto i = integer(ref, uobj);
- REQUIRE(i == 42);
-
- ::ucl_object_unref(uobj);
- }
-
- SECTION("noref, correct type") {
- auto uobj = ::ucl_object_fromint(42);
-
- auto i = integer(noref, uobj);
- REQUIRE(i == 42);
- }
-
- SECTION("ref, wrong type") {
- auto uobj = ::ucl_object_frombool(true);
-
- REQUIRE_THROWS_AS(integer(ref, uobj), type_mismatch);
-
- ::ucl_object_unref(uobj);
- }
-
- SECTION("noref, wrong type") {
- auto uobj = ::ucl_object_frombool(true);
-
- REQUIRE_THROWS_AS(integer(noref, uobj), type_mismatch);
-
- ::ucl_object_unref(uobj);
- }
-}
-
-TEST_CASE("ucl: integer: make_integer", "[ucl]")
-{
- using namespace nihil::ucl;
-
- SECTION("default value") {
- auto i = make_integer().value();
- REQUIRE(i == 0);
- }
-
- SECTION("explicit value") {
- auto i = make_integer(42).value();
- REQUIRE(i == 42);
- }
-}
-
-TEST_CASE("ucl: integer: swap", "[ucl]")
-{
- // do not add using namespace nihil::ucl
-
- auto i1 = nihil::ucl::integer(1);
- auto i2 = nihil::ucl::integer(2);
-
- swap(i1, i2);
-
- REQUIRE(i1 == 2);
- REQUIRE(i2 == 1);
-}
-
-TEST_CASE("ucl: integer: value()", "[ucl]")
-{
- using namespace nihil::ucl;
-
- auto i = 42_ucl;
- REQUIRE(i.value() == 42);
-}
-
-TEST_CASE("ucl: integer: key()", "[ucl]")
-{
- using namespace nihil::ucl;
-
- SECTION("parsed with key") {
- auto obj = parse("an_int = 42").value();
- auto i = object_cast<integer>(obj["an_int"]).value();
- REQUIRE(i.key() == "an_int");
- }
-
- SECTION("bare integer, no key") {
- auto i = 42_ucl;
- REQUIRE(i.key() == "");
- }
-}
-
-TEST_CASE("ucl: integer: comparison", "[ucl]")
-{
- using namespace nihil::ucl;
-
- auto i = 42_ucl;
-
- SECTION("operator==") {
- REQUIRE(i == 42);
- REQUIRE(i == 42_ucl);
- }
-
- SECTION("operator!=") {
- REQUIRE(i != 1);
- REQUIRE(i != 1_ucl);
- }
-
- SECTION("operator<") {
- REQUIRE(i < 43);
- REQUIRE(i < 43_ucl);
- }
-
- SECTION("operator>") {
- REQUIRE(i > 1);
- REQUIRE(i > 1_ucl);
- }
-}
-
-TEST_CASE("ucl: integer: parse", "[ucl]")
-{
- using namespace nihil::ucl;
-
- auto obj = parse("value = 42").value();
-
- auto v = obj["value"];
- REQUIRE(v.key() == "value");
- REQUIRE(object_cast<integer>(v) == 42);
-}
-
-TEST_CASE("ucl: integer: parse and emit", "[ucl]")
-{
- using namespace nihil::ucl;
-
- auto ucl = parse("int = 42;").value();
-
- auto output = std::string();
- emit(ucl, emitter::configuration, std::back_inserter(output));
-
- REQUIRE(output == "int = 42;\n");
-}
-
-TEST_CASE("ucl: integer: format", "[ucl]")
-{
- using namespace nihil::ucl;
-
- SECTION("bare integer") {
- auto str = std::format("{}", 42_ucl);
- REQUIRE(str == "42");
- }
-
- SECTION("parsed integer") {
- auto obj = parse("int = 42;").value();
- auto i = object_cast<integer>(obj["int"]).value();
-
- auto str = std::format("{}", i);
- REQUIRE(str == "42");
- }
-
- SECTION("with format string") {
- auto str = std::format("{:-05}", 42_ucl);
- REQUIRE(str == "00042");
- }
-}
-
-TEST_CASE("ucl: integer: print to ostream", "[ucl]")
-{
- using namespace nihil::ucl;
-
- SECTION("bare integer") {
- auto strm = std::ostringstream();
- strm << 42_ucl;
-
- REQUIRE(strm.str() == "42");
- }
-
- SECTION("parsed integer") {
- auto obj = parse("int = 42;").value();
- auto i = object_cast<integer>(obj["int"]).value();
-
- auto strm = std::ostringstream();
- strm << i;
-
- REQUIRE(strm.str() == "42");
- }
-}