File: test_endian.cpp

package info (click to toggle)
protozero 1.8.1-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 3,548 kB
  • sloc: cpp: 20,364; sh: 18; makefile: 14
file content (76 lines) | stat: -rw-r--r-- 2,039 bytes parent folder | download | duplicates (2)
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

#include <cstdint>
#include <limits>

#include <test.hpp>

#include <protozero/byteswap.hpp>

namespace {

int32_t check_swap_4(int32_t data) noexcept {
    protozero::byteswap_inplace(&data);
    protozero::byteswap_inplace(&data);
    return data;
}

int64_t check_swap_8(int64_t data) noexcept {
    protozero::byteswap_inplace(&data);
    protozero::byteswap_inplace(&data);
    return data;
}

} // anonymous namespace

TEST_CASE("byte swapping") {
    REQUIRE(0 == check_swap_4(0));
    REQUIRE(1 == check_swap_4(1));
    REQUIRE(-1 == check_swap_4(-1));
    REQUIRE(395503 == check_swap_4(395503));
    REQUIRE(-804022 == check_swap_4(-804022));
    REQUIRE(std::numeric_limits<int32_t>::max() == check_swap_4(std::numeric_limits<int32_t>::max()));
    REQUIRE(std::numeric_limits<int32_t>::min() == check_swap_4(std::numeric_limits<int32_t>::min()));

    REQUIRE(0 == check_swap_8(0));
    REQUIRE(1 == check_swap_8(1));
    REQUIRE(-1 == check_swap_8(-1));
    REQUIRE(395503LL == check_swap_8(395503LL));
    REQUIRE(-804022LL == check_swap_8(-804022LL));
    REQUIRE(3280329805LL == check_swap_8(3280329805LL));
    REQUIRE(-2489204041LL == check_swap_8(-2489204041LL));
    REQUIRE(std::numeric_limits<int64_t>::max() == check_swap_8(std::numeric_limits<int64_t>::max()));
    REQUIRE(std::numeric_limits<int64_t>::min() == check_swap_8(std::numeric_limits<int64_t>::min()));
}

TEST_CASE("byte swap uint32_t") {
    uint32_t a = 17;
    protozero::byteswap_inplace(&a);
    protozero::byteswap_inplace(&a);

    REQUIRE(17 == a);
}

TEST_CASE("byte swap uint64_t") {
    uint64_t a = 347529808;
    protozero::byteswap_inplace(&a);
    protozero::byteswap_inplace(&a);

    REQUIRE(347529808 == a);
}

TEST_CASE("byte swap double") {
    double a = 1.1;
    protozero::byteswap_inplace(&a);
    protozero::byteswap_inplace(&a);

    REQUIRE(a == Approx(1.1));
}

TEST_CASE("byte swap float") {
    float a = 1.1F;
    protozero::byteswap_inplace(&a);
    protozero::byteswap_inplace(&a);

    REQUIRE(a == Approx(1.1F));
}