summaryrefslogtreecommitdiffstats
path: root/test/value_test.cpp
blob: cd84165d09ff5fa8a715191be9e0e3d84150921a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <opentracing/value.h>
using namespace opentracing;

#define CATCH_CONFIG_MAIN
#include <opentracing/catch2/catch.hpp>

TEST_CASE("Value") {
  SECTION("Signed integers get converted to int64_t.") {
    Value v1(123);
    CHECK(v1.is<int64_t>());

    Value v2(static_cast<short>(123));
    CHECK(v2.is<int64_t>());
  }

  SECTION("Unsigned integers get converted to uint64_t.") {
    Value v1(123u);
    CHECK(v1.is<uint64_t>());

    Value v2(static_cast<unsigned short>(123));
    CHECK(v2.is<uint64_t>());
  }

  SECTION("Bool values are deduced as bool.") {
    Value v1(true);
    // Workaround for "disabled expansion of recursive macro" warning.
    const auto is_bool = v1.is<bool>();
    CHECK(is_bool);
  }

  SECTION("Floating point numbers are converted to double.") {
    Value v1(1.0);
    CHECK(v1.is<double>());
    Value v2(1.0f);
    CHECK(v2.is<double>());
  }

  SECTION("std::string values are deduced as std::string.") {
    Value v1(std::string("abc"));
    CHECK(v1.is<std::string>());
  }

  SECTION("c-string values are deduced as c-strings.") {
    Value v1("abc");
    CHECK(v1.is<const char*>());
  }

  SECTION("Complex values are permitted.") {
    Value v1(Values{Value(1), Value(2)});
    (void)v1;

    Value v2(Dictionary{{"abc", Value(123)}});
    (void)v2;
  }

  SECTION("Value types can be compared for equality.") {
    Value v1{1}, v2{2}, v3{1.0};
    CHECK(v1 == v1);
    CHECK(v1 != v2);
    CHECK(v1 != v3);
  }
}