• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 The PDFium 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 "core/fxcrt/fixed_uninit_data_vector.h"
6 
7 #include <utility>
8 
9 #include "core/fxcrt/fixed_try_alloc_zeroed_data_vector.h"
10 #include "core/fxcrt/fixed_zeroed_data_vector.h"
11 #include "core/fxcrt/span_util.h"
12 #include "testing/gmock/include/gmock/gmock.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/base/containers/span.h"
15 
TEST(FixedUninitDataVector,NoData)16 TEST(FixedUninitDataVector, NoData) {
17   FixedUninitDataVector<int> vec;
18   EXPECT_EQ(0u, vec.size());
19   EXPECT_TRUE(vec.empty());
20   EXPECT_TRUE(vec.span().empty());
21   EXPECT_TRUE(vec.writable_span().empty());
22 }
23 
TEST(FixedUninitDataVector,WithData)24 TEST(FixedUninitDataVector, WithData) {
25   FixedUninitDataVector<int> vec(4);
26   EXPECT_FALSE(vec.empty());
27   EXPECT_EQ(4u, vec.size());
28   EXPECT_EQ(4u, vec.span().size());
29   EXPECT_EQ(4u, vec.writable_span().size());
30 
31   constexpr int kData[] = {1, 2, 3, 4};
32   fxcrt::spancpy(vec.writable_span(), pdfium::make_span(kData));
33   EXPECT_THAT(vec.span(), testing::ElementsAre(1, 2, 3, 4));
34 }
35 
TEST(FixedUninitDataVector,Move)36 TEST(FixedUninitDataVector, Move) {
37   FixedUninitDataVector<int> vec(4);
38   constexpr int kData[] = {1, 2, 3, 4};
39   ASSERT_EQ(4u, vec.writable_span().size());
40   fxcrt::spancpy(vec.writable_span(), pdfium::make_span(kData));
41   const int* const original_data_ptr = vec.span().data();
42 
43   FixedUninitDataVector<int> vec2(std::move(vec));
44   EXPECT_FALSE(vec2.empty());
45   EXPECT_EQ(4u, vec2.size());
46   EXPECT_EQ(4u, vec2.span().size());
47   EXPECT_EQ(4u, vec2.writable_span().size());
48   EXPECT_THAT(vec2.span(), testing::ElementsAre(1, 2, 3, 4));
49   EXPECT_EQ(vec2.span().data(), original_data_ptr);
50 
51   EXPECT_EQ(0u, vec.size());
52   EXPECT_TRUE(vec.empty());
53   EXPECT_TRUE(vec.span().empty());
54   EXPECT_TRUE(vec.writable_span().empty());
55 
56   vec = std::move(vec2);
57   EXPECT_FALSE(vec.empty());
58   EXPECT_EQ(4u, vec.size());
59   EXPECT_EQ(4u, vec.span().size());
60   EXPECT_EQ(4u, vec.writable_span().size());
61   EXPECT_THAT(vec.span(), testing::ElementsAre(1, 2, 3, 4));
62   EXPECT_EQ(vec.span().data(), original_data_ptr);
63 
64   EXPECT_EQ(0u, vec2.size());
65   EXPECT_TRUE(vec2.empty());
66   EXPECT_TRUE(vec2.span().empty());
67   EXPECT_TRUE(vec2.writable_span().empty());
68 }
69 
TEST(FixedUninitDataVector,AssignFromFixedZeroedDataVector)70 TEST(FixedUninitDataVector, AssignFromFixedZeroedDataVector) {
71   FixedUninitDataVector<int> vec;
72 
73   FixedZeroedDataVector<int> vec2(4);
74   constexpr int kData[] = {1, 2, 3, 4};
75   ASSERT_EQ(4u, vec2.writable_span().size());
76   fxcrt::spancpy(vec2.writable_span(), pdfium::make_span(kData));
77 
78   vec = std::move(vec2);
79   EXPECT_TRUE(vec2.empty());
80   EXPECT_EQ(4u, vec.span().size());
81   EXPECT_THAT(vec.span(), testing::ElementsAre(1, 2, 3, 4));
82 }
83 
TEST(FixedUninitDataVector,AssignFromFixedTryAllocZeroedDataVector)84 TEST(FixedUninitDataVector, AssignFromFixedTryAllocZeroedDataVector) {
85   FixedUninitDataVector<int> vec;
86 
87   FixedTryAllocZeroedDataVector<int> vec2(4);
88   constexpr int kData[] = {1, 2, 3, 4};
89   ASSERT_EQ(4u, vec2.writable_span().size());
90   fxcrt::spancpy(vec2.writable_span(), pdfium::make_span(kData));
91 
92   vec = std::move(vec2);
93   EXPECT_TRUE(vec2.empty());
94   EXPECT_EQ(4u, vec.span().size());
95   EXPECT_THAT(vec.span(), testing::ElementsAre(1, 2, 3, 4));
96 }
97