blob: 4d9b52161be97cf28165a0e8731be76762b34abd [file] [log] [blame]
mark a. foltzeca304d2023-01-25 13:45:44 -08001// Copyright 2023 The Chromium Authors
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "platform/base/byte_view.h"
6
7#include "gtest/gtest.h"
8
9namespace {
10
11constexpr char kSampleBytes[] = "googleplex";
12const uint8_t* kSampleData =
13 reinterpret_cast<const uint8_t* const>(&kSampleBytes[0]);
14constexpr size_t kSampleSize =
15 sizeof(kSampleBytes) - 1; // Ignore null terminator.
16
17} // namespace
18
19namespace openscreen {
20
21TEST(ByteViewTest, TestBasics) {
22 ByteView nullView;
23 EXPECT_EQ(nullView.data(), nullptr);
24 EXPECT_EQ(nullView.size(), size_t{0});
25 EXPECT_TRUE(nullView.empty());
26
27 ByteView googlePlex = ByteView(kSampleData, kSampleSize);
28 EXPECT_EQ(googlePlex.data(), kSampleData);
29 EXPECT_EQ(googlePlex.size(), kSampleSize);
30 EXPECT_FALSE(googlePlex.empty());
31
32 EXPECT_EQ(googlePlex[0], 'g');
33 EXPECT_EQ(googlePlex[9], 'x');
34
35 ByteView copyBytes = googlePlex;
36 EXPECT_EQ(copyBytes.data(), googlePlex.data());
37 EXPECT_EQ(copyBytes.size(), googlePlex.size());
38
39 ByteView firstBytes(googlePlex.first(4));
40 EXPECT_EQ(firstBytes.data(), googlePlex.data());
41 EXPECT_EQ(firstBytes.size(), size_t{4});
42 EXPECT_EQ(firstBytes[0], 'g');
43 EXPECT_EQ(firstBytes[3], 'g');
44
45 ByteView lastBytes(googlePlex.last(4));
46 EXPECT_EQ(lastBytes.data(), googlePlex.data() + 6);
47 EXPECT_EQ(lastBytes.size(), size_t{4});
48 EXPECT_EQ(lastBytes[0], 'p');
49 EXPECT_EQ(lastBytes[3], 'x');
50
51 ByteView middleBytes(googlePlex.subspan(2, 4));
52 EXPECT_EQ(middleBytes.data(), googlePlex.data() + 2);
53 EXPECT_EQ(middleBytes.size(), size_t{4});
54 EXPECT_EQ(middleBytes[0], 'o');
55 EXPECT_EQ(middleBytes[3], 'e');
56}
57
58TEST(ByteViewTest, TestIterators) {
59 ByteView googlePlex = ByteView(kSampleData, kSampleSize);
60 size_t idx = 0;
61
62 for (const uint8_t* it = googlePlex.begin(); it != googlePlex.end(); it++) {
63 EXPECT_EQ(*it, kSampleBytes[idx]);
64 idx++;
65 }
66}
67
68TEST(ByteViewTest, TestRemove) {
69 ByteView googlePlex = ByteView(kSampleData, kSampleSize);
70
71 googlePlex.remove_prefix(2);
72 EXPECT_EQ(googlePlex.size(), size_t{8});
73 EXPECT_EQ(googlePlex[0], 'o');
74
75 googlePlex.remove_suffix(2);
76 EXPECT_EQ(googlePlex.size(), size_t{6});
77 EXPECT_EQ(googlePlex[5], 'l');
78}
79
80} // namespace openscreen