4
#include <celengine/hash.h>
5
#include <celengine/value.h>
6
#include <celutil/color.h>
10
constexpr const double EPSILON = 1.0 / 255.0;
12
inline float C(float n)
14
return static_cast<float>(static_cast<unsigned char>(n * 255.99f)) / 255.0f;
17
TEST_SUITE_BEGIN("AssociativeArray");
19
TEST_CASE("AssociativeArray")
23
SUBCASE("Defined as Vector3")
26
auto ary = std::make_unique<ValueArray>();
27
ary->emplace_back(.23);
28
ary->emplace_back(.34);
29
ary->emplace_back(.45);
30
h.addValue("color", Value(std::move(ary)));
32
auto val = h.getValue("color");
33
REQUIRE(val->getType() == ValueType::ArrayType);
35
auto vec = h.getVector3<double>("color");
36
REQUIRE(vec.has_value());
37
REQUIRE(vec->x() == .23);
38
REQUIRE(vec->y() == .34);
39
REQUIRE(vec->z() == .45);
41
auto c = h.getColor("color");
42
REQUIRE(c.has_value());
43
REQUIRE(c->red() == doctest::Approx(C(.23f)));
44
REQUIRE(c->green() == doctest::Approx(C(.34f)));
45
REQUIRE(c->blue() == doctest::Approx(C(.45f)));
46
REQUIRE(c->alpha() == doctest::Approx(1.0));
49
SUBCASE("Defined as Vector4")
52
auto ary = std::make_unique<ValueArray>();
53
ary->emplace_back(.23);
54
ary->emplace_back(.34);
55
ary->emplace_back(.45);
56
ary->emplace_back(.56);
57
h.addValue("color", Value(std::move(ary)));
59
auto val = h.getValue("color");
60
REQUIRE(val->getType() == ValueType::ArrayType);
62
auto vec = h.getVector4<double>("color");
63
REQUIRE(vec.has_value());
64
REQUIRE(vec->x() == .23);
65
REQUIRE(vec->y() == .34);
66
REQUIRE(vec->z() == .45);
67
REQUIRE(vec->w() == .56);
69
auto c = h.getColor("color");
70
REQUIRE(c.has_value());
71
REQUIRE(c->red() == doctest::Approx(C(.23f)));
72
REQUIRE(c->green() == doctest::Approx(C(.34f)));
73
REQUIRE(c->blue() == doctest::Approx(C(.45f)));
74
REQUIRE(c->alpha() == doctest::Approx(C(.56f)));
78
SUBCASE("Defined as rrggbb string")
81
h.addValue("color", Value("#123456"));
83
auto c = h.getColor("color");
84
REQUIRE(c.has_value());
85
REQUIRE(c->red() == doctest::Approx(0x12 / 255.).epsilon(EPSILON));
86
REQUIRE(c->green() == doctest::Approx(0x34 / 255.).epsilon(EPSILON));
87
REQUIRE(c->blue() == doctest::Approx(0x56 / 255.).epsilon(EPSILON));
88
REQUIRE(c->alpha() == doctest::Approx(1.0).epsilon(EPSILON));
91
SUBCASE("Defined as rrggbbaa string")
94
h.addValue("color", Value("#12345678"));
96
auto c = h.getColor("color");
97
REQUIRE(c.has_value());
98
REQUIRE(c->red() == doctest::Approx(0x12 / 255.).epsilon(EPSILON));
99
REQUIRE(c->green() == doctest::Approx(0x34 / 255.).epsilon(EPSILON));
100
REQUIRE(c->blue() == doctest::Approx(0x56 / 255.).epsilon(EPSILON));
101
REQUIRE(c->alpha() == doctest::Approx(0x78 / 255.).epsilon(EPSILON));