]> git.proxmox.com Git - ceph.git/blame - ceph/src/arrow/cpp/src/arrow/util/key_value_metadata_test.cc
import quincy 17.2.0
[ceph.git] / ceph / src / arrow / cpp / src / arrow / util / key_value_metadata_test.cc
CommitLineData
1d09f67e
TL
1// Licensed to the Apache Software Foundation (ASF) under one
2// or more contributor license agreements. See the NOTICE file
3// distributed with this work for additional information
4// regarding copyright ownership. The ASF licenses this file
5// to you under the Apache License, Version 2.0 (the
6// "License"); you may not use this file except in compliance
7// with the License. You may obtain a copy of the License at
8//
9// http://www.apache.org/licenses/LICENSE-2.0
10//
11// Unless required by applicable law or agreed to in writing,
12// software distributed under the License is distributed on an
13// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14// KIND, either express or implied. See the License for the
15// specific language governing permissions and limitations
16// under the License.
17
18#include <algorithm>
19#include <memory>
20#include <string>
21#include <unordered_map>
22#include <vector>
23
24#include <gtest/gtest.h>
25
26#include "arrow/testing/gtest_util.h"
27#include "arrow/util/key_value_metadata.h"
28
29namespace arrow {
30
31TEST(KeyValueMetadataTest, SimpleConstruction) {
32 KeyValueMetadata metadata;
33 ASSERT_EQ(0, metadata.size());
34}
35
36TEST(KeyValueMetadataTest, StringVectorConstruction) {
37 std::vector<std::string> keys = {"foo", "bar"};
38 std::vector<std::string> values = {"bizz", "buzz"};
39
40 KeyValueMetadata metadata(keys, values);
41 ASSERT_EQ("foo", metadata.key(0));
42 ASSERT_EQ("bar", metadata.key(1));
43 ASSERT_EQ("bizz", metadata.value(0));
44 ASSERT_EQ("buzz", metadata.value(1));
45 ASSERT_EQ(2, metadata.size());
46
47 std::shared_ptr<KeyValueMetadata> metadata2 =
48 key_value_metadata({"foo", "bar"}, {"bizz", "buzz"});
49 ASSERT_TRUE(metadata.Equals(*metadata2));
50}
51
52TEST(KeyValueMetadataTest, StringMapConstruction) {
53 std::unordered_map<std::string, std::string> pairs = {{"foo", "bizz"}, {"bar", "buzz"}};
54 std::unordered_map<std::string, std::string> result_map;
55 result_map.reserve(pairs.size());
56
57 KeyValueMetadata metadata(pairs);
58 metadata.ToUnorderedMap(&result_map);
59 ASSERT_EQ(pairs, result_map);
60 ASSERT_EQ(2, metadata.size());
61}
62
63TEST(KeyValueMetadataTest, StringAppend) {
64 std::vector<std::string> keys = {"foo", "bar"};
65 std::vector<std::string> values = {"bizz", "buzz"};
66
67 KeyValueMetadata metadata(keys, values);
68 ASSERT_EQ("foo", metadata.key(0));
69 ASSERT_EQ("bar", metadata.key(1));
70 ASSERT_EQ("bizz", metadata.value(0));
71 ASSERT_EQ("buzz", metadata.value(1));
72 ASSERT_EQ(2, metadata.size());
73
74 metadata.Append("purple", "orange");
75 metadata.Append("blue", "red");
76
77 ASSERT_EQ("purple", metadata.key(2));
78 ASSERT_EQ("blue", metadata.key(3));
79
80 ASSERT_EQ("orange", metadata.value(2));
81 ASSERT_EQ("red", metadata.value(3));
82}
83
84TEST(KeyValueMetadataTest, Copy) {
85 std::vector<std::string> keys = {"foo", "bar"};
86 std::vector<std::string> values = {"bizz", "buzz"};
87
88 KeyValueMetadata metadata(keys, values);
89 auto metadata2 = metadata.Copy();
90 ASSERT_TRUE(metadata.Equals(*metadata2));
91}
92
93TEST(KeyValueMetadataTest, Merge) {
94 std::vector<std::string> keys1 = {"foo", "bar"};
95 std::vector<std::string> values1 = {"bizz", "buzz"};
96 KeyValueMetadata metadata(keys1, values1);
97
98 std::vector<std::string> keys2 = {"bar", "baz"};
99 std::vector<std::string> values2 = {"bozz", "bezz"};
100 KeyValueMetadata metadata2(keys2, values2);
101
102 std::vector<std::string> keys3 = {"foo", "bar", "baz"};
103 std::vector<std::string> values3 = {"bizz", "bozz", "bezz"};
104 KeyValueMetadata expected(keys3, values3);
105
106 auto result = metadata.Merge(metadata2);
107 ASSERT_TRUE(result->Equals(expected));
108}
109
110TEST(KeyValueMetadataTest, FindKey) {
111 std::vector<std::string> keys = {"foo", "bar"};
112 std::vector<std::string> values = {"bizz", "buzz"};
113 KeyValueMetadata metadata(keys, values);
114
115 ASSERT_EQ(0, metadata.FindKey("foo"));
116 ASSERT_EQ(1, metadata.FindKey("bar"));
117 ASSERT_EQ(-1, metadata.FindKey("baz"));
118}
119
120TEST(KeyValueMetadataTest, Equals) {
121 std::vector<std::string> keys = {"foo", "bar"};
122 std::vector<std::string> values = {"bizz", "buzz"};
123
124 KeyValueMetadata metadata(keys, values);
125 KeyValueMetadata metadata2(keys, values);
126 KeyValueMetadata metadata3(keys, {"buzz", "bizz"});
127
128 ASSERT_TRUE(metadata.Equals(metadata2));
129 ASSERT_FALSE(metadata.Equals(metadata3));
130
131 // Key / value pairs are semantically unordered
132 std::reverse(keys.begin(), keys.end());
133 KeyValueMetadata metadata4(keys, values);
134 std::reverse(values.begin(), values.end());
135 KeyValueMetadata metadata5(keys, values);
136
137 ASSERT_FALSE(metadata.Equals(metadata4));
138 ASSERT_TRUE(metadata.Equals(metadata5));
139
140 KeyValueMetadata metadata6({"foo"}, {"bizz"});
141 ASSERT_FALSE(metadata.Equals(metadata6));
142}
143
144TEST(KeyValueMetadataTest, ToString) {
145 std::vector<std::string> keys = {"foo", "bar"};
146 std::vector<std::string> values = {"bizz", "buzz"};
147
148 KeyValueMetadata metadata(keys, values);
149
150 std::string result = metadata.ToString();
151 std::string expected = R"(
152-- metadata --
153foo: bizz
154bar: buzz)";
155
156 ASSERT_EQ(expected, result);
157}
158
159TEST(KeyValueMetadataTest, SortedPairs) {
160 std::vector<std::string> keys = {"foo", "bar"};
161 std::vector<std::string> values = {"bizz", "buzz"};
162
163 KeyValueMetadata metadata1(keys, values);
164 std::reverse(keys.begin(), keys.end());
165 KeyValueMetadata metadata2(keys, values);
166 std::reverse(values.begin(), values.end());
167 KeyValueMetadata metadata3(keys, values);
168
169 std::vector<std::pair<std::string, std::string>> expected = {{"bar", "buzz"},
170 {"foo", "bizz"}};
171 ASSERT_EQ(metadata1.sorted_pairs(), expected);
172 ASSERT_EQ(metadata3.sorted_pairs(), expected);
173 expected = {{"bar", "bizz"}, {"foo", "buzz"}};
174 ASSERT_EQ(metadata2.sorted_pairs(), expected);
175}
176
177TEST(KeyValueMetadataTest, Delete) {
178 std::vector<std::string> keys = {"aa", "bb", "cc", "dd", "ee", "ff", "gg"};
179 std::vector<std::string> values = {"1", "2", "3", "4", "5", "6", "7"};
180
181 {
182 KeyValueMetadata metadata(keys, values);
183 ASSERT_OK(metadata.Delete("cc"));
184 ASSERT_TRUE(metadata.Equals(KeyValueMetadata({"aa", "bb", "dd", "ee", "ff", "gg"},
185 {"1", "2", "4", "5", "6", "7"})));
186
187 ASSERT_OK(metadata.Delete(3));
188 ASSERT_TRUE(metadata.Equals(
189 KeyValueMetadata({"aa", "bb", "dd", "ff", "gg"}, {"1", "2", "4", "6", "7"})));
190 }
191 {
192 KeyValueMetadata metadata(keys, values);
193 ASSERT_OK(metadata.DeleteMany({2, 5}));
194 ASSERT_TRUE(metadata.Equals(
195 KeyValueMetadata({"aa", "bb", "dd", "ee", "gg"}, {"1", "2", "4", "5", "7"})));
196
197 ASSERT_OK(metadata.DeleteMany({}));
198 ASSERT_TRUE(metadata.Equals(
199 KeyValueMetadata({"aa", "bb", "dd", "ee", "gg"}, {"1", "2", "4", "5", "7"})));
200 }
201 {
202 KeyValueMetadata metadata(keys, values);
203 ASSERT_OK(metadata.DeleteMany({0, 6, 5, 2}));
204 ASSERT_TRUE(metadata.Equals(KeyValueMetadata({"bb", "dd", "ee"}, {"2", "4", "5"})));
205
206 ASSERT_OK(metadata.DeleteMany({}));
207 ASSERT_TRUE(metadata.Equals(KeyValueMetadata({"bb", "dd", "ee"}, {"2", "4", "5"})));
208 }
209}
210
211} // namespace arrow