98 lines
2.1 KiB
D
98 lines
2.1 KiB
D
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
module tanya.algorithm.tests.mutation;
|
|
|
|
import tanya.algorithm.mutation;
|
|
import tanya.range;
|
|
import tanya.test.stub;
|
|
|
|
// Returns advanced target
|
|
@nogc nothrow pure @safe unittest
|
|
{
|
|
int[5] input = [1, 2, 3, 4, 5];
|
|
assert(copy(input[3 .. 5], input[]).front == 3);
|
|
}
|
|
|
|
// Copies overlapping arrays
|
|
@nogc nothrow pure @safe unittest
|
|
{
|
|
import std.algorithm.comparison : equal;
|
|
|
|
int[6] actual = [1, 2, 3, 4, 5, 6];
|
|
const int[6] expected = [1, 2, 1, 2, 3, 4];
|
|
|
|
copy(actual[0 .. 4], actual[2 .. 6]);
|
|
assert(equal(actual[], expected[]));
|
|
}
|
|
|
|
@nogc nothrow pure @safe unittest
|
|
{
|
|
static assert(is(typeof(copy((ubyte[]).init, (ushort[]).init))));
|
|
static assert(!is(typeof(copy((ushort[]).init, (ubyte[]).init))));
|
|
}
|
|
|
|
@nogc nothrow pure @safe unittest
|
|
{
|
|
static struct OutPutRange
|
|
{
|
|
int value;
|
|
|
|
void opCall(int value) @nogc nothrow pure @safe
|
|
in
|
|
{
|
|
assert(this.value == 0);
|
|
}
|
|
do
|
|
{
|
|
this.value = value;
|
|
}
|
|
}
|
|
int[1] source = [5];
|
|
OutPutRange target;
|
|
|
|
assert(copy(source[], target).value == 5);
|
|
}
|
|
|
|
// [] is called where possible
|
|
@nogc nothrow pure @system unittest
|
|
{
|
|
static struct Slice
|
|
{
|
|
bool* slicingCalled;
|
|
|
|
int front() @nogc nothrow pure @safe
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
void front(int) @nogc nothrow pure @safe
|
|
{
|
|
}
|
|
|
|
void popFront() @nogc nothrow pure @safe
|
|
{
|
|
}
|
|
|
|
bool empty() @nogc nothrow pure @safe
|
|
{
|
|
return true;
|
|
}
|
|
|
|
void opIndexAssign(int) @nogc nothrow pure @safe
|
|
{
|
|
*this.slicingCalled = true;
|
|
}
|
|
}
|
|
bool slicingCalled;
|
|
auto range = Slice(&slicingCalled);
|
|
fill(range, 0);
|
|
assert(slicingCalled);
|
|
}
|
|
|
|
@nogc nothrow pure @safe unittest
|
|
{
|
|
NonCopyable[] nonCopyable;
|
|
initializeAll(nonCopyable);
|
|
}
|