Celestia

Форк
0
/
hash_test.cpp 
106 строк · 3.4 Кб
1
#include <memory>
2
#include <utility>
3

4
#include <celengine/hash.h>
5
#include <celengine/value.h>
6
#include <celutil/color.h>
7

8
#include <doctest.h>
9

10
constexpr const double EPSILON = 1.0 / 255.0;
11

12
inline float C(float n)
13
{
14
	return static_cast<float>(static_cast<unsigned char>(n * 255.99f)) / 255.0f;
15
}
16

17
TEST_SUITE_BEGIN("AssociativeArray");
18

19
TEST_CASE("AssociativeArray")
20
{
21
    SUBCASE("Colors")
22
    {
23
        SUBCASE("Defined as Vector3")
24
        {
25
            AssociativeArray h;
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)));
31

32
            auto val = h.getValue("color");
33
            REQUIRE(val->getType() == ValueType::ArrayType);
34

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);
40

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));
47
        }
48

49
        SUBCASE("Defined as Vector4")
50
        {
51
            AssociativeArray h;
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)));
58

59
            auto val = h.getValue("color");
60
            REQUIRE(val->getType() == ValueType::ArrayType);
61

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);
68

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)));
75

76
        }
77

78
        SUBCASE("Defined as rrggbb string")
79
        {
80
            AssociativeArray h;
81
            h.addValue("color", Value("#123456"));
82

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));
89
        }
90

91
        SUBCASE("Defined as rrggbbaa string")
92
        {
93
            AssociativeArray h;
94
            h.addValue("color", Value("#12345678"));
95

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));
102
        }
103
    }
104
}
105

106
TEST_SUITE_END();
107

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.