Fix InputRanges for non-copyable elements
This commit is contained in:
@ -1,97 +0,0 @@
|
||||
/* 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.comparison;
|
||||
|
||||
import tanya.algorithm.comparison;
|
||||
import tanya.math;
|
||||
import tanya.range;
|
||||
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
static assert(!is(typeof(min(1, 1UL))));
|
||||
}
|
||||
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
assert(min(5, 3) == 3);
|
||||
assert(min(4, 4) == 4);
|
||||
assert(min(5.2, 3.0) == 3.0);
|
||||
|
||||
assert(min(5.2, double.nan) == 5.2);
|
||||
assert(min(double.nan, 3.0) == 3.0);
|
||||
assert(isNaN(min(double.nan, double.nan)));
|
||||
}
|
||||
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
assert(min(cast(ubyte[]) []).empty);
|
||||
}
|
||||
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
static assert(!is(typeof(max(1, 1UL))));
|
||||
}
|
||||
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
assert(max(5, 3) == 5);
|
||||
assert(max(4, 4) == 4);
|
||||
assert(max(5.2, 3.0) == 5.2);
|
||||
|
||||
assert(max(5.2, double.nan) == 5.2);
|
||||
assert(max(double.nan, 3.0) == 3.0);
|
||||
assert(isNaN(max(double.nan, double.nan)));
|
||||
}
|
||||
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
assert(max(cast(ubyte[]) []).empty);
|
||||
}
|
||||
|
||||
// min/max compare const and mutable structs.
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
static struct S
|
||||
{
|
||||
int s;
|
||||
|
||||
int opCmp(typeof(this) that) const @nogc nothrow pure @safe
|
||||
{
|
||||
return this.s - that.s;
|
||||
}
|
||||
}
|
||||
{
|
||||
const s1 = S(1);
|
||||
assert(min(s1, S(2)).s == 1);
|
||||
assert(max(s1, S(2)).s == 2);
|
||||
}
|
||||
{
|
||||
auto s2 = S(2), s3 = S(3);
|
||||
assert(min(s2, s3).s == 2);
|
||||
assert(max(s2, s3).s == 3);
|
||||
}
|
||||
}
|
||||
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
static struct OpCmp(int value)
|
||||
{
|
||||
int opCmp(OpCmp) @nogc nothrow pure @safe
|
||||
{
|
||||
return value;
|
||||
}
|
||||
}
|
||||
{
|
||||
OpCmp!(-1)[1] range;
|
||||
assert(compare(range[], range[]) < 0);
|
||||
}
|
||||
{
|
||||
OpCmp!1[1] range;
|
||||
assert(compare(range[], range[]) > 0);
|
||||
}
|
||||
{
|
||||
OpCmp!0[1] range;
|
||||
assert(compare(range[], range[]) == 0);
|
||||
}
|
||||
}
|
@ -17,7 +17,7 @@ import tanya.test.stub;
|
||||
// Copies overlapping arrays
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
import tanya.algorithm.comparison : equal;
|
||||
import std.algorithm.comparison : equal;
|
||||
|
||||
int[6] actual = [1, 2, 3, 4, 5, 6];
|
||||
const int[6] expected = [1, 2, 1, 2, 3, 4];
|
||||
@ -94,7 +94,7 @@ import tanya.test.stub;
|
||||
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
import tanya.algorithm.comparison : equal;
|
||||
import std.algorithm.comparison : equal;
|
||||
|
||||
const int[5] expected = [1, 2, 3, 4, 5];
|
||||
int[5] actual = [4, 5, 1, 2, 3];
|
||||
@ -106,7 +106,7 @@ import tanya.test.stub;
|
||||
// Doesn't cause an infinite loop if back is shorter than the front
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
import tanya.algorithm.comparison : equal;
|
||||
import std.algorithm.comparison : equal;
|
||||
|
||||
const int[5] expected = [1, 2, 3, 4, 5];
|
||||
int[5] actual = [3, 4, 5, 1, 2];
|
||||
@ -118,7 +118,7 @@ import tanya.test.stub;
|
||||
// Doesn't call .front on an empty front
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
import tanya.algorithm.comparison : equal;
|
||||
import std.algorithm.comparison : equal;
|
||||
|
||||
const int[2] expected = [2, 8];
|
||||
int[2] actual = expected;
|
||||
|
@ -3,7 +3,7 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
module tanya.container.tests.array;
|
||||
|
||||
import tanya.algorithm.comparison;
|
||||
import std.algorithm.comparison;
|
||||
import tanya.container.array;
|
||||
import tanya.memory.allocator;
|
||||
import tanya.test.stub;
|
||||
@ -187,10 +187,3 @@ import tanya.test.stub;
|
||||
}
|
||||
func(array);
|
||||
}
|
||||
|
||||
// Can have non-copyable elements
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
static assert(is(Array!NonCopyable));
|
||||
static assert(is(typeof({ Array!NonCopyable.init[0] = NonCopyable(); })));
|
||||
}
|
||||
|
@ -3,7 +3,7 @@
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
module tanya.net.tests.iface;
|
||||
|
||||
import tanya.algorithm.comparison;
|
||||
import std.algorithm.comparison;
|
||||
import tanya.net.iface;
|
||||
|
||||
@nogc nothrow @safe unittest
|
||||
|
Reference in New Issue
Block a user