4#include "Stroika/Foundation/StroikaPreComp.h"
8#include "Stroika/Foundation/Containers/Collection.h"
19#include "Collection.h"
27using Characters::CompareOptions;
30 void SimplestCollectionTest_ ()
42 for ([[maybe_unused]]
int i : c) {
43 Assert (i == 3 or i == 13);
45 Assert (c.
size () == 2);
50 void UseParticularConcreteRepresentation_ ()
72 Assert (fruits.
size () == 4);
77 DbgTrace (
"sorted fruits={}"_f, fruits);
78 Assert (fruits.
size () == 4);
80 Assert (fruits.
SequentialEquals (initializer_list<String>{
"APPLE",
"apple",
"bananas",
"cherries"}));
84 DbgTrace (
"sorted case insensitive fruits={}"_f, fruits);
85 Assert (fruits.
SequentialEquals (initializer_list<String>{
"apple",
"APPLE",
"bananas",
"cherries"}) or
86 fruits.
SequentialEquals (initializer_list<String>{
"APPLE",
"apple",
"bananas",
"cherries"}));
92 void InterfaceWithSTLContainers_ ()
94 vector<int> aVector{1, 3, 5, 7, 9, 11};
99 Assert (c.SetEquals (aVector));
100 Assert (c.SequentialEquals (aVector) or not c.SequentialEquals (aVector));
102 vector<int> v2 = c.As<vector<int>> ();
109 void PrintTheContentsOfAContainerToTheTraceLog_ ()
121 void UseLinqLikeFunctionalAPIs_ ()
134 auto whereTestResult = tmp.
Where ([] (
int i) {
return i % 2 == 1; });
135 DbgTrace (
"whereTestResult={}"_f, whereTestResult);
141 Assert (d.SetEquals (initializer_list<int>{1, 2, 3, 4, 5}));
149 fruits +=
"cherries";
157 void CollectionOfThingsWithNoOpEqualsAndNotDefaultConstructibleEtc_ ()
159 struct MyFunnyObject_ {
160 MyFunnyObject_ () =
delete;
161 MyFunnyObject_ (
int )
165 MyFunnyObject_ (
const MyFunnyObject_&) =
default;
168 myObjects.
Add (MyFunnyObject_{3});
169 myObjects += MyFunnyObject_{4};
174 Assert (myObjects.
size () == 2);
175 myObjects.
Remove (MyFunnyObject_{3}, [] (
const MyFunnyObject_&,
const MyFunnyObject_&) {
return true; });
176 Assert (myObjects.
size () == 1);
188 void UpdatingContainerWhileIterating_ ()
195 fruits +=
"cherries";
203 Assert (i != fruits.
end ());
204 Assert (fruits.
size () == 4);
216 Assert (fruits.
size () == 2);
220void Samples::Containers::Collection::RunDemo ()
222 SimplestCollectionTest_ ();
223 UseParticularConcreteRepresentation_ ();
224 InterfaceWithSTLContainers_ ();
225 PrintTheContentsOfAContainerToTheTraceLog_ ();
226 UseLinqLikeFunctionalAPIs_ ();
227 CollectionOfThingsWithNoOpEqualsAndNotDefaultConstructibleEtc_ ();
228 UpdatingContainerWhileIterating_ ();
String is like std::u32string, except it is much easier to use, often much more space efficient,...
A Collection<T> is a container to manage an un-ordered collection of items, without equality defined ...
nonvirtual void Remove(ArgByValueType< value_type > item, EQUALS_COMPARER &&equalsComparer={})
Remove () the argument value (which must exist)
nonvirtual RESULT_CONTAINER Where(INCLUDE_PREDICATE &&includeIfTrue) const
return a subset of the Collection for which includeIfTrue returns true.
nonvirtual void Add(ArgByValueType< value_type > item)
Collection_stdforward_list<T> is an std::forward_list (singly linked list)-based concrete implementat...
A SortedCollection is a Collection<T> which remains sorted (iteration produces items sorted) even as ...
nonvirtual Iterator< T > Find(THAT_FUNCTION &&that, Execution::SequencePolicy seq=Execution::SequencePolicy::eDEFAULT) const
Run the argument bool-returning function (or lambda) on each element of the container,...
nonvirtual Iterable< T > Distinct(EQUALS_COMPARER &&equalsComparer=EQUALS_COMPARER{}) const
nonvirtual size_t size() const
Returns the number of items contained.
nonvirtual Iterator< T > begin() const
Support for ranged for, and STL syntax in general.
static bool SequentialEquals(const LHS_CONTAINER_TYPE &lhs, const RHS_CONTAINER_TYPE &rhs, EQUALS_COMPARER &&equalsComparer=EQUALS_COMPARER{}, bool useIterableSize=false)
static constexpr default_sentinel_t end() noexcept
Support for ranged for, and STL syntax in general.
An Iterator<T> is a copyable object which allows traversing the contents of some container....
Create a format-string (see std::wformat_string or Stroika FormatString, or python 'f' strings.
very similar to ThreeWayComparer but returns true if less