Replace 'Issue XXX' with Bugzilla links

Make the links clickable, as was done in the DMD repository.
Also avoids any ambiguity w.r.t. where the issue is stored.
This commit is contained in:
Geod24 2020-04-10 17:12:58 +09:00
parent 4c85510313
commit 04f3979317
69 changed files with 1244 additions and 896 deletions

View file

@ -804,9 +804,10 @@ pure @safe unittest
assert(result > 0);
}
// cmp for string with custom predicate fails if distinct chars can compare equal
// https://issues.dlang.org/show_bug.cgi?id=18286
@nogc nothrow pure @safe unittest
{
// Issue 18286: cmp for string with custom predicate fails if distinct chars can compare equal
static bool ltCi(dchar a, dchar b)// less than, case insensitive
{
import std.ascii : toUpper;
@ -819,9 +820,10 @@ pure @safe unittest
static assert(cmp!ltCi("apple", "APPLE") == 0);
}
// for non-string ranges check that opCmp is evaluated only once per pair.
// https://issues.dlang.org/show_bug.cgi?id=18280
@nogc nothrow @safe unittest
{
// Issue 18280: for non-string ranges check that opCmp is evaluated only once per pair.
static int ctr = 0;
struct S
{

View file

@ -207,7 +207,7 @@ if (isBidirectionalRange!Range)
assert(counter == iota(-4, 5).length);
}
// issue 15891
// https://issues.dlang.org/show_bug.cgi?id=15891
@safe pure unittest
{
assert([1].map!(x=>[x].map!(y=>y)).cache.front.front == 1);
@ -356,7 +356,7 @@ private struct _Cache(R, bool bidir)
else
{
// needed, because the compiler cannot deduce, that 'caches' is initialized
// see issue 15891
// see https://issues.dlang.org/show_bug.cgi?id=15891
caches[0] = UE.init;
static if (bidir)
caches[1] = UE.init;
@ -395,7 +395,7 @@ private struct _Cache(R, bool bidir)
caches[0] = source.front;
else
{
// see issue 15891
// see https://issues.dlang.org/show_bug.cgi?id=15891
caches[0] = UE.init;
static if (bidir)
caches[1] = UE.init;
@ -409,7 +409,7 @@ private struct _Cache(R, bool bidir)
caches[1] = source.back;
else
{
// see issue 15891
// see https://issues.dlang.org/show_bug.cgi?id=15891
caches[0] = UE.init;
caches[1] = UE.init;
}
@ -516,7 +516,8 @@ if (fun.length >= 1)
alias _fun = unaryFun!fun;
alias _funs = AliasSeq!(_fun);
// Do the validation separately for single parameters due to DMD issue #15777.
// Do the validation separately for single parameters due to
// https://issues.dlang.org/show_bug.cgi?id=15777.
static assert(!is(typeof(_fun(RE.init)) == void),
"Mapping function(s) must not return void: " ~ _funs.stringof);
}
@ -567,10 +568,9 @@ it separately:
assert(equal(stringize([ 1, 2, 3, 4 ]), [ "1", "2", "3", "4" ]));
}
// Verify workaround for https://issues.dlang.org/show_bug.cgi?id=15777
@safe unittest
{
// Verify workaround for DMD #15777
import std.algorithm.mutation, std.string;
auto foo(string[] args)
{
@ -807,7 +807,7 @@ private struct MapResult(alias fun, Range)
assert(equal(ms2[0 .. 2], "日本"w));
assert(equal(ms3[0 .. 2], "HE"));
// Issue 5753
// https://issues.dlang.org/show_bug.cgi?id=5753
static void voidFun(int) {}
static int nonvoidFun(int) { return 0; }
static assert(!__traits(compiles, map!voidFun([1])));
@ -816,7 +816,7 @@ private struct MapResult(alias fun, Range)
static assert(!__traits(compiles, map!(voidFun, nonvoidFun)([1])));
static assert(!__traits(compiles, map!(a => voidFun(a))([1])));
// Phobos issue #15480
// https://issues.dlang.org/show_bug.cgi?id=15480
auto dd = map!(z => z * z, c => c * c * c)([ 1, 2, 3, 4 ]);
assert(dd[0] == tuple(1, 1));
assert(dd[1] == tuple(4, 8));
@ -838,7 +838,7 @@ private struct MapResult(alias fun, Range)
{
import std.range : iota;
// Issue #10130 - map of iota with const step.
// https://issues.dlang.org/show_bug.cgi?id=10130 - map of iota with const step.
const step = 2;
assert(map!(i => i)(iota(0, 10, step)).walkLength == 5);
@ -1144,7 +1144,8 @@ public:
assert(b == [ 3, 4, 5 ]);
}
// #15358: application of `each` with >2 args (opApply)
// https://issues.dlang.org/show_bug.cgi?id=15358
// application of `each` with >2 args (opApply)
@system unittest
{
import std.range : lockstep;
@ -1159,7 +1160,8 @@ public:
assert(c == [7,8,9]);
}
// #15358: application of `each` with >2 args (range interface)
// https://issues.dlang.org/show_bug.cgi?id=15358
// application of `each` with >2 args (range interface)
@safe unittest
{
import std.range : zip;
@ -1174,7 +1176,8 @@ public:
assert(res == [9, 12, 15]);
}
// #16255: `each` on opApply doesn't support ref
// https://issues.dlang.org/show_bug.cgi?id=16255
// `each` on opApply doesn't support ref
@safe unittest
{
int[] dynamicArray = [1, 2, 3, 4, 5];
@ -1190,7 +1193,8 @@ public:
assert(staticArray == [3, 4, 5, 6, 7]);
}
// #16255: `each` on opApply doesn't support ref
// https://issues.dlang.org/show_bug.cgi?id=16255
// `each` on opApply doesn't support ref
@system unittest
{
struct S
@ -1206,7 +1210,8 @@ public:
assert(s.x == 2);
}
// #15357: `each` should behave similar to foreach
// https://issues.dlang.org/show_bug.cgi?id=15357
// `each` should behave similar to foreach
/// `each` works with iterable objects which provide an index variable, along with each element
@safe unittest
{
@ -1223,7 +1228,8 @@ public:
assert(arr.sum == 4.iota.sum);
}
// #15357: `each` should behave similar to foreach
// https://issues.dlang.org/show_bug.cgi?id=15357
// `each` should behave similar to foreach
@system unittest
{
import std.range : iota, lockstep;
@ -1250,7 +1256,8 @@ public:
assert(arrC.sum == 12);
}
// #15357: `each` should behave similar to foreach
// https://issues.dlang.org/show_bug.cgi?id=15357
// `each` should behave similar to foreach
@system unittest
{
import std.range : lockstep;
@ -1504,7 +1511,7 @@ private struct FilterResult(alias pred, Range)
assert(equal(filter!underX(list), [ 1, 2, 3, 4 ]));
}
// issue 19823
// https://issues.dlang.org/show_bug.cgi?id=19823
@safe unittest
{
import std.algorithm.comparison : equal;
@ -1795,7 +1802,7 @@ if (isInputRange!R)
import std.algorithm.comparison : equal;
import std.typecons : tuple;
// Issue 13857
// https://issues.dlang.org/show_bug.cgi?id=13857
immutable(int)[] a1 = [1,1,2,2,2,3,4,4,5,6,6,7,8,9,9,9];
auto g1 = group(a1);
assert(equal(g1, [ tuple(1, 2u), tuple(2, 3u), tuple(3, 1u),
@ -1803,12 +1810,12 @@ if (isInputRange!R)
tuple(7, 1u), tuple(8, 1u), tuple(9, 3u)
]));
// Issue 13162
// https://issues.dlang.org/show_bug.cgi?id=13162
immutable(ubyte)[] a2 = [1, 1, 1, 0, 0, 0];
auto g2 = a2.group;
assert(equal(g2, [ tuple(1, 3u), tuple(0, 3u) ]));
// Issue 10104
// https://issues.dlang.org/show_bug.cgi?id=10104
const a3 = [1, 1, 2, 2];
auto g3 = a3.group;
assert(equal(g3, [ tuple(1, 2u), tuple(2, 2u) ]));
@ -1851,7 +1858,8 @@ if (isInputRange!R)
assert(t.equal([ tuple(3, 1u), tuple(4, 3u), tuple(5, 1u) ]));
}
pure @safe unittest // issue 18657
// https://issues.dlang.org/show_bug.cgi?id=18657
pure @safe unittest
{
import std.algorithm.comparison : equal;
import std.range : refRange;
@ -2404,7 +2412,9 @@ version (none) // this example requires support for non-equivalence relations
assert(!range.empty); // Opposite of refInputRange test
}
/* Issue 93532 - General behavior of non-forward input ranges.
/* https://issues.dlang.org/show_bug.cgi?id=93532
* General behavior of non-forward input ranges.
*
* - If the same chunk is retrieved multiple times via front, the separate chunk
* instances refer to a shared range segment that advances as a single range.
* - Emptying a chunk via popFront does not implicitly popFront the chunk off
@ -2519,7 +2529,7 @@ version (none) // this example requires support for non-equivalence relations
}
}
// Issue 93532 - Using roundRobin/chunkBy
// https://issues.dlang.org/show_bug.cgi?id=93532 - Using roundRobin/chunkBy
{
import std.algorithm.comparison : equal;
import std.range : roundRobin;
@ -2543,7 +2553,7 @@ version (none) // this example requires support for non-equivalence relations
assert(r3.equal!equal(expected));
}
// Issue 93532 - Using merge/chunkBy
// https://issues.dlang.org/show_bug.cgi?id=93532 - Using merge/chunkBy
{
import std.algorithm.comparison : equal;
import std.algorithm.sorting : merge;
@ -2566,7 +2576,7 @@ version (none) // this example requires support for non-equivalence relations
assert(r3.equal!equal(expected));
}
// Issue 93532 - Using chunkBy/map-fold
// https://issues.dlang.org/show_bug.cgi?id=93532 - Using chunkBy/map-fold
{
import std.algorithm.comparison : equal;
import std.algorithm.iteration : fold, map;
@ -2590,7 +2600,10 @@ version (none) // this example requires support for non-equivalence relations
assert(r3.equal(expected));
}
// Issues 16169, 17966, 93532 - Using multiwayMerge/chunkBy
// https://issues.dlang.org/show_bug.cgi?id=16169
// https://issues.dlang.org/show_bug.cgi?id=17966
// https://issues.dlang.org/show_bug.cgi?id=93532
// Using multiwayMerge/chunkBy
{
import std.algorithm.comparison : equal;
import std.algorithm.setops : multiwayMerge;
@ -2630,7 +2643,7 @@ version (none) // this example requires support for non-equivalence relations
}
// Issue 13595
// https://issues.dlang.org/show_bug.cgi?id=13595
version (none) // This requires support for non-equivalence relations
@system unittest
{
@ -2644,7 +2657,7 @@ version (none) // This requires support for non-equivalence relations
]));
}
// Issue 13805
// https://issues.dlang.org/show_bug.cgi?id=13805
@system unittest
{
[""].map!((s) => s).chunkBy!((x, y) => true);
@ -2895,7 +2908,7 @@ if (isInputRange!RoR && isInputRange!(ElementType!RoR)
import std.algorithm.comparison : equal;
import std.range;
// Related to issue 8061
// Related to https://issues.dlang.org/show_bug.cgi?id=8061
auto r = joiner([
inputRangeObject("abc"),
inputRangeObject("def"),
@ -2932,7 +2945,7 @@ if (isInputRange!RoR && isInputRange!(ElementType!RoR)
assert(equal(u, "+-abc+-+-def+-"));
// Issue 13441: only(x) as separator
// https://issues.dlang.org/show_bug.cgi?id=13441: only(x) as separator
string[][] lines = [null];
lines
.joiner(only("b"))
@ -3292,11 +3305,11 @@ if (isInputRange!RoR && isInputRange!(ElementType!RoR))
import std.range.interfaces : inputRangeObject;
import std.range : retro;
// bugzilla 8240
// https://issues.dlang.org/show_bug.cgi?id=8240
assert(equal(joiner([inputRangeObject("")]), ""));
assert(equal(joiner([inputRangeObject("")]).retro, ""));
// issue 8792
// https://issues.dlang.org/show_bug.cgi?id=8792
auto b = [[1], [2], [3]];
auto jb = joiner(b);
auto js = jb.save;
@ -3517,7 +3530,7 @@ if (isInputRange!RoR && isInputRange!(ElementType!RoR))
to!string("Unexpected result: '%s'"d.algoFormat(result)));
}
// Issue 8061
// https://issues.dlang.org/show_bug.cgi?id=8061
@system unittest
{
import std.conv : to;
@ -3594,7 +3607,7 @@ if (isInputRange!RoR && isInputRange!(ElementType!RoR))
}
}
// Issue 19850
// https://issues.dlang.org/show_bug.cgi?id=19850
@safe pure unittest
{
assert([[0]].joiner.save.back == 0);
@ -3734,7 +3747,7 @@ if (fun.length >= 1)
alias E = Select!(isInputRange!R, ElementType!R, ForeachType!R);
static if (mustInitialize) bool initialized = false;
foreach (/+auto ref+/ E e; r) // @@@4707@@@
foreach (/+auto ref+/ E e; r) // https://issues.dlang.org/show_bug.cgi?id=4707
{
foreach (i, f; binfuns)
{
@ -3943,7 +3956,8 @@ The number of seeds must be correspondingly increased.
@safe unittest
{
// Issue #10408 - Two-function reduce of a const array.
// https://issues.dlang.org/show_bug.cgi?id= 10408
// Two-function reduce of a const array.
import std.algorithm.comparison : max, min;
import std.typecons : tuple, Tuple;
@ -3956,7 +3970,7 @@ The number of seeds must be correspondingly increased.
@safe unittest
{
//10709
// https://issues.dlang.org/show_bug.cgi?id=10709
import std.typecons : tuple, Tuple;
enum foo = "a + 0.5 * b";
@ -4023,7 +4037,8 @@ The number of seeds must be correspondingly increased.
assert(minmaxElement([1, 2, 3]) == tuple(1, 3));
}
@safe unittest //12569
// https://issues.dlang.org/show_bug.cgi?id=12569
@safe unittest
{
import std.algorithm.comparison : max, min;
import std.typecons : tuple;
@ -4044,7 +4059,8 @@ The number of seeds must be correspondingly increased.
static assert(!is(typeof(reduce!(all, all)(tuple(1, 1), "hello"))));
}
@safe unittest //13304
// https://issues.dlang.org/show_bug.cgi?id=13304
@safe unittest
{
int[] data;
static assert(is(typeof(reduce!((a, b) => a + b)(data))));
@ -4516,7 +4532,8 @@ The number of seeds must be correspondingly increased.
assert(minmaxElement([1, 2, 3]).equal([tuple(1, 1), tuple(1, 2), tuple(1, 3)]));
}
@safe unittest //12569
// https://issues.dlang.org/show_bug.cgi?id=12569
@safe unittest
{
import std.algorithm.comparison : equal, max, min;
import std.typecons : tuple;
@ -4539,7 +4556,8 @@ The number of seeds must be correspondingly increased.
static assert(!__traits(compiles, cumulativeFold!(all, all)("hello", tuple(1, 1))));
}
@safe unittest //13304
// https://issues.dlang.org/show_bug.cgi?id=13304
@safe unittest
{
int[] data;
assert(data.cumulativeFold!((a, b) => a + b).empty);
@ -4939,7 +4957,9 @@ if (is(typeof(binaryFun!pred(r.front, s)) : bool)
assert(split.front == "b ");
assert(split.back == "r ");
foreach (DummyType; AllDummyRanges) { // Bug 4408
// https://issues.dlang.org/show_bug.cgi?id=4408
foreach (DummyType; AllDummyRanges)
{
static if (isRandomAccessRange!DummyType)
{
static assert(isBidirectionalRange!DummyType);
@ -4966,7 +4986,8 @@ if (is(typeof(binaryFun!pred(r.front, s)) : bool)
assert(s.empty);
}
@safe unittest // issue 18470
// https://issues.dlang.org/show_bug.cgi?id=18470
@safe unittest
{
import std.algorithm.comparison : equal;
@ -4974,7 +4995,8 @@ if (is(typeof(binaryFun!pred(r.front, s)) : bool)
assert(w.splitter!((a, b) => a.front() == b)(1).equal([[[0]], [[2]]]));
}
@safe unittest // issue 18470
// https://issues.dlang.org/show_bug.cgi?id=18470
@safe unittest
{
import std.algorithm.comparison : equal;
import std.ascii : toLower;
@ -5140,11 +5162,11 @@ if (is(typeof(binaryFun!pred(r.front, s.front)) : bool)
assert(equal(sp6, ["", ""][]));
}
// https://issues.dlang.org/show_bug.cgi?id=10773
@safe unittest
{
import std.algorithm.comparison : equal;
// Issue 10773
auto s = splitter("abc", "");
assert(s.equal(["a", "b", "c"]));
}
@ -5385,7 +5407,7 @@ private struct SplitterResult(alias isTerminator, Range)
import std.algorithm.comparison : equal;
import std.uni : isWhite;
//@@@6791@@@
// https://issues.dlang.org/show_bug.cgi?id=6791
assert(equal(
splitter("là dove terminava quella valle"),
["là", "dove", "terminava", "quella", "valle"]
@ -5397,7 +5419,8 @@ private struct SplitterResult(alias isTerminator, Range)
assert(equal(splitter!"a=='本'"("日本語"), ["日", "語"]));
}
pure @safe unittest // issue 18657
// https://issues.dlang.org/show_bug.cgi?id=18657
pure @safe unittest
{
import std.algorithm.comparison : equal;
import std.range : refRange;
@ -5623,9 +5646,9 @@ if (isSomeString!Range ||
assert(dictionary["last".byCodeUnit]== 4);
}
// https://issues.dlang.org/show_bug.cgi?id=19238
@safe pure unittest
{
// issue 19238
import std.utf : byCodeUnit;
import std.algorithm.comparison : equal;
auto range = "hello world".byCodeUnit.splitter;
@ -6336,7 +6359,7 @@ if (isInputRange!R && Substs.length >= 2 && !is(CommonType!(Substs) == void))
}}
}
// issue 19207
// https://issues.dlang.org/show_bug.cgi?id=19207
@safe pure nothrow unittest
{
import std.algorithm.comparison : equal;
@ -6636,7 +6659,8 @@ private auto sumKahan(Result, R)(Result result, R r)
assert(sum(SList!double(1, 2, 3, 4)[]) == 10);
}
@safe pure nothrow unittest // 12434
// https://issues.dlang.org/show_bug.cgi?id=12434
@safe pure nothrow unittest
{
immutable a = [10, 20];
auto s1 = sum(a);
@ -6938,7 +6962,8 @@ private struct UniqResult(alias pred, Range)
}
}
@safe unittest // https://issues.dlang.org/show_bug.cgi?id=17264
// https://issues.dlang.org/show_bug.cgi?id=17264
@safe unittest
{
import std.algorithm.comparison : equal;

View file

@ -337,7 +337,7 @@ if (isInputRange!InputRange && isForwardRange!ForwardRange)
assert(equal(arr, [1, 2, 3, 4, 5, 6, 7]));
}
// Bugzilla 16959
// https://issues.dlang.org/show_bug.cgi?id=16959
auto arr = ['4', '5', '6', '7', '1', '2', '3'];
auto p = bringToFront(arr[0 .. 4], arr[4 .. $]);
@ -507,7 +507,8 @@ $(LINK2 http://en.cppreference.com/w/cpp/algorithm/copy_backward, STL's `copy_ba
assert(a[4 .. 9] == [6, 7, 8, 9, 10]);
}
{ // Test for bug 7898
// https://issues.dlang.org/show_bug.cgi?id=7898
{
enum v =
{
import std.algorithm;
@ -520,9 +521,9 @@ $(LINK2 http://en.cppreference.com/w/cpp/algorithm/copy_backward, STL's `copy_ba
}
}
// https://issues.dlang.org/show_bug.cgi?id=13650
@safe unittest
{
// Issue 13650
import std.meta : AliasSeq;
static foreach (Char; AliasSeq!(char, wchar, dchar))
{{
@ -534,7 +535,8 @@ $(LINK2 http://en.cppreference.com/w/cpp/algorithm/copy_backward, STL's `copy_ba
}}
}
@safe unittest // issue 18804
// https://issues.dlang.org/show_bug.cgi?id=18804
@safe unittest
{
static struct NullSink
{
@ -607,7 +609,8 @@ if ((isInputRange!Range && is(typeof(range.front = value)) ||
assert(a == [ 5, 5, 5, 5 ]);
}
// issue 16342, test fallback on mutable narrow strings
// test fallback on mutable narrow strings
// https://issues.dlang.org/show_bug.cgi?id=16342
@safe unittest
{
char[] chars = ['a', 'b'];
@ -670,7 +673,7 @@ if ((isInputRange!Range && is(typeof(range.front = value)) ||
chars[1 .. 3].fill(':');
assert(chars == "a::d");
}
// end issue 16342
// end https://issues.dlang.org/show_bug.cgi?id=16342
@safe unittest
{
@ -1136,7 +1139,7 @@ pure nothrow @safe @nogc unittest
move(s21, s22);
assert(s21 == s22);
});
// Issue 5661 test(1)
// https://issues.dlang.org/show_bug.cgi?id=5661 test(1)
static struct S3
{
static struct X { int n = 0; ~this(){n = 0;} }
@ -1149,7 +1152,7 @@ pure nothrow @safe @nogc unittest
assert(s31.x.n == 0);
assert(s32.x.n == 1);
// Issue 5661 test(2)
// https://issues.dlang.org/show_bug.cgi?id=5661 test(2)
static struct S4
{
static struct X { int n = 0; this(this){n = 0;} }
@ -1162,7 +1165,7 @@ pure nothrow @safe @nogc unittest
assert(s41.x.n == 0);
assert(s42.x.n == 1);
// Issue 13990 test
// https://issues.dlang.org/show_bug.cgi?id=13990 test
class S5;
S5 s51;
@ -1270,7 +1273,7 @@ private T moveImpl(T)(ref T source)
assert(s21 == s22);
});
// Issue 5661 test(1)
// https://issues.dlang.org/show_bug.cgi?id=5661 test(1)
static struct S3
{
static struct X { int n = 0; ~this(){n = 0;} }
@ -1283,7 +1286,7 @@ private T moveImpl(T)(ref T source)
assert(s31.x.n == 0);
assert(s32.x.n == 1);
// Issue 5661 test(2)
// https://issues.dlang.org/show_bug.cgi?id=5661 test(2)
static struct S4
{
static struct X { int n = 0; this(this){n = 0;} }
@ -1296,7 +1299,7 @@ private T moveImpl(T)(ref T source)
assert(s41.x.n == 0);
assert(s42.x.n == 1);
// Issue 13990 test
// https://issues.dlang.org/show_bug.cgi?id=13990 test
class S5;
S5 s51;
@ -1320,14 +1323,16 @@ private T moveImpl(T)(ref T source)
assert(a.n == 0);
}
@safe unittest//Issue 6217
// https://issues.dlang.org/show_bug.cgi?id=6217
@safe unittest
{
import std.algorithm.iteration : map;
auto x = map!"a"([1,2,3]);
x = move(x);
}
@safe unittest// Issue 8055
// https://issues.dlang.org/show_bug.cgi?id=8055
@safe unittest
{
static struct S
{
@ -1347,7 +1352,8 @@ private T moveImpl(T)(ref T source)
assert(b.x == 0);
}
@system unittest// Issue 8057
// https://issues.dlang.org/show_bug.cgi?id=8057
@system unittest
{
int n = 10;
struct S
@ -1369,7 +1375,7 @@ private T moveImpl(T)(ref T source)
auto b = foo(a);
assert(b.x == 1);
// Regression 8171
// Regression https://issues.dlang.org/show_bug.cgi?id=8171
static struct Array(T)
{
// nested struct has no member
@ -1476,7 +1482,7 @@ pure nothrow @nogc @system unittest
assert(val == 0);
}
// issue 18913
// https://issues.dlang.org/show_bug.cgi?id=18913
@safe unittest
{
static struct NoCopy
@ -1998,7 +2004,7 @@ private auto removeImpl(SwapStrategy s, Range, Offset...)(Range range, Offset of
import std.exception : assertThrown;
import std.range;
// http://d.puremagic.com/issues/show_bug.cgi?id=10173
// https://issues.dlang.org/show_bug.cgi?id=10173
int[] test = iota(0, 10).array();
assertThrown(remove!(SwapStrategy.stable)(test, tuple(2, 4), tuple(1, 3)));
assertThrown(remove!(SwapStrategy.unstable)(test, tuple(2, 4), tuple(1, 3)));
@ -2021,7 +2027,7 @@ private auto removeImpl(SwapStrategy s, Range, Offset...)(Range range, Offset of
a = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ];
assert(remove!(SwapStrategy.unstable)(a, 0, tuple(9, 11)) ==
[ 8, 1, 2, 3, 4, 5, 6, 7 ]);
// http://d.puremagic.com/issues/show_bug.cgi?id=5224
// https://issues.dlang.org/show_bug.cgi?id=5224
a = [ 1, 2, 3, 4 ];
assert(remove!(SwapStrategy.unstable)(a, 2) ==
[ 1, 2, 4 ]);
@ -2042,19 +2048,19 @@ private auto removeImpl(SwapStrategy s, Range, Offset...)(Range range, Offset of
== [0, 9, 8, 7, 4, 5]);
}
// https://issues.dlang.org/show_bug.cgi?id=11576
@safe unittest
{
// Issue 11576
auto arr = [1,2,3];
arr = arr.remove!(SwapStrategy.unstable)(2);
assert(arr == [1,2]);
}
// https://issues.dlang.org/show_bug.cgi?id=12889
@safe unittest
{
import std.range;
// Bug# 12889
int[1][] arr = [[0], [1], [2], [3], [4], [5], [6]];
auto orig = arr.dup;
foreach (i; iota(arr.length))
@ -2906,9 +2912,9 @@ if (isBlitAssignable!T && !is(typeof(lhs.proxySwap(rhs))))
static assert(!__traits(compiles, swap(const1, const2)));
}
// https://issues.dlang.org/show_bug.cgi?id=4789
@safe unittest
{
//Bug# 4789
int[1] s = [1];
swap(s, s);
@ -2946,23 +2952,24 @@ if (isBlitAssignable!T && !is(typeof(lhs.proxySwap(rhs))))
assert(s.i3 == 2);
}
// https://issues.dlang.org/show_bug.cgi?id=11853
@safe unittest
{
//11853
import std.traits : isAssignable;
alias T = Tuple!(int, double);
static assert(isAssignable!T);
}
// https://issues.dlang.org/show_bug.cgi?id=12024
@safe unittest
{
// 12024
import std.datetime;
SysTime a, b;
swap(a, b);
}
@system unittest // 9975
// https://issues.dlang.org/show_bug.cgi?id=9975
@system unittest
{
import std.exception : doesPointTo, mayPointTo;
static struct S2

View file

@ -569,7 +569,7 @@ if (isNarrowString!R1 && isNarrowString!R2)
assert(commonPrefix(to!S("hello, world"), to!T("hello, ")) == to!S("hello, "));
assert(commonPrefix(to!S("hello, world"), to!T("hello, world")) == to!S("hello, world"));
//Bug# 8890
// https://issues.dlang.org/show_bug.cgi?id=8890
assert(commonPrefix(to!S("Пиво"), to!T("Пони"))== to!S("П"));
assert(commonPrefix(to!S("Пони"), to!T("Пиво"))== to!S("П"));
assert(commonPrefix(to!S("Пиво"), to!T("Пиво"))== to!S("Пиво"));
@ -735,7 +735,7 @@ if (isInputRange!R && !isInfinite!R)
assert(count("日本語") == 3);
}
// Issue 11253
// https://issues.dlang.org/show_bug.cgi?id=11253
@safe nothrow unittest
{
assert([1, 2, 3].count([2, 3]) == 1);
@ -847,7 +847,8 @@ if (isForwardRange!R
}
}
//Because of @@@8804@@@: Avoids both "unreachable code" or "no return statement"
// Because of https://issues.dlang.org/show_bug.cgi?id=8804
// Avoids both "unreachable code" or "no return statement"
static if (isInfinite!R) assert(false, R.stringof ~ " must not be an"
~ " infinite range");
else return -1;
@ -951,7 +952,8 @@ if (isInputRange!R &&
}
}
//Because of @@@8804@@@: Avoids both "unreachable code" or "no return statement"
// Because of https://issues.dlang.org/show_bug.cgi?id=8804
// Avoids both "unreachable code" or "no return statement"
static if (isInfinite!R) assert(false, R.stringof ~ " must not be an"
~ " inifite range");
else return -1;
@ -1196,7 +1198,8 @@ if (isInputRange!R &&
import std.meta : AliasSeq;
static foreach (S; AliasSeq!(char[], wchar[], dchar[], string, wstring, dstring))
(){ // workaround slow optimizations for large functions @@@BUG@@@ 2396
(){ // workaround slow optimizations for large functions
// https://issues.dlang.org/show_bug.cgi?id=2396
assert(!endsWith(to!S("abc"), 'a'));
assert(endsWith(to!S("abc"), 'a', 'c') == 2);
assert(!endsWith(to!S("abc"), 'x', 'n', 'b'));
@ -1572,7 +1575,7 @@ if (isInputRange!InputRange &&
// If the haystack is a SortedRange we can use binary search to find the needle.
// Works only for the default find predicate and any SortedRange predicate.
// 8829 enhancement
// https://issues.dlang.org/show_bug.cgi?id=8829
import std.range : SortedRange;
static if (is(InputRange : SortedRange!TT, TT) && isDefaultPred)
{
@ -1658,7 +1661,7 @@ if (isInputRange!InputRange &&
}
else static if (isArray!R)
{
//10403 optimization
// https://issues.dlang.org/show_bug.cgi?id=10403 optimization
static if (isDefaultPred && isIntegral!EType && EType.sizeof == 1 && isIntegralNeedle)
{
import std.algorithm.comparison : max, min;
@ -1810,9 +1813,9 @@ if (isInputRange!InputRange &&
assertCTFEable!dg;
}
// https://issues.dlang.org/show_bug.cgi?id=11603
@safe unittest
{
// Bugzilla 11603
enum Foo : ubyte { A }
assert([Foo.A].find(Foo.A).empty == false);
@ -1978,7 +1981,7 @@ if (isForwardRange!R1 && isForwardRange!R2
// Binary search can be used to find the first occurence
// of the first element of the needle in haystack.
// When it is found O(walklength(needle)) steps are performed.
// 8829 enhancement
// https://issues.dlang.org/show_bug.cgi?id=8829 enhancement
import std.algorithm.comparison : mismatch;
import std.range : SortedRange;
static if (is(R1 == R2)
@ -2099,7 +2102,8 @@ if (isForwardRange!R1 && isForwardRange!R2
assert([C(1,0), C(2,0), C(3,1), C(4,0)].find!"a.x == b"(SList!int(2, 3)[]) == [C(2,0), C(3,1), C(4,0)]);
}
@safe unittest // issue 12470
// https://issues.dlang.org/show_bug.cgi?id=12470
@safe unittest
{
import std.array : replace;
inout(char)[] sanitize(inout(char)[] p)
@ -2167,7 +2171,7 @@ if (isForwardRange!R1 && isForwardRange!R2
assert(find([ 1, 2, 1, 2, 3, 3 ], SList!int(2, 3)[]) == [ 2, 3, 3 ]);
}
//Bug# 8334
// https://issues.dlang.org/show_bug.cgi?id=8334
@safe unittest
{
import std.algorithm.iteration : filter;
@ -2183,7 +2187,7 @@ if (isForwardRange!R1 && isForwardRange!R2
assert(find(haystack, filter!"true"(needle)).empty);
}
// issue 11013
// https://issues.dlang.org/show_bug.cgi?id=11013
@safe unittest
{
assert(find!"a == a"("abc","abc") == "abc");
@ -2665,7 +2669,7 @@ if (isForwardRange!(Range))
ReferenceForwardRange!int rfr = new ReferenceForwardRange!int([1, 2, 3, 2, 2, 3]);
assert(equal(findAdjacent(rfr), [2, 2, 3]));
// Issue 9350
// https://issues.dlang.org/show_bug.cgi?id=9350
assert(!repeat(1).findAdjacent().empty);
}
@ -2718,7 +2722,8 @@ if (isInputRange!InputRange && isForwardRange!ForwardRange)
assert(findAmong!("a == b")(b, [ 4, 6, 7 ][]).empty);
}
@system unittest // issue 19765
// https://issues.dlang.org/show_bug.cgi?id=19765
@system unittest
{
import std.range.interfaces : inputRangeObject;
auto choices = inputRangeObject("b");
@ -2781,7 +2786,8 @@ if (isForwardRange!R1 && isForwardRange!R2
assert(findSkip(s, "def") && s.empty);
}
@safe unittest // issue 19020
// https://issues.dlang.org/show_bug.cgi?id=19020
@safe unittest
{
static struct WrapperRange
{
@ -3313,7 +3319,7 @@ if (isForwardRange!R1 && isForwardRange!R2)
assert(split[1] == "one");
}
// issue 11013
// https://issues.dlang.org/show_bug.cgi?id=11013
@safe pure unittest
{
auto var = "abc";
@ -4842,7 +4848,8 @@ if (isInputRange!R &&
import std.range;
static foreach (S; AliasSeq!(char[], wchar[], dchar[], string, wstring, dstring))
(){ // workaround slow optimizations for large functions @@@BUG@@@ 2396
(){ // workaround slow optimizations for large functions
// https://issues.dlang.org/show_bug.cgi?id=2396
assert(!startsWith(to!S("abc"), 'c'));
assert(startsWith(to!S("abc"), 'a', 'c') == 1);
assert(!startsWith(to!S("abc"), 'x', 'n', 'b'));
@ -5125,7 +5132,8 @@ if (isInputRange!Range)
assert(equal(until!"a == 2"(a, No.openRight), [1, 2]));
}
@system unittest // bugzilla 13171
// https://issues.dlang.org/show_bug.cgi?id=13171
@system unittest
{
import std.algorithm.comparison : equal;
import std.range;
@ -5134,7 +5142,8 @@ if (isInputRange!Range)
assert(a == [4]);
}
@safe unittest // Issue 10460
// https://issues.dlang.org/show_bug.cgi?id=10460
@safe unittest
{
import std.algorithm.comparison : equal;
auto a = [1, 2, 3, 4];
@ -5143,14 +5152,16 @@ if (isInputRange!Range)
assert(equal(a, [0, 0, 3, 4]));
}
@safe unittest // Issue 13124
// https://issues.dlang.org/show_bug.cgi?id=13124
@safe unittest
{
import std.algorithm.comparison : among, equal;
auto s = "hello how\nare you";
assert(equal(s.until!(c => c.among!('\n', '\r')), "hello how"));
}
pure @safe unittest // issue 18657
// https://issues.dlang.org/show_bug.cgi?id=18657
pure @safe unittest
{
import std.algorithm.comparison : equal;
import std.range : refRange;

View file

@ -346,7 +346,7 @@ if (!allSatisfy!(isForwardRange, R1, R2) ||
}
}
// Issue 13091
// https://issues.dlang.org/show_bug.cgi?id=13091
pure nothrow @safe @nogc unittest
{
int[1] a = [1];
@ -421,9 +421,10 @@ if (ranges.length >= 2 &&
return Result(ranges);
}
// cartesian product of empty ranges should be empty
// https://issues.dlang.org/show_bug.cgi?id=10693
@safe unittest
{
// Issue 10693: cartesian product of empty ranges should be empty.
int[] a, b, c, d, e;
auto cprod = cartesianProduct(a,b,c,d,e);
assert(cprod.empty);
@ -445,9 +446,9 @@ if (ranges.length >= 2 &&
assert(cprod.init.empty);
}
// https://issues.dlang.org/show_bug.cgi?id=13393
@safe unittest
{
// Issue 13393
assert(!cartesianProduct([0],[0],[0]).save.empty);
}
@ -506,7 +507,7 @@ if (!allSatisfy!(isForwardRange, R1, R2, RR) ||
assert(canFind(N4, tuple(10, 3, 1, 2)));
}
// Issue 9878
// https://issues.dlang.org/show_bug.cgi?id=9878
///
@safe unittest
{
@ -545,7 +546,7 @@ pure @safe nothrow @nogc unittest
assert(D.front == front1);
}
// Issue 13935
// https://issues.dlang.org/show_bug.cgi?id=13935
@safe unittest
{
import std.algorithm.iteration : map;
@ -1109,7 +1110,8 @@ SetDifference!(less, R1, R2) setDifference(alias less = "a < b", R1, R2)
assert(setDifference(r, x).empty);
}
@safe unittest // Issue 10460
// https://issues.dlang.org/show_bug.cgi?id=10460
@safe unittest
{
import std.algorithm.comparison : equal;
@ -1429,7 +1431,8 @@ setSymmetricDifference(alias less = "a < b", R1, R2)
assert(equal(setSymmetricDifference(c, d), [1, 1, 2, 5, 6, 7, 9]));
}
@safe unittest // Issue 10460
// https://issues.dlang.org/show_bug.cgi?id=10460
@safe unittest
{
import std.algorithm.comparison : equal;

View file

@ -224,7 +224,7 @@ if (isForwardRange!(Range))
{
import std.conv : to;
// Issue 9457
// https://issues.dlang.org/show_bug.cgi?id=9457
auto x = "abcd";
assert(isSorted(x));
auto y = "acbd";
@ -1563,7 +1563,8 @@ private void multiSortImpl(Range, SwapStrategy ss, funs...)(Range r)
assert(pts4.multiSort!("a > b").release.equal(iota(10).retro));
}
@safe unittest //issue 9160 (L-value only comparators)
//https://issues.dlang.org/show_bug.cgi?id=9160 (L-value only comparators)
@safe unittest
{
static struct A
{
@ -1587,7 +1588,9 @@ private void multiSortImpl(Range, SwapStrategy ss, funs...)(Range r)
assert(points[1] == A(4, 1));
}
@safe unittest // issue 16179 (cannot access frame of function)
// cannot access frame of function
// https://issues.dlang.org/show_bug.cgi?id=16179
@safe unittest
{
auto arr = [[1, 2], [2, 0], [1, 0], [1, 1]];
int c = 3;
@ -1599,7 +1602,8 @@ private void multiSortImpl(Range, SwapStrategy ss, funs...)(Range r)
assert(arr == [[1, 0], [1, 1], [1, 2], [2, 0]]);
}
@safe unittest //Issue 16413 - @system comparison function
// https://issues.dlang.org/show_bug.cgi?id=16413 - @system comparison function
@safe unittest
{
bool lt(int a, int b) { return a < b; } static @system
auto a = [2, 1];
@ -2015,14 +2019,14 @@ if (((ss == SwapStrategy.unstable && (hasSwappableElements!Range ||
assert(isSorted!("toUpper(a) < toUpper(b)")(b));
{
// Issue 10317
// https://issues.dlang.org/show_bug.cgi?id=10317
enum E_10317 { a, b }
auto a_10317 = new E_10317[10];
sort(a_10317);
}
{
// Issue 7767
// https://issues.dlang.org/show_bug.cgi?id=7767
// Unstable sort should complete without an excessive number of predicate calls
// This would suggest it's running in quadratic time
@ -2137,7 +2141,7 @@ package(std) template HeapOps(alias less, Range)
alias lessFun = binaryFun!less;
//template because of @@@12410@@@
//template because of https://issues.dlang.org/show_bug.cgi?id=12410
void heapSort()(Range r)
{
// If true, there is nothing to do
@ -2152,7 +2156,7 @@ package(std) template HeapOps(alias less, Range)
}
}
//template because of @@@12410@@@
//template because of https://issues.dlang.org/show_bug.cgi?id=12410
void buildHeap()(Range r)
{
immutable n = r.length;
@ -2177,7 +2181,7 @@ package(std) template HeapOps(alias less, Range)
// Sifts down r[parent] (which is initially assumed to be messed up) so the
// heap property is restored for r[parent .. end].
// template because of @@@12410@@@
// template because of https://issues.dlang.org/show_bug.cgi?id=12410
void siftDown()(Range r, size_t parent, immutable size_t end)
{
for (;;)
@ -2205,7 +2209,7 @@ package(std) template HeapOps(alias less, Range)
// restored. So there are more swaps but fewer comparisons. Gains are made
// when the final position is likely to end toward the bottom of the heap,
// so not a lot of sifts back are performed.
//template because of @@@12410@@@
//template because of https://issues.dlang.org/show_bug.cgi?id=12410
void percolate()(Range r, size_t parent, immutable size_t end)
{
immutable root = parent;
@ -2873,8 +2877,9 @@ private template TimSortImpl(alias pred, R)
assert(result == true, "invalid result");
}
// https://issues.dlang.org/show_bug.cgi?id=4584
@safe unittest
{//bugzilla 4584
{
assert(isSorted!"a < b"(sort!("a < b", SwapStrategy.stable)(
[83, 42, 85, 86, 87, 22, 89, 30, 91, 46, 93, 94, 95, 6,
97, 14, 33, 10, 101, 102, 103, 26, 105, 106, 107, 6]
@ -2894,9 +2899,9 @@ private template TimSortImpl(alias pred, R)
assert(y == "aebcd"d);
}
// https://issues.dlang.org/show_bug.cgi?id=14223
@safe unittest
{
// Issue 14223
import std.array, std.range;
auto arr = chain(iota(0, 384), iota(0, 256), iota(0, 80), iota(0, 64), iota(0, 96)).array;
sort!("a < b", SwapStrategy.stable)(arr);
@ -3081,33 +3086,33 @@ if (isRandomAccessRange!R && hasLength!R && hasSwappableElements!R)
assert(strings == [ "three", "two", "one" ]);
}
// https://issues.dlang.org/show_bug.cgi?id=4909
@safe unittest
{
// issue 4909
import std.typecons : Tuple;
Tuple!(char)[] chars;
schwartzSort!"a[0]"(chars);
}
// https://issues.dlang.org/show_bug.cgi?id=5924
@safe unittest
{
// issue 5924
import std.typecons : Tuple;
Tuple!(char)[] chars;
schwartzSort!((Tuple!(char) c){ return c[0]; })(chars);
}
// https://issues.dlang.org/show_bug.cgi?id=13965
@safe unittest
{
// issue 13965
import std.typecons : Tuple;
Tuple!(char)[] chars;
schwartzSort!("a[0]", SwapStrategy.stable)(chars);
}
// https://issues.dlang.org/show_bug.cgi?id=13965
@safe unittest
{
// issue 13965
import std.algorithm.iteration : map;
import std.numeric : entropy;
@ -3670,7 +3675,7 @@ done:
}
}
// bug 12987
// https://issues.dlang.org/show_bug.cgi?id=12987
@safe unittest
{
int[] a = [ 25, 7, 9, 2, 0, 5, 21 ];
@ -3720,7 +3725,7 @@ if (isRandomAccessRange!(Range1) && hasLength!Range1 &&
assert(a == [0, 1, 2, 2, 3]);
}
// bug 15421
// https://issues.dlang.org/show_bug.cgi?id=15421
@system unittest
{
import std.algorithm.comparison : equal;
@ -3764,7 +3769,7 @@ if (isRandomAccessRange!(Range1) && hasLength!Range1 &&
}
}
// bug 15421
// https://issues.dlang.org/show_bug.cgi?id=15421
@system unittest
{
auto a = [ 9, 8, 0, 3, 5, 25, 43, 4, 2, 0, 7 ];
@ -3783,7 +3788,7 @@ if (isRandomAccessRange!(Range1) && hasLength!Range1 &&
assert(a == b);
}
// bug 12987
// https://issues.dlang.org/show_bug.cgi?id=12987
@system unittest
{
int[] a = [ 5, 7, 2, 6, 7 ];
@ -3793,7 +3798,7 @@ if (isRandomAccessRange!(Range1) && hasLength!Range1 &&
assert(t == [ 0, 1, 2, 2, 3 ]);
}
// bug 15420
// https://issues.dlang.org/show_bug.cgi?id=15420
@system unittest
{
int[] a = [ 5, 7, 2, 6, 7 ];
@ -4386,7 +4391,7 @@ if (isBidirectionalRange!BidirectionalRange &&
assert(a == [3,2,1]);
}
// Issue 13594
// https://issues.dlang.org/show_bug.cgi?id=13594
@safe unittest
{
int[3] a = [1,2,3];
@ -4561,9 +4566,9 @@ if (isBidirectionalRange!BidirectionalRange &&
assert(b == [ 1, 3, 2 ]);
}
// https://issues.dlang.org/show_bug.cgi?id=13594
@safe unittest
{
// Issue 13594
int[3] a = [1,2,3];
assert(nextEvenPermutation(a[]));
assert(a == [2,3,1]);