#include "../Tests.hpp"
#include "core/data/Array.hpp"

template class Core::Array<size_t, 3>;
using TestArray = Core::Array<size_t, 3>;

static void testToString1() {
    TestArray a;
    a[0] = 1;
    a[1] = 243;
    a[2] = 423;
    CORE_TEST_STRING("[1, 243, 423]", a);
}

static void testToString2() {
    Core::Array<int, 1> a;
    a[0] = 1;
    CORE_TEST_STRING("[1]", a);
}

static void testReadConst() {
    TestArray a;
    for(size_t i = 0; i < a.getLength(); i++) {
        a[i] = i;
    }
    const TestArray& c = a;
    for(size_t i = 0; i < c.getLength(); i++) {
        CORE_TEST_EQUAL(i, c[i]);
    }
}

static void testRangeFor() {
    TestArray a;
    for(size_t i = 0; i < a.getLength(); i++) {
        a[i] = i;
    }
    for(size_t& i : a) {
        i++;
    }
    for(size_t i = 0; i < a.getLength(); i++) {
        CORE_TEST_EQUAL(i + 1, a[i]);
    }
}

void Core::testArray() {
    testToString1();
    testToString2();
    testReadConst();
    testRangeFor();
}