| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264 |
- module Tests;
- import Core.Std;
- import Core.Queue;
- import Core.Test;
- import Core.Types;
- import Core.Meta;
- import Core.ToString;
- template class Core::Queue<int, 5>;
- struct Tester final {
- static int ids;
- static int sum;
- int id;
- Tester() noexcept : id(++ids) {
- sum += id;
- }
- Tester(const Tester&) noexcept : id(++ids) {
- sum += id;
- }
- Tester(Tester&&) noexcept : id(++ids) {
- sum += id;
- }
- Tester& operator=(const Tester&) noexcept {
- return *this;
- }
- Tester& operator=(Tester&&) noexcept {
- return *this;
- }
- ~Tester() {
- sum -= id;
- }
- size_t toString(Core::StringBase& b) const {
- return b.addFormat("{}", id);
- }
- };
- int Tester::ids = 0;
- int Tester::sum = 0;
- static void resetTester() {
- Tester::ids = 0;
- Tester::sum = 0;
- }
- static void testReadAndWrite() {
- Core::Queue<int, 5> buffer;
- Core::testFalse(buffer.canRemove());
- Core::test(0, buffer.getLength());
- buffer.add(4);
- Core::test(1, buffer.getLength());
- Core::testTrue(buffer.canRemove());
- Core::test(4, buffer[0]);
- buffer.remove();
- Core::testFalse(buffer.canRemove());
- Core::test(0, buffer.getLength());
- }
- static void testOverflow() {
- Core::Queue<int, 3> buffer;
- buffer.add(1).add(2).add(3).add(4).add(5);
- Core::test(3, buffer.getLength());
- Core::test(1, buffer[0]);
- buffer.remove();
- Core::test(2, buffer.getLength());
- Core::test(2, buffer[0]);
- buffer.remove();
- Core::test(1, buffer.getLength());
- Core::test(3, buffer[0]);
- buffer.remove();
- Core::testFalse(buffer.canRemove());
- Core::test(0, buffer.getLength());
- }
- static void testRefill() {
- Core::Queue<int, 3> buffer;
- buffer.add(1).add(2).add(3).add(4);
- Core::test(3, buffer.getLength());
- Core::testTrue(buffer.canRemove());
- Core::test(1, buffer[0]);
- buffer.remove();
- Core::test(2, buffer[0]);
- buffer.remove();
- Core::test(3, buffer[0]);
- buffer.remove();
- Core::test(0, buffer.getLength());
- Core::testFalse(buffer.canRemove());
- buffer.add(5).add(6);
- Core::test(2, buffer.getLength());
- Core::testTrue(buffer.canRemove());
- Core::test(5, buffer[0]);
- buffer.remove();
- Core::test(6, buffer[0]);
- buffer.remove();
- Core::testFalse(buffer.canRemove());
- Core::test(0, buffer.getLength());
- }
- static void testClear() {
- Core::Queue<int, 3> buffer;
- buffer.add(1).add(2);
- Core::test(2, buffer.getLength());
- buffer.clear();
- Core::testFalse(buffer.canRemove());
- Core::test(0, buffer.getLength());
- }
- static void testConstructDestruct() {
- resetTester();
- Core::Queue<Tester, 3> buffer;
- buffer.add();
- Core::test(1, Tester::sum);
- buffer.add();
- Core::test(3, Tester::sum);
- buffer.add();
- Core::test(6, Tester::sum);
- buffer.remove();
- Core::test(5, Tester::sum);
- buffer.remove();
- Core::test(3, Tester::sum);
- buffer.remove();
- Core::test(0, Tester::sum);
- }
- static void testCopyDestruct() {
- resetTester();
- {
- Core::Queue<Tester, 3> buffer;
- buffer.add();
- Core::test(1, Tester::sum);
- buffer.add();
- Core::test(3, Tester::sum);
- buffer.add();
- Core::test(6, Tester::sum);
- {
- Core::Queue<Tester, 3> copy = buffer;
- Core::test(6 + 4 + 5 + 6, Tester::sum);
- }
- Core::test(6, Tester::sum);
- }
- Core::test(0, Tester::sum);
- }
- static void testCopyAssignmentDestruct() {
- resetTester();
- {
- Core::Queue<Tester, 3> buffer;
- buffer.add();
- Core::test(1, Tester::sum);
- buffer.add();
- Core::test(3, Tester::sum);
- buffer.add();
- Core::test(6, Tester::sum);
- {
- Core::Queue<Tester, 3> copy;
- copy = buffer;
- Core::test(6 + 4 + 5 + 6, Tester::sum);
- }
- Core::test(6, Tester::sum);
- }
- Core::test(0, Tester::sum);
- }
- static void testMoveDestruct() {
- resetTester();
- {
- Core::Queue<Tester, 3> buffer;
- buffer.add();
- Core::test(1, Tester::sum);
- buffer.add();
- Core::test(3, Tester::sum);
- buffer.add();
- Core::test(6, Tester::sum);
- {
- Core::Queue<Tester, 3> move = Core::move(buffer);
- Core::test(4 + 5 + 6, Tester::sum);
- Core::test(0, buffer.getLength());
- }
- Core::test(0, Tester::sum);
- }
- Core::test(0, Tester::sum);
- }
- static void testMoveAssignmentDestruct() {
- resetTester();
- {
- Core::Queue<Tester, 3> buffer;
- buffer.add();
- Core::test(1, Tester::sum);
- buffer.add();
- Core::test(3, Tester::sum);
- buffer.add();
- Core::test(6, Tester::sum);
- {
- Core::Queue<Tester, 3> move;
- move = Core::move(buffer);
- Core::test(4 + 5 + 6, Tester::sum);
- Core::test(0, buffer.getLength());
- }
- Core::test(0, Tester::sum);
- }
- Core::test(0, Tester::sum);
- }
- static void testOverall() {
- resetTester();
- Core::Queue<Tester, 3> buffer;
- buffer.add().add().add();
- Core::testString("[1, 2, 3]", buffer);
- Core::test(3, buffer.getLength());
- Core::test(6, Tester::sum);
- buffer.remove();
- Core::testString("[2, 3]", buffer);
- Core::test(2, buffer.getLength());
- Core::test(5, Tester::sum);
- buffer.add();
- Core::testString("[2, 3, 4]", buffer);
- Core::test(3, buffer.getLength());
- Core::test(9, Tester::sum);
- buffer.remove();
- Core::testString("[3, 4]", buffer);
- Core::test(2, buffer.getLength());
- Core::test(7, Tester::sum);
- buffer.add();
- Core::testString("[3, 4, 5]", buffer);
- Core::test(3, buffer.getLength());
- Core::test(12, Tester::sum);
- buffer.remove();
- Core::testString("[4, 5]", buffer);
- Core::test(2, buffer.getLength());
- Core::test(9, Tester::sum);
- buffer.clear();
- Core::testString("[]", buffer);
- Core::test(0, buffer.getLength());
- Core::test(0, Tester::sum);
- }
- void testQueue() {
- testReadAndWrite();
- testOverflow();
- testRefill();
- testClear();
- testConstructDestruct();
- testCopyDestruct();
- testCopyAssignmentDestruct();
- testMoveDestruct();
- testMoveAssignmentDestruct();
- testOverall();
- }
|