module tests.typecons;

import tern.typecons;

unittest 
{
    Nullable!uint a;
    assert(a == null);
    a = 2;
    assert(a++ == 2);
    assert(++a == 4);

    Nullable!(uint[]) b;
    b.unnullify();
    b ~= 1;
    assert(b == [1]);

    Nullable!(short*) c = cast(short*)&a;
    assert(c[0] == cast(const(short))4);
}

unittest
{
    auto a = atomic(10);
    a++;
    assert(a == 11);

    auto b = atomic(10);
    b += 1.0;
    assert(b.value == 11);

    auto c = atomic([1, 2, 3]);
    c[0] = c[0] + 1;
    assert(c[0] == 2);
    assert(c[0..$] == cast(shared(int[]))[2, 2, 3]);
}

unittest
{
    auto a = blind(10);
    assert(a.numNextOps() > 4);
    a++;
    assert(a == 11);
}