4 #include "../subset_map.hpp"
6 Subset_Map<std::string, std::string> ssm;
8 string toString(std::vector<std::string> v);
9 string toString(std::vector<std::pair<std::string, std::vector<std::string>>> v);
10 void assertEqual(string std::sExpected, std::string sResult);
15 //@ssm[Set[1, 2]] = "Foo"
16 std::vector<std::string> s1;
21 //@ssm[Set["fizz", "fazz"]] = "Bar"
22 std::vector<std::string> s2;
27 //@ssm[Set[:foo, :bar]] = "Baz"
28 std::vector<std::string> s3;
33 //@ssm[Set[:foo, :bar, :baz]] = "Bang"
34 std::vector<std::string> s4;
40 //@ssm[Set[:bip, :bop, :blip]] = "Qux"
41 std::vector<std::string> s5;
44 s5.push_back(":blip");
47 //@ssm[Set[:bip, :bop]] = "Thram"
48 std::vector<std::string> s6;
54 void testEqualKeys() {
55 std::cout << "testEqualKeys" << std::endl;
57 //assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2])
58 std::vector<std::string> k1;
61 assertEqual("[[Foo, Set[1, 2]]]", toString(ssm.get_kv(k1)));
63 //assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz"])
64 std::vector<std::string> k2;
67 assertEqual("[[Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k2)));
69 std::cout << std::endl;
72 void testSubsetKeys() {
73 std::cout << "testSubsetKeys" << std::endl;
75 //assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[1, 2, "fuzz"])
76 std::vector<std::string> k1;
80 assertEqual("[[Foo, Set[1, 2]]]", toString(ssm.get_kv(k1)));
82 //assert_equal [["Bar", Set["fizz", "fazz"]]], @ssm.get(Set["fizz", "fazz", 3])
83 std::vector<std::string> k2;
87 assertEqual("[[Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k2)));
89 std::cout << std::endl;
92 void testSupersetKeys() {
93 std::cout << "testSupersetKeys" << std::endl;
95 //assert_equal [], @ssm.get(Set[1])
96 std::vector<std::string> k1;
98 assertEqual("[]", toString(ssm.get_kv(k1)));
100 //assert_equal [], @ssm.get(Set[2])
101 std::vector<std::string> k2;
103 assertEqual("[]", toString(ssm.get_kv(k2)));
105 //assert_equal [], @ssm.get(Set["fizz"])
106 std::vector<std::string> k3;
107 k3.push_back("fizz");
108 assertEqual("[]", toString(ssm.get_kv(k3)));
110 //assert_equal [], @ssm.get(Set["fazz"])
111 std::vector<std::string> k4;
112 k4.push_back("fazz");
113 assertEqual("[]", toString(ssm.get_kv(k4)));
115 std::cout << std::endl;
118 void testDisjointKeys() {
119 std::cout << "testDisjointKeys" << std::endl;
121 //assert_equal [], @ssm.get(Set[3, 4])
122 std::vector<std::string> k1;
125 assertEqual("[]", toString(ssm.get_kv(k1)));
127 //assert_equal [], @ssm.get(Set["fuzz", "frizz"])
128 std::vector<std::string> k2;
129 k2.push_back("fuzz");
130 k2.push_back("frizz");
131 assertEqual("[]", toString(ssm.get_kv(k2)));
133 //assert_equal [], @ssm.get(Set["gran", 15])
134 std::vector<std::string> k3;
135 k3.push_back("gran");
137 assertEqual("[]", toString(ssm.get_kv(k3)));
139 std::cout << std::endl;
142 void testSemiDisjointKeys() {
143 std::cout << "testSemiDisjointKeys" << std::endl;
145 //assert_equal [], @ssm.get(Set[2, 3])
146 std::vector<std::string> k1;
149 assertEqual("[]", toString(ssm.get_kv(k1)));
151 //assert_equal [], @ssm.get(Set["fizz", "fuzz"])
152 std::vector<std::string> k2;
153 k2.push_back("fizz");
154 k2.push_back("fuzz");
155 assertEqual("[]", toString(ssm.get_kv(k2)));
157 //assert_equal [], @ssm.get(Set[1, "fazz"])
158 std::vector<std::string> k3;
160 k3.push_back("fazz");
161 assertEqual("[]", toString(ssm.get_kv(k3)));
163 std::cout << std::endl;
166 void testEmptyKeySet() {
167 std::cout << "testEmptyKeySet" << std::endl;
169 //assert_raises(ArgumentError) {@ssm[Set[]] = "Fail"}
170 std::vector<std::string> s1;
174 catch (const char* &e) {
175 assertEqual("internal error: subset map keys may not be empty", e);
179 void testEmptyKeyGet() {
180 std::cout << "testEmptyKeyGet" << std::endl;
182 //assert_equal [], @ssm.get(Set[])
183 std::vector<std::string> k1;
184 assertEqual("[]", toString(ssm.get_kv(k1)));
186 std::cout << std::endl;
188 void testMultipleSubsets() {
189 std::cout << "testMultipleSubsets" << std::endl;
191 //assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, "fizz", "fazz"])
192 std::vector<std::string> k1;
195 k1.push_back("fizz");
196 k1.push_back("fazz");
197 assertEqual("[[Foo, Set[1, 2]], [Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k1)));
199 //assert_equal [["Foo", Set[1, 2]], ["Bar", Set["fizz", "fazz"]]], @ssm.get(Set[1, 2, 3, "fizz", "fazz", "fuzz"])
200 std::vector<std::string> k2;
204 k2.push_back("fizz");
205 k2.push_back("fazz");
206 k2.push_back("fuzz");
207 assertEqual("[[Foo, Set[1, 2]], [Bar, Set[fizz, fazz]]]", toString(ssm.get_kv(k2)));
209 //assert_equal [["Baz", Set[:foo, :bar]]], @ssm.get(Set[:foo, :bar])
210 std::vector<std::string> k3;
211 k3.push_back(":foo");
212 k3.push_back(":bar");
213 assertEqual("[[Baz, Set[:foo, :bar]]]", toString(ssm.get_kv(k3)));
215 //assert_equal [["Baz", Set[:foo, :bar]], ["Bang", Set[:foo, :bar, :baz]]], @ssm.get(Set[:foo, :bar, :baz])
216 std::vector<std::string> k4;
217 k4.push_back(":foo");
218 k4.push_back(":bar");
219 k4.push_back(":baz");
220 assertEqual("[[Baz, Set[:foo, :bar]], [Bang, Set[:foo, :bar, :baz]]]", toString(ssm.get_kv(k4)));
222 std::cout << std::endl;
224 void testBracketBracket() {
225 std::cout << "testBracketBracket" << std::endl;
227 //assert_equal ["Foo"], @ssm[Set[1, 2, "fuzz"]]
228 std::vector<std::string> k1;
231 k1.push_back("fuzz");
232 assertEqual("[Foo]", toString(ssm.get_v(k1)));
234 //assert_equal ["Baz", "Bang"], @ssm[Set[:foo, :bar, :baz]]
235 std::vector<std::string> k2;
236 k2.push_back(":foo");
237 k2.push_back(":bar");
238 k2.push_back(":baz");
239 assertEqual("[Baz, Bang]", toString(ssm.get_v(k2)));
241 std::cout << std::endl;
244 void testKeyOrder() {
245 std::cout << "testEqualKeys" << std::endl;
247 //assert_equal [["Foo", Set[1, 2]]], @ssm.get(Set[2, 1])
248 std::vector<std::string> k1;
251 assertEqual("[[Foo, Set[1, 2]]]", toString(ssm.get_kv(k1)));
253 std::cout << std::endl;
256 void testOrderPreserved() {
257 std::cout << "testOrderPreserved" << std::endl;
258 //@ssm[Set[10, 11, 12]] = 1
259 std::vector<std::string> s1;
265 //@ssm[Set[10, 11]] = 2
266 std::vector<std::string> s2;
272 std::vector<std::string> s3;
276 //@ssm[Set[11, 12]] = 4
277 std::vector<std::string> s4;
282 //@ssm[Set[9, 10, 11, 12, 13]] = 5
283 std::vector<std::string> s5;
291 //@ssm[Set[10, 13]] = 6
292 std::vector<std::string> s6;
297 //assert_equal([[1, Set[10, 11, 12]], [2, Set[10, 11]], [3, Set[11]], [4, Set[11, 12]], [5, Set[9, 10, 11, 12, 13]], [6, Set[10, 13]]], @ssm.get(Set[9, 10, 11, 12, 13]))
298 std::vector<std::string> k1;
304 assertEqual("[[1, Set[10, 11, 12]], [2, Set[10, 11]], [3, Set[11]], [4, Set[11, 12]], [5, Set[9, 10, 11, 12, 13]], [6, Set[10, 13]]]", toString(ssm.get_kv(k1)));
306 std::cout << std::endl;
308 void testMultipleEqualValues() {
309 std::cout << "testMultipleEqualValues" << std::endl;
310 //@ssm[Set[11, 12]] = 1
311 std::vector<std::string> s1;
316 //@ssm[Set[12, 13]] = 2
317 std::vector<std::string> s2;
322 //@ssm[Set[13, 14]] = 1
323 std::vector<std::string> s3;
328 //@ssm[Set[14, 15]] = 1
329 std::vector<std::string> s4;
334 //assert_equal([[1, Set[11, 12]], [2, Set[12, 13]], [1, Set[13, 14]], [1, Set[14, 15]]], @ssm.get(Set[11, 12, 13, 14, 15]))
335 std::vector<std::string> k1;
341 assertEqual("[[1, Set[11, 12]], [2, Set[12, 13]], [1, Set[13, 14]], [1, Set[14, 15]]]", toString(ssm.get_kv(k1)));
343 std::cout << std::endl;
348 std::vector<std::string> s1;
352 std::vector<std::string> s2;
356 std::vector<std::string> s3;
360 ssm.put(s1, "value1");
361 ssm.put(s2, "value2");
362 ssm.put(s3, "value3");
364 std::vector<std::string> s4;
369 std::vector<std::pair<string, std::vector<std::string> > > fetched(ssm.get_kv(s4));
371 std::cout << "PRINTING RESULTS:" << std::endl;
372 for (size_t i = 0, S = fetched.size(); i < S; ++i) {
373 std::cout << fetched[i].first << std::endl;
376 Subset_Map<string, string> ssm2;
381 std::vector<std::pair<string, std::vector<std::string> > > fetched2(ssm2.get_kv(s4));
383 std::cout << std::endl << "PRINTING RESULTS:" << std::endl;
384 for (size_t i = 0, S = fetched2.size(); i < S; ++i) {
385 std::cout << fetched2[i].first << std::endl;
388 std::cout << "TRYING ON A SELECTOR-LIKE OBJECT" << std::endl;
390 Subset_Map<string, string> sel_ssm;
391 std::vector<std::string> target;
392 target.push_back("desk");
393 target.push_back(".wood");
395 std::vector<std::string> actual;
396 actual.push_back("desk");
397 actual.push_back(".wood");
398 actual.push_back(".mine");
400 sel_ssm.put(target, "has-aquarium");
401 std::vector<std::pair<string, std::vector<std::string> > > fetched3(sel_ssm.get_kv(actual));
402 std::cout << "RESULTS:" << std::endl;
403 for (size_t i = 0, S = fetched3.size(); i < S; ++i) {
404 std::cout << fetched3[i].first << std::endl;
407 std::cout << std::endl;
409 // BEGIN PORTED RUBY TESTS FROM /test/sass/util/subset_map_test.rb
416 testSemiDisjointKeys();
419 testMultipleSubsets();
420 testBracketBracket();
424 testOrderPreserved();
427 testMultipleEqualValues();
432 string toString(std::vector<std::pair<string, std::vector<std::string>>> v)
434 std::stringstream buffer;
436 for (size_t i = 0, S = v.size(); i < S; ++i) {
437 buffer << "[" << v[i].first;
439 for (size_t j = 0, S = v[i].second.size(); j < S; ++j) {
440 buffer << v[i].second[j];
454 string toString(std::vector<std::string> v)
456 std::stringstream buffer;
458 for (size_t i = 0, S = v.size(); i < S; ++i) {
468 void assertEqual(string sExpected, string sResult) {
469 std::cout << "Expected: " << sExpected << std::endl;
470 std::cout << "Result: " << sResult << std::endl;
471 assert(sExpected == sResult);