File: test_endianness.cpp

package info (click to toggle)
openmw 0.49.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 33,992 kB
  • sloc: cpp: 372,479; xml: 2,149; sh: 1,403; python: 797; makefile: 26
file content (124 lines) | stat: -rw-r--r-- 3,264 bytes parent folder | download
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
#include "components/misc/endianness.hpp"
#include <gtest/gtest.h>

struct EndiannessTest : public ::testing::Test
{
};

TEST_F(EndiannessTest, test_swap_endianness_inplace1)
{
    uint8_t zero = 0x00;
    uint8_t ff = 0xFF;
    uint8_t fortytwo = 0x42;
    uint8_t half = 128;

    Misc::swapEndiannessInplace(zero);
    EXPECT_EQ(zero, 0x00);

    Misc::swapEndiannessInplace(ff);
    EXPECT_EQ(ff, 0xFF);

    Misc::swapEndiannessInplace(fortytwo);
    EXPECT_EQ(fortytwo, 0x42);

    Misc::swapEndiannessInplace(half);
    EXPECT_EQ(half, 128);
}

TEST_F(EndiannessTest, test_swap_endianness_inplace2)
{
    uint16_t zero = 0x0000;
    uint16_t ffff = 0xFFFF;
    uint16_t n12 = 0x0102;
    uint16_t fortytwo = 0x0042;

    Misc::swapEndiannessInplace(zero);
    EXPECT_EQ(zero, 0x0000u);
    Misc::swapEndiannessInplace(zero);
    EXPECT_EQ(zero, 0x0000u);

    Misc::swapEndiannessInplace(ffff);
    EXPECT_EQ(ffff, 0xFFFFu);
    Misc::swapEndiannessInplace(ffff);
    EXPECT_EQ(ffff, 0xFFFFu);

    Misc::swapEndiannessInplace(n12);
    EXPECT_EQ(n12, 0x0201u);
    Misc::swapEndiannessInplace(n12);
    EXPECT_EQ(n12, 0x0102u);

    Misc::swapEndiannessInplace(fortytwo);
    EXPECT_EQ(fortytwo, 0x4200u);
    Misc::swapEndiannessInplace(fortytwo);
    EXPECT_EQ(fortytwo, 0x0042u);
}

TEST_F(EndiannessTest, test_swap_endianness_inplace4)
{
    uint32_t zero = 0x00000000;
    uint32_t n1234 = 0x01020304;
    uint32_t ffff = 0xFFFFFFFF;

    Misc::swapEndiannessInplace(zero);
    EXPECT_EQ(zero, 0x00000000u);
    Misc::swapEndiannessInplace(zero);
    EXPECT_EQ(zero, 0x00000000u);

    Misc::swapEndiannessInplace(n1234);
    EXPECT_EQ(n1234, 0x04030201u);
    Misc::swapEndiannessInplace(n1234);
    EXPECT_EQ(n1234, 0x01020304u);

    Misc::swapEndiannessInplace(ffff);
    EXPECT_EQ(ffff, 0xFFFFFFFFu);
    Misc::swapEndiannessInplace(ffff);
    EXPECT_EQ(ffff, 0xFFFFFFFFu);
}

TEST_F(EndiannessTest, test_swap_endianness_inplace8)
{
    uint64_t zero = 0x0000'0000'0000'0000;
    uint64_t n1234 = 0x0102'0304'0506'0708;
    uint64_t ffff = 0xFFFF'FFFF'FFFF'FFFF;

    Misc::swapEndiannessInplace(zero);
    EXPECT_EQ(zero, 0x0000'0000'0000'0000u);
    Misc::swapEndiannessInplace(zero);
    EXPECT_EQ(zero, 0x0000'0000'0000'0000u);

    Misc::swapEndiannessInplace(ffff);
    EXPECT_EQ(ffff, 0xFFFF'FFFF'FFFF'FFFFu);
    Misc::swapEndiannessInplace(ffff);
    EXPECT_EQ(ffff, 0xFFFF'FFFF'FFFF'FFFFu);

    Misc::swapEndiannessInplace(n1234);
    EXPECT_EQ(n1234, 0x0807'0605'0403'0201u);
    Misc::swapEndiannessInplace(n1234);
    EXPECT_EQ(n1234, 0x0102'0304'0506'0708u);
}

TEST_F(EndiannessTest, test_swap_endianness_inplace_float)
{
    const uint32_t original = 0x4023d70a;
    const uint32_t expected = 0x0ad72340;

    float number;
    memcpy(&number, &original, sizeof(original));

    Misc::swapEndiannessInplace(number);

    EXPECT_TRUE(!memcmp(&number, &expected, sizeof(expected)));
}

TEST_F(EndiannessTest, test_swap_endianness_inplace_double)
{
    const uint64_t original = 0x040047ae147ae147ul;
    const uint64_t expected = 0x47e17a14ae470004ul;

    double number;
    memcpy(&number, &original, sizeof(original));

    Misc::swapEndiannessInplace(number);

    EXPECT_TRUE(!memcmp(&number, &expected, sizeof(expected)));
}