Aleph-w 3.0
A C++ Library for Data Structures and Algorithms
Loading...
Searching...
No Matches
ah-convert.cc
Go to the documentation of this file.
1
2/*
3 Aleph_w
4
5 Data structures & Algorithms
6 version 2.0.0b
7 https://github.com/lrleon/Aleph-w
8
9 This file is part of Aleph-w library
10
11 Copyright (c) 2002-2026 Leandro Rabindranath Leon
12
13 Permission is hereby granted, free of charge, to any person obtaining a copy
14 of this software and associated documentation files (the "Software"), to deal
15 in the Software without restriction, including without limitation the rights
16 to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
17 copies of the Software, and to permit persons to whom the Software is
18 furnished to do so, subject to the following conditions:
19
20 The above copyright notice and this permission notice shall be included in all
21 copies or substantial portions of the Software.
22
23 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
24 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
25 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
26 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
27 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
28 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
29 SOFTWARE.
30*/
31
32
38#include <gtest/gtest.h>
39#include <string>
40#include <set>
41#include <map>
42
43#include <ah-convert.H>
44
45using namespace Aleph;
46
47// ==================== to_DynList Tests ====================
48
50{
51 Array<int> arr;
52 auto list = to_DynList(arr);
53 EXPECT_TRUE(list.is_empty());
54}
55
57{
58 Array<int> arr;
59 arr.append(42);
60 auto list = to_DynList(arr);
61
62 ASSERT_EQ(list.size(), 1);
63 EXPECT_EQ(list.get_first(), 42);
64}
65
67{
68 Array<int> arr;
69 arr.append(1);
70 arr.append(2);
71 arr.append(3);
72 arr.append(4);
73 arr.append(5);
74
75 auto list = to_DynList(arr);
76
77 ASSERT_EQ(list.size(), 5);
78 int expected = 1;
79 for (auto it = list.get_it(); it.has_curr(); it.next_ne())
80 {
81 EXPECT_EQ(it.get_curr(), expected);
82 ++expected;
83 }
84}
85
87{
89 arr.append("hello");
90 arr.append("world");
91
92 auto list = to_DynList(arr);
93
94 ASSERT_EQ(list.size(), 2);
95 EXPECT_EQ(list.get_first(), "hello");
96 EXPECT_EQ(list.get_last(), "world");
97}
98
99// ==================== to_Array Tests ====================
100
102{
103 DynList<int> list;
104 auto arr = to_Array(list);
105 EXPECT_EQ(arr.size(), 0);
106}
107
109{
110 DynList<int> list;
111 list.append(99);
112
113 auto arr = to_Array(list);
114
115 ASSERT_EQ(arr.size(), 1);
116 EXPECT_EQ(arr(0), 99);
117}
118
120{
121 DynList<int> list;
122 list.append(10);
123 list.append(20);
124 list.append(30);
125
126 auto arr = to_Array(list);
127
128 ASSERT_EQ(arr.size(), 3);
129 EXPECT_EQ(arr(0), 10);
130 EXPECT_EQ(arr(1), 20);
131 EXPECT_EQ(arr(2), 30);
132}
133
135{
137 list.append("foo");
138 list.append("bar");
139 list.append("baz");
140
141 auto arr = to_Array(list);
142
143 ASSERT_EQ(arr.size(), 3);
144 EXPECT_EQ(arr(0), "foo");
145 EXPECT_EQ(arr(1), "bar");
146 EXPECT_EQ(arr(2), "baz");
147}
148
149// ==================== dynarray_to_DynList Tests ====================
150
152{
153 DynArray<int> arr;
154 auto list = dynarray_to_DynList(arr);
155 EXPECT_TRUE(list.is_empty());
156}
157
159{
160 DynArray<int> arr;
161 arr.append(77);
162
163 auto list = dynarray_to_DynList(arr);
164
165 ASSERT_EQ(list.size(), 1);
166 EXPECT_EQ(list.get_first(), 77);
167}
168
170{
171 DynArray<int> arr;
172 for (int i = 0; i < 10; ++i)
173 arr.append(i * i);
174
175 auto list = dynarray_to_DynList(arr);
176
177 ASSERT_EQ(list.size(), 10);
178 int idx = 0;
179 for (auto it = list.get_it(); it.has_curr(); it.next_ne(), ++idx)
180 EXPECT_EQ(it.get_curr(), idx * idx);
181}
182
183// ==================== dynlist_to_DynArray Tests ====================
184
186{
187 DynList<int> list;
188 auto arr = dynlist_to_DynArray(list);
189 EXPECT_EQ(arr.size(), 0);
190}
191
193{
194 DynList<int> list;
195 list.append(88);
196
197 auto arr = dynlist_to_DynArray(list);
198
199 ASSERT_EQ(arr.size(), 1);
200 EXPECT_EQ(arr(0), 88);
201}
202
204{
205 DynList<int> list;
206 for (int i = 0; i < 5; ++i)
207 list.append(i + 100);
208
209 auto arr = dynlist_to_DynArray(list);
210
211 ASSERT_EQ(arr.size(), 5);
212 for (size_t i = 0; i < 5; ++i)
213 EXPECT_EQ(arr(i), static_cast<int>(i) + 100);
214}
215
216// ==================== to_vector Tests ====================
217
219{
220 DynList<int> list;
221 auto vec = to_vector(list);
223}
224
226{
227 DynList<int> list;
228 list.append(55);
229
230 auto vec = to_vector(list);
231
232 ASSERT_EQ(vec.size(), 1U);
233 EXPECT_EQ(vec[0], 55);
234}
235
237{
238 DynList<int> list;
239 list.append(1);
240 list.append(2);
241 list.append(3);
242
243 auto vec = to_vector(list);
244
245 ASSERT_EQ(vec.size(), 3U);
246 EXPECT_EQ(vec[0], 1);
247 EXPECT_EQ(vec[1], 2);
248 EXPECT_EQ(vec[2], 3);
249}
250
252{
253 Array<double> arr;
254 arr.append(1.1);
255 arr.append(2.2);
256 arr.append(3.3);
257
258 auto vec = to_vector(arr);
259
260 ASSERT_EQ(vec.size(), 3U);
261 EXPECT_DOUBLE_EQ(vec[0], 1.1);
262 EXPECT_DOUBLE_EQ(vec[1], 2.2);
263 EXPECT_DOUBLE_EQ(vec[2], 3.3);
264}
265
266// ==================== vector_to_DynList Tests ====================
267
269{
270 std::vector<int> vec;
271 auto list = vector_to_DynList(vec);
272 EXPECT_TRUE(list.is_empty());
273}
274
276{
277 std::vector<int> vec = {123};
278 auto list = vector_to_DynList(vec);
279
280 ASSERT_EQ(list.size(), 1);
281 EXPECT_EQ(list.get_first(), 123);
282}
283
285{
286 std::vector<int> vec = {5, 10, 15, 20};
287 auto list = vector_to_DynList(vec);
288
289 ASSERT_EQ(list.size(), 4);
290 int expected = 5;
291 for (auto it = list.get_it(); it.has_curr(); it.next_ne())
292 {
293 EXPECT_EQ(it.get_curr(), expected);
294 expected += 5;
295 }
296}
297
298// ==================== vector_to_Array Tests ====================
299
301{
302 std::vector<int> vec;
303 auto arr = vector_to_Array(vec);
304 EXPECT_EQ(arr.size(), 0);
305}
306
308{
309 std::vector<int> vec = {999};
310 auto arr = vector_to_Array(vec);
311
312 ASSERT_EQ(arr.size(), 1);
313 EXPECT_EQ(arr(0), 999);
314}
315
317{
318 std::vector<std::string> vec = {"a", "b", "c", "d"};
319 auto arr = vector_to_Array(vec);
320
321 ASSERT_EQ(arr.size(), 4);
322 EXPECT_EQ(arr(0), "a");
323 EXPECT_EQ(arr(1), "b");
324 EXPECT_EQ(arr(2), "c");
325 EXPECT_EQ(arr(3), "d");
326}
327
328// ==================== Round-trip Tests ====================
329
331{
333 original.append(1);
334 original.append(2);
335 original.append(3);
336
337 auto list = to_DynList(original);
338 auto result = to_Array(list);
339
340 ASSERT_EQ(result.size(), original.size());
341 for (size_t i = 0; i < original.size(); ++i)
342 EXPECT_EQ(result(i), original(i));
343}
344
346{
348 original.append(10);
349 original.append(20);
350 original.append(30);
351
352 auto arr = dynlist_to_DynArray(original);
353 auto result = dynarray_to_DynList(arr);
354
355 ASSERT_EQ(result.size(), original.size());
356 auto it1 = original.get_it();
357 auto it2 = result.get_it();
358 while (it1.has_curr())
359 {
360 EXPECT_EQ(it1.get_curr(), it2.get_curr());
361 it1.next_ne();
362 it2.next_ne();
363 }
364}
365
367{
368 std::vector<int> original = {100, 200, 300, 400};
369 auto list = vector_to_DynList(original);
370 auto result = to_vector(list);
371
372 ASSERT_EQ(result.size(), original.size());
373 for (size_t i = 0; i < original.size(); ++i)
374 EXPECT_EQ(result[i], original[i]);
375}
376
378{
379 std::vector<double> original = {1.5, 2.5, 3.5};
380 auto arr = vector_to_Array(original);
381 auto result = to_vector(arr);
382
383 ASSERT_EQ(result.size(), original.size());
384 for (size_t i = 0; i < original.size(); ++i)
385 EXPECT_DOUBLE_EQ(result[i], original[i]);
386}
387
388// ==================== Large Container Tests ====================
389
391{
392 DynArray<int> arr;
393 constexpr size_t SIZE = 10000;
394
395 for (size_t i = 0; i < SIZE; ++i)
396 arr.append(static_cast<int>(i));
397
398 auto list = dynarray_to_DynList(arr);
399 ASSERT_EQ(list.size(), SIZE);
400
401 auto arr2 = dynlist_to_DynArray(list);
403
404 for (size_t i = 0; i < SIZE; ++i)
405 EXPECT_EQ(arr2(i), static_cast<int>(i));
406}
407
409{
410 std::vector<int> vec;
411 constexpr size_t SIZE = 10000;
412
413 for (size_t i = 0; i < SIZE; ++i)
414 vec.push_back(static_cast<int>(i * 2));
415
416 auto list = vector_to_DynList(vec);
417 ASSERT_EQ(list.size(), SIZE);
418
419 auto result = to_vector(list);
420 ASSERT_EQ(result.size(), SIZE);
421
422 for (size_t i = 0; i < SIZE; ++i)
423 EXPECT_EQ(result[i], static_cast<int>(i * 2));
424}
425
426// ==================== vector_to_DynArray Tests ====================
427
429{
430 std::vector<int> vec;
431 auto arr = vector_to_DynArray(vec);
432 EXPECT_EQ(arr.size(), 0);
433}
434
436{
437 std::vector<int> vec = {42};
438 auto arr = vector_to_DynArray(vec);
439
440 ASSERT_EQ(arr.size(), 1);
441 EXPECT_EQ(arr(0), 42);
442}
443
445{
446 std::vector<std::string> vec = {"alpha", "beta", "gamma"};
447 auto arr = vector_to_DynArray(vec);
448
449 ASSERT_EQ(arr.size(), 3);
450 EXPECT_EQ(arr(0), "alpha");
451 EXPECT_EQ(arr(1), "beta");
452 EXPECT_EQ(arr(2), "gamma");
453}
454
455// ==================== to_DynArray Tests ====================
456
458{
459 DynList<int> list;
460 auto arr = to_DynArray(list);
461 EXPECT_EQ(arr.size(), 0);
462}
463
465{
466 DynList<int> list;
467 list.append(7);
468 list.append(14);
469 list.append(21);
470
471 auto arr = to_DynArray(list);
472
473 ASSERT_EQ(arr.size(), 3);
474 EXPECT_EQ(arr(0), 7);
475 EXPECT_EQ(arr(1), 14);
476 EXPECT_EQ(arr(2), 21);
477}
478
480{
481 Array<double> source;
482 source.append(1.5);
483 source.append(2.5);
484
485 auto arr = to_DynArray(source);
486
487 ASSERT_EQ(arr.size(), 2);
488 EXPECT_DOUBLE_EQ(arr(0), 1.5);
489 EXPECT_DOUBLE_EQ(arr(1), 2.5);
490}
491
492// ==================== array_to_DynArray Tests ====================
493
495{
496 Array<int> source;
497 auto arr = array_to_DynArray(source);
498 EXPECT_EQ(arr.size(), 0);
499}
500
502{
503 Array<int> source;
504 source.append(10);
505 source.append(20);
506 source.append(30);
507
508 auto arr = array_to_DynArray(source);
509
510 ASSERT_EQ(arr.size(), 3);
511 EXPECT_EQ(arr(0), 10);
512 EXPECT_EQ(arr(1), 20);
513 EXPECT_EQ(arr(2), 30);
514}
515
516// ==================== dynarray_to_Array Tests ====================
517
519{
520 DynArray<int> source;
521 auto arr = dynarray_to_Array(source);
522 EXPECT_EQ(arr.size(), 0);
523}
524
526{
527 DynArray<int> source;
528 source.append(100);
529 source.append(200);
530 source.append(300);
531
532 auto arr = dynarray_to_Array(source);
533
534 ASSERT_EQ(arr.size(), 3);
535 EXPECT_EQ(arr(0), 100);
536 EXPECT_EQ(arr(1), 200);
537 EXPECT_EQ(arr(2), 300);
538}
539
540// ==================== to_deque Tests ====================
541
543{
544 DynList<int> list;
545 auto deq = to_deque(list);
547}
548
550{
551 DynList<int> list;
552 list.append(1);
553 list.append(2);
554 list.append(3);
555
556 auto deq = to_deque(list);
557
558 ASSERT_EQ(deq.size(), 3U);
559 EXPECT_EQ(deq[0], 1);
560 EXPECT_EQ(deq[1], 2);
561 EXPECT_EQ(deq[2], 3);
562}
563
565{
567 arr.append("x");
568 arr.append("y");
569
570 auto deq = to_deque(arr);
571
572 ASSERT_EQ(deq.size(), 2U);
573 EXPECT_EQ(deq[0], "x");
574 EXPECT_EQ(deq[1], "y");
575}
576
577// ==================== deque_to_* Tests ====================
578
580{
581 std::deque<int> deq;
582 auto list = deque_to_DynList(deq);
583 EXPECT_TRUE(list.is_empty());
584}
585
587{
588 std::deque<int> deq = {5, 10, 15};
589 auto list = deque_to_DynList(deq);
590
591 ASSERT_EQ(list.size(), 3);
592 int expected = 5;
593 for (auto it = list.get_it(); it.has_curr(); it.next_ne())
594 {
595 EXPECT_EQ(it.get_curr(), expected);
596 expected += 5;
597 }
598}
599
601{
602 std::deque<int> deq;
603 auto arr = deque_to_Array(deq);
604 EXPECT_EQ(arr.size(), 0);
605}
606
608{
609 std::deque<int> deq = {11, 22, 33, 44};
610 auto arr = deque_to_Array(deq);
611
612 ASSERT_EQ(arr.size(), 4);
613 EXPECT_EQ(arr(0), 11);
614 EXPECT_EQ(arr(1), 22);
615 EXPECT_EQ(arr(2), 33);
616 EXPECT_EQ(arr(3), 44);
617}
618
620{
621 std::deque<int> deq;
622 auto arr = deque_to_DynArray(deq);
623 EXPECT_EQ(arr.size(), 0);
624}
625
627{
628 std::deque<double> deq = {1.1, 2.2, 3.3};
629 auto arr = deque_to_DynArray(deq);
630
631 ASSERT_EQ(arr.size(), 3);
632 EXPECT_DOUBLE_EQ(arr(0), 1.1);
633 EXPECT_DOUBLE_EQ(arr(1), 2.2);
634 EXPECT_DOUBLE_EQ(arr(2), 3.3);
635}
636
637// ==================== DynDlist Conversion Tests ====================
638
640{
641 DynDlist<int> dlist;
642 auto list = dyndlist_to_DynList(dlist);
643 EXPECT_TRUE(list.is_empty());
644}
645
647{
648 DynDlist<int> dlist;
649 dlist.append(1);
650 dlist.append(2);
651 dlist.append(3);
652
653 auto list = dyndlist_to_DynList(dlist);
654
655 ASSERT_EQ(list.size(), 3);
656 int expected = 1;
657 for (auto it = list.get_it(); it.has_curr(); it.next_ne())
658 {
659 EXPECT_EQ(it.get_curr(), expected);
660 ++expected;
661 }
662}
663
665{
666 DynList<int> list;
667 auto dlist = dynlist_to_DynDlist(list);
668 EXPECT_TRUE(dlist.is_empty());
669}
670
672{
673 DynList<int> list;
674 list.append(10);
675 list.append(20);
676 list.append(30);
677
678 auto dlist = dynlist_to_DynDlist(list);
679
680 ASSERT_EQ(dlist.size(), 3);
681 int expected = 10;
682 for (auto it = dlist.get_it(); it.has_curr(); it.next_ne())
683 {
684 EXPECT_EQ(it.get_curr(), expected);
685 expected += 10;
686 }
687}
688
690{
691 DynDlist<int> dlist;
692 auto arr = dyndlist_to_DynArray(dlist);
693 EXPECT_EQ(arr.size(), 0);
694}
695
697{
698 DynDlist<int> dlist;
699 dlist.append(7);
700 dlist.append(8);
701 dlist.append(9);
702
703 auto arr = dyndlist_to_DynArray(dlist);
704
705 ASSERT_EQ(arr.size(), 3);
706 EXPECT_EQ(arr(0), 7);
707 EXPECT_EQ(arr(1), 8);
708 EXPECT_EQ(arr(2), 9);
709}
710
712{
713 DynArray<int> arr;
714 auto dlist = dynarray_to_DynDlist(arr);
715 EXPECT_TRUE(dlist.is_empty());
716}
717
719{
720 DynArray<int> arr;
721 arr.append(100);
722 arr.append(200);
723 arr.append(300);
724
725 auto dlist = dynarray_to_DynDlist(arr);
726
727 ASSERT_EQ(dlist.size(), 3);
728 int expected = 100;
729 for (auto it = dlist.get_it(); it.has_curr(); it.next_ne())
730 {
731 EXPECT_EQ(it.get_curr(), expected);
732 expected += 100;
733 }
734}
735
737{
738 std::vector<int> vec;
739 auto dlist = vector_to_DynDlist(vec);
740 EXPECT_TRUE(dlist.is_empty());
741}
742
744{
745 std::vector<std::string> vec = {"a", "b", "c"};
746 auto dlist = vector_to_DynDlist(vec);
747
748 ASSERT_EQ(dlist.size(), 3);
749 auto it = dlist.get_it();
750 EXPECT_EQ(it.get_curr(), "a");
751 it.next_ne();
752 EXPECT_EQ(it.get_curr(), "b");
753 it.next_ne();
754 EXPECT_EQ(it.get_curr(), "c");
755}
756
757// ==================== Additional Round-trip Tests ====================
758
760{
761 std::vector<int> original = {1, 2, 3, 4, 5};
762 auto arr = vector_to_DynArray(original);
763 auto result = to_vector(arr);
764
765 ASSERT_EQ(result.size(), original.size());
766 for (size_t i = 0; i < original.size(); ++i)
767 EXPECT_EQ(result[i], original[i]);
768}
769
771{
773 original.append(10);
774 original.append(20);
775 original.append(30);
776
777 auto arr = dyndlist_to_DynArray(original);
778 auto result = dynarray_to_DynDlist(arr);
779
780 ASSERT_EQ(result.size(), original.size());
781 auto it1 = original.get_it();
782 auto it2 = result.get_it();
783 while (it1.has_curr())
784 {
785 EXPECT_EQ(it1.get_curr(), it2.get_curr());
786 it1.next_ne();
787 it2.next_ne();
788 }
789}
790
792{
793 std::deque<double> original = {1.5, 2.5, 3.5};
794 auto arr = deque_to_Array(original);
795 auto result = to_deque(arr);
796
797 ASSERT_EQ(result.size(), original.size());
798 for (size_t i = 0; i < original.size(); ++i)
799 EXPECT_DOUBLE_EQ(result[i], original[i]);
800}
801
802// ==================== Move Semantics Tests ====================
803
805{
806 std::vector<std::string> vec = {"hello", "world", "test"};
807 size_t original_size = vec.size();
808
809 auto list = vector_to_DynList(std::move(vec));
810
811 ASSERT_EQ(list.size(), original_size);
812 auto it = list.get_it();
813 EXPECT_EQ(it.get_curr(), "hello");
814 it.next_ne();
815 EXPECT_EQ(it.get_curr(), "world");
816 it.next_ne();
817 EXPECT_EQ(it.get_curr(), "test");
818}
819
821{
822 std::vector<std::string> vec = {"alpha", "beta"};
823 size_t original_size = vec.size();
824
825 auto arr = vector_to_Array(std::move(vec));
826
827 ASSERT_EQ(arr.size(), original_size);
828 EXPECT_EQ(arr(0), "alpha");
829 EXPECT_EQ(arr(1), "beta");
830}
831
833{
834 std::vector<std::string> vec = {"x", "y", "z"};
835 size_t original_size = vec.size();
836
837 auto arr = vector_to_DynArray(std::move(vec));
838
839 ASSERT_EQ(arr.size(), original_size);
840 EXPECT_EQ(arr(0), "x");
841 EXPECT_EQ(arr(1), "y");
842 EXPECT_EQ(arr(2), "z");
843}
844
846{
847 std::vector<std::string> vec = {"one", "two"};
848 size_t original_size = vec.size();
849
850 auto dlist = vector_to_DynDlist(std::move(vec));
851
852 ASSERT_EQ(dlist.size(), original_size);
853 auto it = dlist.get_it();
854 EXPECT_EQ(it.get_curr(), "one");
855 it.next_ne();
856 EXPECT_EQ(it.get_curr(), "two");
857}
858
859// ==================== std::set Conversion Tests ====================
860
862{
863 std::set<int> s;
864 auto list = set_to_DynList(s);
865 EXPECT_TRUE(list.is_empty());
866}
867
869{
870 std::set<int> s = {3, 1, 4, 1, 5, 9}; // duplicates removed, sorted
871 auto list = set_to_DynList(s);
872
873 ASSERT_EQ(list.size(), 5); // unique: 1, 3, 4, 5, 9
874 auto it = list.get_it();
875 EXPECT_EQ(it.get_curr(), 1);
876 it.next_ne();
877 EXPECT_EQ(it.get_curr(), 3);
878 it.next_ne();
879 EXPECT_EQ(it.get_curr(), 4);
880 it.next_ne();
881 EXPECT_EQ(it.get_curr(), 5);
882 it.next_ne();
883 EXPECT_EQ(it.get_curr(), 9);
884}
885
887{
888 std::set<std::string> s = {"banana", "apple", "cherry"};
889 auto arr = set_to_Array(s);
890
891 ASSERT_EQ(arr.size(), 3);
892 EXPECT_EQ(arr(0), "apple"); // sorted
893 EXPECT_EQ(arr(1), "banana");
894 EXPECT_EQ(arr(2), "cherry");
895}
896
898{
899 std::set<int> s = {10, 20, 30};
900 auto arr = set_to_DynArray(s);
901
902 ASSERT_EQ(arr.size(), 3);
903 EXPECT_EQ(arr(0), 10);
904 EXPECT_EQ(arr(1), 20);
905 EXPECT_EQ(arr(2), 30);
906}
907
909{
910 DynList<int> list;
911 list.append(5);
912 list.append(3);
913 list.append(5); // duplicate
914 list.append(1);
915
916 auto s = to_set(list);
917
918 ASSERT_EQ(s.size(), 3U); // unique: 1, 3, 5
919 EXPECT_TRUE(s.count(1));
920 EXPECT_TRUE(s.count(3));
921 EXPECT_TRUE(s.count(5));
922}
923
925{
927 arr.append("a");
928 arr.append("b");
929 arr.append("a"); // duplicate
930
931 auto s = to_set(arr);
932
933 ASSERT_EQ(s.size(), 2U);
934 EXPECT_TRUE(s.count("a"));
935 EXPECT_TRUE(s.count("b"));
936}
937
938// ==================== std::map Conversion Tests ====================
939
941{
942 std::map<int, std::string> m;
943 auto list = map_to_DynList(m);
944 EXPECT_TRUE(list.is_empty());
945}
946
948{
949 std::map<int, std::string> m = {{1, "one"}, {2, "two"}, {3, "three"}};
950 auto list = map_to_DynList(m);
951
952 ASSERT_EQ(list.size(), 3);
953 auto it = list.get_it();
954 EXPECT_EQ(it.get_curr().first, 1);
955 EXPECT_EQ(it.get_curr().second, "one");
956 it.next_ne();
957 EXPECT_EQ(it.get_curr().first, 2);
958 EXPECT_EQ(it.get_curr().second, "two");
959}
960
962{
963 std::map<std::string, int> m = {{"a", 1}, {"b", 2}};
964 auto arr = map_to_Array(m);
965
966 ASSERT_EQ(arr.size(), 2);
967 EXPECT_EQ(arr(0).first, "a");
968 EXPECT_EQ(arr(0).second, 1);
969 EXPECT_EQ(arr(1).first, "b");
970 EXPECT_EQ(arr(1).second, 2);
971}
972
974{
975 std::map<std::string, int> m = {{"x", 10}, {"y", 20}, {"z", 30}};
976 auto keys = map_keys_to_DynList(m);
977
978 ASSERT_EQ(keys.size(), 3);
979 auto it = keys.get_it();
980 EXPECT_EQ(it.get_curr(), "x");
981 it.next_ne();
982 EXPECT_EQ(it.get_curr(), "y");
983 it.next_ne();
984 EXPECT_EQ(it.get_curr(), "z");
985}
986
988{
989 std::map<std::string, int> m = {{"a", 100}, {"b", 200}};
990 auto values = map_values_to_DynList(m);
991
992 ASSERT_EQ(values.size(), 2);
993 auto it = values.get_it();
994 EXPECT_EQ(it.get_curr(), 100);
995 it.next_ne();
996 EXPECT_EQ(it.get_curr(), 200);
997}
998
999// ==================== initializer_list Conversion Tests ====================
1000
1002{
1003 auto list = init_to_DynList<int>({});
1004 EXPECT_TRUE(list.is_empty());
1005}
1006
1008{
1009 auto list = init_to_DynList({1, 2, 3, 4, 5});
1010
1011 ASSERT_EQ(list.size(), 5);
1012 int expected = 1;
1013 for (auto it = list.get_it(); it.has_curr(); it.next_ne())
1014 {
1015 EXPECT_EQ(it.get_curr(), expected);
1016 ++expected;
1017 }
1018}
1019
1021{
1022 auto arr = init_to_Array<int>({});
1023 EXPECT_EQ(arr.size(), 0);
1024}
1025
1027{
1028 auto arr = init_to_Array({10, 20, 30});
1029
1030 ASSERT_EQ(arr.size(), 3);
1031 EXPECT_EQ(arr(0), 10);
1032 EXPECT_EQ(arr(1), 20);
1033 EXPECT_EQ(arr(2), 30);
1034}
1035
1037{
1038 auto arr = init_to_DynArray<int>({});
1039 EXPECT_EQ(arr.size(), 0);
1040}
1041
1043{
1044 auto arr = init_to_DynArray({100, 200, 300, 400});
1045
1046 ASSERT_EQ(arr.size(), 4);
1047 EXPECT_EQ(arr(0), 100);
1048 EXPECT_EQ(arr(1), 200);
1049 EXPECT_EQ(arr(2), 300);
1050 EXPECT_EQ(arr(3), 400);
1051}
1052
1054{
1055 auto dlist = init_to_DynDlist<int>({});
1056 EXPECT_TRUE(dlist.is_empty());
1057}
1058
1060{
1061 auto dlist = init_to_DynDlist<std::string>({"hello", "world"});
1062
1063 ASSERT_EQ(dlist.size(), 2);
1064 auto it = dlist.get_it();
1065 EXPECT_EQ(it.get_curr(), "hello");
1066 it.next_ne();
1067 EXPECT_EQ(it.get_curr(), "world");
1068}
1069
1071{
1072 auto list = init_to_DynList<std::string>({"alpha", "beta", "gamma"});
1073
1074 ASSERT_EQ(list.size(), 3);
1075 auto it = list.get_it();
1076 EXPECT_EQ(it.get_curr(), "alpha");
1077 it.next_ne();
1078 EXPECT_EQ(it.get_curr(), "beta");
1079 it.next_ne();
1080 EXPECT_EQ(it.get_curr(), "gamma");
1081}
1082
1083// ==================== DynSetTree Conversion Tests ====================
1084
1086{
1088 auto list = settree_to_DynList(s);
1089 EXPECT_TRUE(list.is_empty());
1090}
1091
1093{
1094 DynSetTree<int> s = {3, 1, 4, 1, 5, 9}; // duplicates ignored
1095 auto list = settree_to_DynList(s);
1096
1097 ASSERT_EQ(list.size(), 5); // unique: 1, 3, 4, 5, 9
1098 // Elements are in sorted order (in-order traversal)
1099 auto it = list.get_it();
1100 EXPECT_EQ(it.get_curr(), 1);
1101 it.next_ne();
1102 EXPECT_EQ(it.get_curr(), 3);
1103 it.next_ne();
1104 EXPECT_EQ(it.get_curr(), 4);
1105 it.next_ne();
1106 EXPECT_EQ(it.get_curr(), 5);
1107 it.next_ne();
1108 EXPECT_EQ(it.get_curr(), 9);
1109}
1110
1112{
1113 DynSetTree<std::string> s = {"banana", "apple", "cherry"};
1114 auto arr = settree_to_Array(s);
1115
1116 ASSERT_EQ(arr.size(), 3);
1117 EXPECT_EQ(arr(0), "apple"); // sorted
1118 EXPECT_EQ(arr(1), "banana");
1119 EXPECT_EQ(arr(2), "cherry");
1120}
1121
1123{
1124 DynSetTree<int> s = {10, 20, 30};
1125 auto arr = settree_to_DynArray(s);
1126
1127 ASSERT_EQ(arr.size(), 3);
1128 EXPECT_EQ(arr(0), 10);
1129 EXPECT_EQ(arr(1), 20);
1130 EXPECT_EQ(arr(2), 30);
1131}
1132
1134{
1135 DynSetTree<int> s = {5, 2, 8};
1136 auto vec = settree_to_vector(s);
1137
1138 ASSERT_EQ(vec.size(), 3U);
1139 EXPECT_EQ(vec[0], 2);
1140 EXPECT_EQ(vec[1], 5);
1141 EXPECT_EQ(vec[2], 8);
1142}
1143
1145{
1146 DynSetTree<int> s = {1, 2, 3};
1147 auto stdset = settree_to_stdset(s);
1148
1149 ASSERT_EQ(stdset.size(), 3U);
1150 EXPECT_TRUE(stdset.count(1));
1151 EXPECT_TRUE(stdset.count(2));
1152 EXPECT_TRUE(stdset.count(3));
1153}
1154
1156{
1157 DynList<int> list;
1158 list.append(5);
1159 list.append(3);
1160 list.append(5); // duplicate
1161 list.append(1);
1162
1163 auto s = to_DynSetTree(list);
1164
1165 ASSERT_EQ(s.size(), 3); // unique: 1, 3, 5
1166 EXPECT_TRUE(s.contains(1));
1167 EXPECT_TRUE(s.contains(3));
1168 EXPECT_TRUE(s.contains(5));
1169}
1170
1172{
1173 std::vector<std::string> vec = {"a", "b", "a", "c"};
1174 auto s = vector_to_DynSetTree(vec);
1175
1176 ASSERT_EQ(s.size(), 3);
1177 EXPECT_TRUE(s.contains("a"));
1178 EXPECT_TRUE(s.contains("b"));
1179 EXPECT_TRUE(s.contains("c"));
1180}
1181
1182// ==================== DynSetHash Conversion Tests ====================
1183
1185{
1187 s.insert(10);
1188 s.insert(20);
1189 s.insert(30);
1190
1191 auto list = sethash_to_DynList(s);
1192 ASSERT_EQ(list.size(), 3);
1193
1194 // Verify all elements are present (order is hash-dependent)
1195 DynSetTree<int> check;
1196 list.for_each([&check](int x) { check.insert(x); });
1197 EXPECT_TRUE(check.contains(10));
1198 EXPECT_TRUE(check.contains(20));
1199 EXPECT_TRUE(check.contains(30));
1200}
1201
1203{
1205 s.insert("x");
1206 s.insert("y");
1207
1208 auto arr = sethash_to_Array(s);
1209 ASSERT_EQ(arr.size(), 2);
1210
1212 for (size_t i = 0; i < arr.size(); ++i)
1213 check.insert(arr(i));
1214 EXPECT_TRUE(check.contains("x"));
1215 EXPECT_TRUE(check.contains("y"));
1216}
1217
1219{
1221 s.insert(1);
1222 s.insert(2);
1223 s.insert(3);
1224
1225 auto arr = sethash_to_DynArray(s);
1226 ASSERT_EQ(arr.size(), 3);
1227
1228 DynSetTree<int> check;
1229 for (size_t i = 0; i < arr.size(); ++i)
1230 check.insert(arr(i));
1231 EXPECT_TRUE(check.contains(1));
1232 EXPECT_TRUE(check.contains(2));
1233 EXPECT_TRUE(check.contains(3));
1234}
1235
1237{
1239 s.insert(100);
1240 s.insert(200);
1241
1242 auto vec = sethash_to_vector(s);
1243 ASSERT_EQ(vec.size(), 2U);
1244
1245 std::set<int> check(vec.begin(), vec.end());
1246 EXPECT_TRUE(check.count(100));
1247 EXPECT_TRUE(check.count(200));
1248}
1249
1250// ==================== DynMapTree Conversion Tests ====================
1251
1253{
1255 auto list = maptree_to_DynList(m);
1256 EXPECT_TRUE(list.is_empty());
1257}
1258
1260{
1262 m.insert(1, "one");
1263 m.insert(2, "two");
1264 m.insert(3, "three");
1265
1266 auto list = maptree_to_DynList(m);
1267 ASSERT_EQ(list.size(), 3);
1268
1269 // Verify pairs (in sorted key order)
1270 auto it = list.get_it();
1271 EXPECT_EQ(it.get_curr().first, 1);
1272 EXPECT_EQ(it.get_curr().second, "one");
1273 it.next_ne();
1274 EXPECT_EQ(it.get_curr().first, 2);
1275 EXPECT_EQ(it.get_curr().second, "two");
1276 it.next_ne();
1277 EXPECT_EQ(it.get_curr().first, 3);
1278 EXPECT_EQ(it.get_curr().second, "three");
1279}
1280
1282{
1284 m.insert("a", 1);
1285 m.insert("b", 2);
1286
1287 auto arr = maptree_to_Array(m);
1288 ASSERT_EQ(arr.size(), 2);
1289 EXPECT_EQ(arr(0).first, "a");
1290 EXPECT_EQ(arr(0).second, 1);
1291 EXPECT_EQ(arr(1).first, "b");
1292 EXPECT_EQ(arr(1).second, 2);
1293}
1294
1296{
1298 m.insert("x", 10);
1299 m.insert("y", 20);
1300
1301 auto stdmap = maptree_to_stdmap(m);
1302 ASSERT_EQ(stdmap.size(), 2U);
1303 EXPECT_EQ(stdmap["x"], 10);
1304 EXPECT_EQ(stdmap["y"], 20);
1305}
1306
1308{
1310 m.insert("alpha", 1);
1311 m.insert("beta", 2);
1312 m.insert("gamma", 3);
1313
1314 auto keys = maptree_keys_to_DynList(m);
1315 ASSERT_EQ(keys.size(), 3);
1316
1317 auto it = keys.get_it();
1318 EXPECT_EQ(it.get_curr(), "alpha");
1319 it.next_ne();
1320 EXPECT_EQ(it.get_curr(), "beta");
1321 it.next_ne();
1322 EXPECT_EQ(it.get_curr(), "gamma");
1323}
1324
1326{
1328 m.insert(1, "a");
1329 m.insert(2, "b");
1330
1331 auto values = maptree_values_to_DynList(m);
1332 ASSERT_EQ(values.size(), 2);
1333
1334 auto it = values.get_it();
1335 EXPECT_EQ(it.get_curr(), "a");
1336 it.next_ne();
1337 EXPECT_EQ(it.get_curr(), "b");
1338}
1339
1341{
1342 std::map<std::string, int> stdmap = {{"a", 1}, {"b", 2}, {"c", 3}};
1343 auto m = stdmap_to_DynMapTree(stdmap);
1344
1345 ASSERT_EQ(m.size(), 3);
1346 EXPECT_EQ(m["a"], 1);
1347 EXPECT_EQ(m["b"], 2);
1348 EXPECT_EQ(m["c"], 3);
1349}
1350
1351// ==================== MapOpenHash Conversion Tests ====================
1352
1354{
1356 m.insert("one", 1);
1357 m.insert("two", 2);
1358
1359 auto list = maphash_to_DynList(m);
1360 ASSERT_EQ(list.size(), 2);
1361
1362 // Verify all pairs are present (order is hash-dependent)
1363 std::map<std::string, int> check;
1364 list.for_each([&check](const auto & p) { check[p.first] = p.second; });
1365 EXPECT_EQ(check["one"], 1);
1366 EXPECT_EQ(check["two"], 2);
1367}
1368
1370{
1372 m.insert(10, "ten");
1373 m.insert(20, "twenty");
1374
1375 auto arr = maphash_to_Array(m);
1376 ASSERT_EQ(arr.size(), 2);
1377
1378 std::map<int, std::string> check;
1379 for (size_t i = 0; i < arr.size(); ++i)
1380 check[arr(i).first] = arr(i).second;
1381 EXPECT_EQ(check[10], "ten");
1382 EXPECT_EQ(check[20], "twenty");
1383}
1384
1386{
1388 m.insert("x", 100);
1389 m.insert("y", 200);
1390
1391 auto stdmap = maphash_to_stdmap(m);
1392 ASSERT_EQ(stdmap.size(), 2U);
1393 EXPECT_EQ(stdmap["x"], 100);
1394 EXPECT_EQ(stdmap["y"], 200);
1395}
1396
1398{
1400 m.insert("a", 1);
1401 m.insert("b", 2);
1402
1403 auto keys = maphash_keys_to_DynList(m);
1404 ASSERT_EQ(keys.size(), 2);
1405
1407 keys.for_each([&check](const auto & k) { check.insert(k); });
1408 EXPECT_TRUE(check.contains("a"));
1409 EXPECT_TRUE(check.contains("b"));
1410}
1411
1413{
1415 m.insert("x", 10);
1416 m.insert("y", 20);
1417
1418 auto values = maphash_values_to_DynList(m);
1419 ASSERT_EQ(values.size(), 2);
1420
1421 DynSetTree<int> check;
1422 values.for_each([&check](int v) { check.insert(v); });
1423 EXPECT_TRUE(check.contains(10));
1424 EXPECT_TRUE(check.contains(20));
1425}
1426
1427// ==================== vector_to_DynSetTree Tests ====================
1428
1430{
1431 std::vector<int> vec;
1432 auto s = vector_to_DynSetTree(vec);
1433 EXPECT_TRUE(s.is_empty());
1434}
1435
1437{
1438 std::vector<int> vec = {42};
1439 auto s = vector_to_DynSetTree(vec);
1440
1441 ASSERT_EQ(s.size(), 1);
1442 EXPECT_TRUE(s.contains(42));
1443}
1444
1446{
1447 std::vector<int> vec = {5, 2, 8, 2, 1, 8, 3};
1448 auto s = vector_to_DynSetTree(vec);
1449
1450 ASSERT_EQ(s.size(), 5); // unique: 1, 2, 3, 5, 8
1451 EXPECT_TRUE(s.contains(1));
1452 EXPECT_TRUE(s.contains(2));
1453 EXPECT_TRUE(s.contains(3));
1454 EXPECT_TRUE(s.contains(5));
1455 EXPECT_TRUE(s.contains(8));
1456}
1457
1459{
1460 std::vector<std::string> vec = {"cat", "dog", "cat", "bird", "dog"};
1461 auto s = vector_to_DynSetTree(vec);
1462
1463 ASSERT_EQ(s.size(), 3); // unique: bird, cat, dog
1464 EXPECT_TRUE(s.contains("bird"));
1465 EXPECT_TRUE(s.contains("cat"));
1466 EXPECT_TRUE(s.contains("dog"));
1467 EXPECT_FALSE(s.contains("fish"));
1468}
1469
1471{
1472 std::vector<int> original = {7, 3, 9, 3, 1};
1474 auto result = settree_to_vector(s);
1475
1476 ASSERT_EQ(s.size(), 4U); // unique: 1, 3, 7, 9
1477 // Vector from tree is sorted
1478 EXPECT_EQ(result[0], 1);
1479 EXPECT_EQ(result[1], 3);
1480 EXPECT_EQ(result[2], 7);
1481 EXPECT_EQ(result[3], 9);
1482}
1483
1484// ==================== Generic to_Array() Tests ====================
1485
1487{
1488 DynList<int> list;
1489 list.append(10);
1490 list.append(20);
1491 list.append(30);
1492
1493 auto arr = to_Array(list);
1494
1495 ASSERT_EQ(arr.size(), 3);
1496 EXPECT_EQ(arr(0), 10);
1497 EXPECT_EQ(arr(1), 20);
1498 EXPECT_EQ(arr(2), 30);
1499}
1500
1502{
1504 darray.append(1.5);
1505 darray.append(2.5);
1506 darray.append(3.5);
1507
1508 auto arr = to_Array(darray);
1509
1510 ASSERT_EQ(arr.size(), 3);
1511 EXPECT_DOUBLE_EQ(arr(0), 1.5);
1512 EXPECT_DOUBLE_EQ(arr(1), 2.5);
1513 EXPECT_DOUBLE_EQ(arr(2), 3.5);
1514}
1515
1517{
1519 stree.insert("zebra");
1520 stree.insert("apple");
1521 stree.insert("mango");
1522
1523 auto arr = to_Array(stree);
1524
1525 ASSERT_EQ(arr.size(), 3);
1526 // SetTree elements are sorted
1527 EXPECT_EQ(arr(0), "apple");
1528 EXPECT_EQ(arr(1), "mango");
1529 EXPECT_EQ(arr(2), "zebra");
1530}
1531
1533{
1534 DynList<int> list;
1535 auto arr = to_Array(list);
1536 EXPECT_EQ(arr.size(), 0);
1537}
1538
1539// ==================== Generic to_DynArray() Tests ====================
1540
1542{
1543 DynList<int> list;
1544 list.append(5);
1545 list.append(10);
1546
1547 auto darr = to_DynArray(list);
1548
1549 ASSERT_EQ(darr.size(), 2);
1550 EXPECT_EQ(darr(0), 5);
1551 EXPECT_EQ(darr(1), 10);
1552}
1553
1555{
1557 stree.insert(50);
1558 stree.insert(10);
1559 stree.insert(30);
1560
1561 auto darr = to_DynArray(stree);
1562
1563 ASSERT_EQ(darr.size(), 3);
1564 EXPECT_EQ(darr(0), 10);
1565 EXPECT_EQ(darr(1), 30);
1566 EXPECT_EQ(darr(2), 50);
1567}
1568
1570{
1572 dlist.append("foo");
1573 dlist.append("bar");
1574 dlist.append("baz");
1575
1576 auto darr = to_DynArray(dlist);
1577
1578 ASSERT_EQ(darr.size(), 3);
1579 EXPECT_EQ(darr(0), "foo");
1580 EXPECT_EQ(darr(1), "bar");
1581 EXPECT_EQ(darr(2), "baz");
1582}
1583
1585{
1586 DynList<int> list;
1587 auto darr = to_DynArray(list);
1588 EXPECT_EQ(darr.size(), 0);
1589}
1590
1592{
1594 original.append(100);
1595 original.append(200);
1596 original.append(300);
1597
1598 auto darr = to_DynArray(original);
1599 auto list = dynarray_to_DynList(darr);
1600
1601 ASSERT_EQ(list.size(), 3);
1602 auto it = list.get_it();
1603 EXPECT_EQ(it.get_curr(), 100);
1604 it.next_ne();
1605 EXPECT_EQ(it.get_curr(), 200);
1606 it.next_ne();
1607 EXPECT_EQ(it.get_curr(), 300);
1608}
Conversion utilities between Aleph-w and STL container types.
Simple dynamic array with automatic resizing and functional operations.
Definition tpl_array.H:138
T & append(const T &data)
Append a copy of data
Definition tpl_array.H:239
T & append()
Allocate a new entry to the end of array.
Dynamic doubly linked list with O(1) size and bidirectional access.
T & append(const T &item)
Append a copied item at the end of the list.
Key * insert(const Key &key)
Inserts key into the hash set.
Dynamic singly linked list with functional programming support.
Definition htlist.H:1423
T & insert(const T &item)
Insert a new item by copy.
Definition htlist.H:1502
T & append(const T &item)
Append a new item by copy.
Definition htlist.H:1562
void empty() noexcept
empty the list
Definition htlist.H:1689
Generic key-value map implemented on top of a binary search tree.
Pair * insert(const Key &key, const Data &data)
Insert a key-value pair.
Dynamic set backed by balanced binary search trees with automatic memory management.
Key * insert(const Key &key)
Inserts a key into the dynamic set.
bool contains(const Key &key) const
size_t size() const noexcept
Count the number of elements of the list.
Definition htlist.H:1319
void for_each(Operation &operation)
Traverse all the container and performs an operation on each element.
Definition ah-dry.H:685
auto get_it() const
Return a properly initialized iterator positioned at the first item on the container.
Definition ah-dry.H:190
iterator end() noexcept
Return an STL-compatible end iterator.
iterator begin() noexcept
Return an STL-compatible iterator to the first element.
#define TEST(name)
Main namespace for Aleph-w library functions.
Definition ah-arena.H:89
DynSetTree< T > vector_to_DynSetTree(const std::vector< T > &v)
Convert a std::vector to a DynSetTree.
std::set< Key > settree_to_stdset(const DynSetTree< Key, Tree, Compare > &s)
Convert a DynSetTree to a std::set.
DynList< T > to_DynList(const Array< T > &a)
Convert an Array to a DynList.
Definition ah-convert.H:147
DynList< K > map_keys_to_DynList(const std::map< K, V, Compare, Alloc > &m)
Extract keys from a std::map to a DynList.
Definition ah-convert.H:783
DynList< V > map_values_to_DynList(const std::map< K, V, Compare, Alloc > &m)
Extract values from a std::map to a DynList.
Definition ah-convert.H:806
DynList< std::pair< K, V > > map_to_DynList(const std::map< K, V, Compare, Alloc > &m)
Convert a std::map to a DynList of pairs.
Definition ah-convert.H:735
DynList< T > dyndlist_to_DynList(const DynDlist< T > &l)
Convert a DynDlist to a DynList.
Definition ah-convert.H:457
DynList< T > dynarray_to_DynList(const DynArray< T > &a)
Convert a DynArray to a DynList.
Definition ah-convert.H:187
DynList< Key > maptree_keys_to_DynList(const DynMapTree< Key, Data, Tree, Compare > &m)
Extract keys from a DynMapTree to a DynList.
DynArray< T > dyndlist_to_DynArray(const DynDlist< T > &l)
Convert a DynDlist to a DynArray.
Definition ah-convert.H:495
Array< std::pair< Key, Data > > maphash_to_Array(const MapOpenHash< Key, Data, Cmp, HashTable > &m)
Convert a MapOpenHash to an Array of pairs.
DynList< std::pair< Key, Data > > maphash_to_DynList(const MapOpenHash< Key, Data, Cmp, HashTable > &m)
Convert a MapOpenHash to a DynList of pairs.
Array< std::pair< Key, Data > > maptree_to_Array(const DynMapTree< Key, Data, Tree, Compare > &m)
Convert a DynMapTree to an Array of pairs.
DynDlist< T > vector_to_DynDlist(const std::vector< T > &v)
Convert a std::vector to a DynDlist.
Definition ah-convert.H:534
Array< T > deque_to_Array(const std::deque< T > &d)
Convert a std::deque to an Array.
Definition ah-convert.H:414
Array< T > init_to_Array(std::initializer_list< T > il)
Convert an initializer_list to an Array.
Definition ah-convert.H:858
std::vector< Key > sethash_to_vector(const DynHashTable< Key, HashTable, Cmp > &s)
Convert a DynHashTable (hash set) to a std::vector.
DynList< std::pair< Key, Data > > maptree_to_DynList(const DynMapTree< Key, Data, Tree, Compare > &m)
Convert a DynMapTree to a DynList of pairs.
Array< T > dynarray_to_Array(const DynArray< T > &a)
Convert a DynArray to an Array.
Definition ah-convert.H:353
DynList< Data > maptree_values_to_DynList(const DynMapTree< Key, Data, Tree, Compare > &m)
Extract values from a DynMapTree to a DynList.
DynArray< Key > settree_to_DynArray(const DynSetTree< Key, Tree, Compare > &s)
Convert a DynSetTree to a DynArray.
Definition ah-convert.H:975
std::map< Key, Data > maphash_to_stdmap(const MapOpenHash< Key, Data, Cmp, HashTable > &m)
Convert a MapOpenHash to a std::map.
Array< T > set_to_Array(const std::set< T, Compare, Alloc > &s)
Convert a std::set to an Array.
Definition ah-convert.H:666
DynList< T > vector_to_DynList(const std::vector< T > &v)
Convert a std::vector to a DynList.
Definition ah-convert.H:250
DynArray< T > dynlist_to_DynArray(const DynList< T > &l)
Convert a DynList to a DynArray.
Definition ah-convert.H:207
DynArray< T > array_to_DynArray(const Array< T > &a)
Convert an Array to a DynArray.
Definition ah-convert.H:333
DynSetTree< typename C::Item_Type > to_DynSetTree(const C &c)
Convert a container to a DynSetTree (AVL by default).
DynArray< T > deque_to_DynArray(const std::deque< T > &d)
Convert a std::deque to a DynArray.
Definition ah-convert.H:435
std::vector< Key > settree_to_vector(const DynSetTree< Key, Tree, Compare > &s)
Convert a DynSetTree to a std::vector.
Definition ah-convert.H:993
std::set< typename C::Item_Type > to_set(const C &c)
Convert a container to a std::set.
Definition ah-convert.H:709
Array< T > vector_to_Array(const std::vector< T > &v)
Convert a std::vector to an Array.
Definition ah-convert.H:270
DynList< Key > sethash_to_DynList(const DynHashTable< Key, HashTable, Cmp > &s)
Convert a DynHashTable (hash set) to a DynList.
Array< typename C::Item_Type > to_Array(const C &c)
Convert a container to an Array.
Definition ah-convert.H:167
DynDlist< T > dynlist_to_DynDlist(const DynList< T > &l)
Convert a DynList to a DynDlist.
Definition ah-convert.H:476
Array< Key > sethash_to_Array(const DynHashTable< Key, HashTable, Cmp > &s)
Convert a DynHashTable (hash set) to an Array.
DynList< Data > maphash_values_to_DynList(const MapOpenHash< Key, Data, Cmp, HashTable > &m)
Extract values from a MapOpenHash to a DynList.
DynList< Key > settree_to_DynList(const DynSetTree< Key, Tree, Compare > &s)
Convert a DynSetTree to a DynList.
Definition ah-convert.H:932
std::map< Key, Data > maptree_to_stdmap(const DynMapTree< Key, Data, Tree, Compare > &m)
Convert a DynMapTree to a std::map.
DynArray< T > vector_to_DynArray(const std::vector< T > &v)
Convert a std::vector to a DynArray.
Definition ah-convert.H:291
DynList< T > deque_to_DynList(const std::deque< T > &d)
Convert a std::deque to a DynList.
Definition ah-convert.H:394
Array< std::pair< K, V > > map_to_Array(const std::map< K, V, Compare, Alloc > &m)
Convert a std::map to an Array of pairs.
Definition ah-convert.H:759
DynList< Key > maphash_keys_to_DynList(const MapOpenHash< Key, Data, Cmp, HashTable > &m)
Extract keys from a MapOpenHash to a DynList.
DynList< T > set_to_DynList(const std::set< T, Compare, Alloc > &s)
Convert a std::set to a DynList.
Definition ah-convert.H:644
DynMapTree< K, V > stdmap_to_DynMapTree(const std::map< K, V, Compare, Alloc > &m)
Convert a std::map to a DynMapTree.
DynArray< T > set_to_DynArray(const std::set< T, Compare, Alloc > &s)
Convert a std::set to a DynArray.
Definition ah-convert.H:689
Array< Key > settree_to_Array(const DynSetTree< Key, Tree, Compare > &s)
Convert a DynSetTree to an Array.
Definition ah-convert.H:953
std::vector< typename C::Item_Type > to_vector(const C &c)
Convert a container to a std::vector.
Definition ah-convert.H:228
DynArray< Key > sethash_to_DynArray(const DynHashTable< Key, HashTable, Cmp > &s)
Convert a DynHashTable (hash set) to a DynArray.
std::deque< typename C::Item_Type > to_deque(const C &c)
Convert a container to a std::deque.
Definition ah-convert.H:374
DynArray< typename C::Item_Type > to_DynArray(const C &c)
Convert a container to a DynArray.
Definition ah-convert.H:313
DynList< T > maps(const C &c, Op op)
Classic map operation.
DynDlist< T > dynarray_to_DynDlist(const DynArray< T > &a)
Convert a DynArray to a DynDlist.
Definition ah-convert.H:514
DynList< T > init_to_DynList(std::initializer_list< T > il)
Convert an initializer_list to a DynList.
Definition ah-convert.H:833
DynArray< T > init_to_DynArray(std::initializer_list< T > il)
Convert an initializer_list to a DynArray.
Definition ah-convert.H:883
Open addressing hash map using double hashing.
Pair * insert(const Key &key, const Data &data)
Insert a key-value pair (copy semantics).