mirror of
https://github.com/dlang/phobos.git
synced 2025-04-30 23:20:29 +03:00
medianOf restricted for now to only size_t indexes
This commit is contained in:
parent
1859f0dc19
commit
25dac83dbc
1 changed files with 12 additions and 6 deletions
|
@ -3150,7 +3150,7 @@ private void medianOf(
|
||||||
(Range r, Indexes i)
|
(Range r, Indexes i)
|
||||||
if (isRandomAccessRange!Range && hasLength!Range &&
|
if (isRandomAccessRange!Range && hasLength!Range &&
|
||||||
Indexes.length >= 2 && Indexes.length <= 5 &&
|
Indexes.length >= 2 && Indexes.length <= 5 &&
|
||||||
allSatisfy!(isIntegral, Indexes))
|
allSatisfy!(isUnsigned, Indexes))
|
||||||
{
|
{
|
||||||
assert(r.length >= Indexes.length);
|
assert(r.length >= Indexes.length);
|
||||||
import std.functional : binaryFun;
|
import std.functional : binaryFun;
|
||||||
|
@ -3159,24 +3159,29 @@ if (isRandomAccessRange!Range && hasLength!Range &&
|
||||||
import std.algorithm.mutation : swapAt;
|
import std.algorithm.mutation : swapAt;
|
||||||
|
|
||||||
alias a = i[0];
|
alias a = i[0];
|
||||||
|
static assert(is(typeof(a) == size_t));
|
||||||
static if (k >= 2)
|
static if (k >= 2)
|
||||||
{
|
{
|
||||||
alias b = i[1];
|
alias b = i[1];
|
||||||
|
static assert(is(typeof(b) == size_t));
|
||||||
assert(a != b);
|
assert(a != b);
|
||||||
}
|
}
|
||||||
static if (k >= 3)
|
static if (k >= 3)
|
||||||
{
|
{
|
||||||
alias c = i[2];
|
alias c = i[2];
|
||||||
|
static assert(is(typeof(c) == size_t));
|
||||||
assert(a != c && b != c);
|
assert(a != c && b != c);
|
||||||
}
|
}
|
||||||
static if (k >= 4)
|
static if (k >= 4)
|
||||||
{
|
{
|
||||||
alias d = i[3];
|
alias d = i[3];
|
||||||
|
static assert(is(typeof(d) == size_t));
|
||||||
assert(a != d && b != d && c != d);
|
assert(a != d && b != d && c != d);
|
||||||
}
|
}
|
||||||
static if (k >= 5)
|
static if (k >= 5)
|
||||||
{
|
{
|
||||||
alias e = i[4];
|
alias e = i[4];
|
||||||
|
static assert(is(typeof(e) == size_t));
|
||||||
assert(a != e && b != e && c != e && d != e);
|
assert(a != e && b != e && c != e && d != e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3269,23 +3274,24 @@ unittest
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
int[5] a = data;
|
int[5] a = data;
|
||||||
medianOf(a[], 0, 1);
|
medianOf(a[], size_t(0), size_t(1));
|
||||||
assert(a[0] <= a[1]);
|
assert(a[0] <= a[1]);
|
||||||
|
|
||||||
a[] = data[];
|
a[] = data[];
|
||||||
medianOf(a[], 0, 1, 2);
|
medianOf(a[], size_t(0), size_t(1), size_t(2));
|
||||||
assert(ordered(a[0], a[1], a[2]));
|
assert(ordered(a[0], a[1], a[2]));
|
||||||
|
|
||||||
a[] = data[];
|
a[] = data[];
|
||||||
medianOf(a[], 0, 1, 2, 3);
|
medianOf(a[], size_t(0), size_t(1), size_t(2), size_t(3));
|
||||||
assert(a[0] <= a[1] && a[1] <= a[2] && a[1] <= a[3]);
|
assert(a[0] <= a[1] && a[1] <= a[2] && a[1] <= a[3]);
|
||||||
|
|
||||||
a[] = data[];
|
a[] = data[];
|
||||||
medianOf!("a < b", Yes.leanRight)(a[], 0, 1, 2, 3);
|
medianOf!("a < b", Yes.leanRight)(a[], size_t(0), size_t(1),
|
||||||
|
size_t(2), size_t(3));
|
||||||
assert(a[0] <= a[2] && a[1] <= a[2] && a[2] <= a[3]);
|
assert(a[0] <= a[2] && a[1] <= a[2] && a[2] <= a[3]);
|
||||||
|
|
||||||
a[] = data[];
|
a[] = data[];
|
||||||
medianOf(a[], 0, 1, 2, 3, 4);
|
medianOf(a[], size_t(0), size_t(1), size_t(2), size_t(3), size_t(4));
|
||||||
assert(a[0] <= a[2] && a[1] <= a[2] && a[2] <= a[3] && a[2] <= a[4]);
|
assert(a[0] <= a[2] && a[1] <= a[2] && a[2] <= a[3] && a[2] <= a[4]);
|
||||||
}
|
}
|
||||||
while (nextPermutation(data[]));
|
while (nextPermutation(data[]));
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue