File: binaryreader.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 (90 lines) | stat: -rw-r--r-- 3,571 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
#include "format.hpp"

#include <components/serialization/binaryreader.hpp>

#include <gmock/gmock.h>
#include <gtest/gtest.h>

#include <cstdint>
#include <cstring>
#include <vector>

namespace
{
    using namespace testing;
    using namespace Serialization;
    using namespace SerializationTesting;

    TEST(DetourNavigatorSerializationBinaryReaderTest, shouldReadArithmeticTypeValue)
    {
        std::uint32_t value = 42;
        std::vector<std::byte> data(sizeof(value));
        std::memcpy(data.data(), &value, sizeof(value));
        BinaryReader binaryReader(data.data(), data.data() + data.size());
        std::uint32_t result = 0;
        const TestFormat<Mode::Read> format;
        binaryReader(format, result);
        EXPECT_EQ(result, 42u);
    }

    TEST(DetourNavigatorSerializationBinaryReaderTest, shouldReadArithmeticTypeRangeValue)
    {
        const std::size_t count = 3;
        std::vector<std::byte> data(sizeof(std::size_t) + count * sizeof(std::uint32_t));
        std::memcpy(data.data(), &count, sizeof(count));
        const std::uint32_t value1 = 960900021;
        std::memcpy(data.data() + sizeof(count), &value1, sizeof(std::uint32_t));
        const std::uint32_t value2 = 1235496234;
        std::memcpy(data.data() + sizeof(count) + sizeof(std::uint32_t), &value2, sizeof(std::uint32_t));
        const std::uint32_t value3 = 2342038092;
        std::memcpy(data.data() + sizeof(count) + 2 * sizeof(std::uint32_t), &value3, sizeof(std::uint32_t));
        BinaryReader binaryReader(data.data(), data.data() + data.size());
        std::size_t resultCount = 0;
        const TestFormat<Mode::Read> format;
        binaryReader(format, resultCount);
        std::vector<std::uint32_t> result(resultCount);
        binaryReader(format, result.data(), result.size());
        EXPECT_THAT(result, ElementsAre(value1, value2, value3));
    }

    TEST(DetourNavigatorSerializationBinaryReaderTest, forNotEnoughDataForArithmeticTypeShouldThrowException)
    {
        std::vector<std::byte> data(3);
        BinaryReader binaryReader(data.data(), data.data() + data.size());
        std::uint32_t result = 0;
        const TestFormat<Mode::Read> format;
        EXPECT_THROW(binaryReader(format, result), std::runtime_error);
    }

    TEST(DetourNavigatorSerializationBinaryReaderTest, forNotEnoughDataForArithmeticTypeRangeShouldThrowException)
    {
        std::vector<std::byte> data(7);
        BinaryReader binaryReader(data.data(), data.data() + data.size());
        std::vector<std::uint32_t> values(2);
        const TestFormat<Mode::Read> format;
        EXPECT_THROW(binaryReader(format, values.data(), values.size()), std::runtime_error);
    }

    TEST(DetourNavigatorSerializationBinaryReaderTest, shouldSetPointerToCurrentBufferPosition)
    {
        std::vector<std::byte> data(8);
        BinaryReader binaryReader(data.data(), data.data() + data.size());
        const std::byte* ptr = nullptr;
        const TestFormat<Mode::Read> format;
        binaryReader(format, ptr);
        EXPECT_EQ(ptr, data.data());
    }

    TEST(DetourNavigatorSerializationBinaryReaderTest, shouldNotAdvanceAfterPointer)
    {
        std::vector<std::byte> data(8);
        BinaryReader binaryReader(data.data(), data.data() + data.size());
        const std::byte* ptr1 = nullptr;
        const std::byte* ptr2 = nullptr;
        const TestFormat<Mode::Read> format;
        binaryReader(format, ptr1);
        binaryReader(format, ptr2);
        EXPECT_EQ(ptr1, data.data());
        EXPECT_EQ(ptr2, data.data());
    }
}