feat(algorithms): add more iterator algorithm and the corresponding testing

This commit is contained in:
2024-12-21 21:35:59 +08:00
parent a68a6d16b6
commit 04bb4be901
2 changed files with 205 additions and 13 deletions

View File

@ -3,6 +3,7 @@
#include "Algorithms/Algorithms.h"
#include "Containers/Array.h"
#include "Containers/List.h"
#include "Ranges/Factory.h"
#include "Miscellaneous/AssertionMacros.h"
NAMESPACE_REDCRAFT_BEGIN
@ -15,20 +16,109 @@ NAMESPACE_PRIVATE_BEGIN
void TestBasic()
{
TArray<int> Arr = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
{
TArray<int> Arr = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto Iter = Arr.Begin();
auto Iter = Arr.Begin();
Algorithms::Advance(Iter, 5);
Algorithms::Advance(Iter, 5);
always_check(*Iter == 5);
always_check(*Iter == 5);
always_check(Algorithms::Distance(Arr.Begin(), Iter) == 5);
always_check(Algorithms::Distance(Arr.Begin(), Iter) == 5);
always_check(Algorithms::Distance(Arr) == 10);
always_check(Algorithms::Distance(Arr) == 10);
always_check(*Algorithms::Next(Iter, 2) == 7);
always_check(*Algorithms::Prev(Iter, 2) == 3);
always_check(*Algorithms::Next(Iter) == 6);
always_check(*Algorithms::Next(Iter, 2) == 7);
always_check(*Algorithms::Prev(Iter) == 4);
always_check(*Algorithms::Prev(Iter, 2) == 3);
always_check(Algorithms::Next(Iter, Arr.End()) == Arr.End());
always_check(Algorithms::Next(Iter, 16, Arr.End()) == Arr.End());
always_check(Algorithms::Prev(Iter, 16, Arr.Begin()) == Arr.Begin());
Iter = Arr.Begin();
Algorithms::Advance(Iter, Arr.End());
always_check(Iter == Arr.End());
Iter = Arr.Begin();
always_check(Algorithms::Advance(Iter, 16, Arr.End()) == 6);
always_check(Iter == Arr.End());
}
{
TList<int> Arr = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
auto Iter = Arr.Begin();
Algorithms::Advance(Iter, 5);
always_check(*Iter == 5);
always_check(Algorithms::Distance(Arr.Begin(), Iter) == 5);
always_check(Algorithms::Distance(Arr) == 10);
always_check(*Algorithms::Next(Iter) == 6);
always_check(*Algorithms::Next(Iter, 2) == 7);
always_check(*Algorithms::Prev(Iter) == 4);
always_check(*Algorithms::Prev(Iter, 2) == 3);
always_check(Algorithms::Next(Iter, Arr.End()) == Arr.End());
always_check(Algorithms::Next(Iter, 16, Arr.End()) == Arr.End());
always_check(Algorithms::Prev(Iter, 16, Arr.Begin()) == Arr.Begin());
Iter = Arr.Begin();
Algorithms::Advance(Iter, Arr.End());
always_check(Iter == Arr.End());
Iter = Arr.Begin();
always_check(Algorithms::Advance(Iter, 16, Arr.End()) == 6);
always_check(Iter == Arr.End());
}
{
auto Arr = Ranges::Iota(0, 10);
auto Iter = Arr.Begin();
Algorithms::Advance(Iter, 5);
always_check(*Iter == 5);
always_check(Algorithms::Distance(Arr.Begin(), Iter) == 5);
always_check(Algorithms::Distance(Arr) == 10);
always_check(*Algorithms::Next(Iter) == 6);
always_check(*Algorithms::Next(Iter, 2) == 7);
always_check(Algorithms::Next(Iter, Arr.End()) == Arr.End());
always_check(Algorithms::Next(Iter, 16, Arr.End()) == Arr.End());
Iter = Arr.Begin();
Algorithms::Advance(Iter, Arr.End());
always_check(Iter == Arr.End());
Iter = Arr.Begin();
always_check(Algorithms::Advance(Iter, 16, Arr.End()) == 6);
always_check(Iter == Arr.End());
}
}
NAMESPACE_PRIVATE_END