Skip to content

Commit c6aa7e1

Browse files
authored
Merge pull request #4685 from wilzbach/std_algorithm_sorting
add unittest attributes to std.algorithm.sorting
2 parents 516f303 + 790aada commit c6aa7e1

File tree

1 file changed

+29
-29
lines changed

1 file changed

+29
-29
lines changed

std/algorithm/sorting.d

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ if (hasLength!(Range2) && hasSlicing!(Range2))
120120
}
121121

122122
///
123-
unittest
123+
@safe unittest
124124
{
125125
import std.range : assumeSorted;
126126
int[] a = [ 1, 2, 3 ];
@@ -337,7 +337,7 @@ if (is(typeof(ordered!less(values))))
337337
}
338338

339339
///
340-
unittest
340+
@safe unittest
341341
{
342342
assert(ordered(42, 42, 43));
343343
assert(!strictlyOrdered(43, 42, 45));
@@ -1186,7 +1186,7 @@ sort(alias less = "a < b", SwapStrategy ss = SwapStrategy.unstable,
11861186
}
11871187

11881188
///
1189-
unittest
1189+
@safe unittest
11901190
{
11911191
// Showcase stable sorting
11921192
import std.algorithm.mutation : SwapStrategy;
@@ -1196,7 +1196,7 @@ unittest
11961196
}
11971197

11981198
///
1199-
unittest
1199+
@safe unittest
12001200
{
12011201
// Sorting floating-point numbers in presence of NaN
12021202
double[] numbers = [-0.0, 3.0, -2.0, double.nan, 0.0, -double.nan];
@@ -1210,7 +1210,7 @@ unittest
12101210
assert(numbers.equal!isIdentical(sorted));
12111211
}
12121212

1213-
unittest
1213+
@safe unittest
12141214
{
12151215
import std.algorithm.internal : rndstuff;
12161216
import std.algorithm.mutation : swapRanges;
@@ -1229,8 +1229,8 @@ unittest
12291229
}
12301230

12311231
int i = 0;
1232-
bool greater2(int a, int b) { return a + i > b + i; }
1233-
bool delegate(int, int) greater = &greater2;
1232+
bool greater2(int a, int b) @safe { return a + i > b + i; }
1233+
auto greater = &greater2;
12341234
sort!(greater)(a);
12351235
assert(isSorted!(greater)(a));
12361236

@@ -1503,9 +1503,9 @@ private template TimSortImpl(alias pred, R)
15031503
alias T = ElementType!R;
15041504

15051505
alias less = binaryFun!pred;
1506-
bool greater(T a, T b){ return less(b, a); }
1507-
bool greaterEqual(T a, T b){ return !less(a, b); }
1508-
bool lessEqual(T a, T b){ return !less(b, a); }
1506+
alias greater = (a, b) => less(b, a);
1507+
alias greaterEqual = (a, b) => !less(a, b);
1508+
alias lessEqual = (a, b) => !less(b, a);
15091509

15101510
enum minimalMerge = 128;
15111511
enum minimalGallop = 7;
@@ -1515,7 +1515,7 @@ private template TimSortImpl(alias pred, R)
15151515
struct Slice{ size_t base, length; }
15161516

15171517
// Entry point for tim sort
1518-
void sort(R range, T[] temp)
1518+
void sort()(R range, T[] temp)
15191519
{
15201520
import std.algorithm.comparison : min;
15211521

@@ -1533,7 +1533,7 @@ private template TimSortImpl(alias pred, R)
15331533
size_t stackLen = 0;
15341534

15351535
// Allocate temporary memory if not provided by user
1536-
if (temp.length < minTemp) temp = uninitializedArray!(T[])(minTemp);
1536+
if (temp.length < minTemp) temp = () @trusted { return uninitializedArray!(T[])(minTemp); }();
15371537

15381538
for (size_t i = 0; i < range.length; )
15391539
{
@@ -1604,15 +1604,15 @@ private template TimSortImpl(alias pred, R)
16041604

16051605
// Calculates optimal value for minRun:
16061606
// take first 6 bits of n and add 1 if any lower bits are set
1607-
pure size_t minRunLength(size_t n)
1607+
size_t minRunLength()(size_t n)
16081608
{
16091609
immutable shift = bsr(n)-5;
16101610
auto result = (n>>shift) + !!(n & ~((1<<shift)-1));
16111611
return result;
16121612
}
16131613

16141614
// Returns length of first run in range
1615-
size_t firstRun(R range)
1615+
size_t firstRun()(R range)
16161616
out(ret)
16171617
{
16181618
assert(ret <= range.length);
@@ -1637,7 +1637,7 @@ private template TimSortImpl(alias pred, R)
16371637
}
16381638

16391639
// A binary insertion sort for building runs up to minRun length
1640-
void binaryInsertionSort(R range, size_t sortedLen = 1)
1640+
void binaryInsertionSort()(R range, size_t sortedLen = 1)
16411641
out
16421642
{
16431643
if (!__ctfe) assert(isSorted!pred(range));
@@ -1669,7 +1669,7 @@ private template TimSortImpl(alias pred, R)
16691669
}
16701670

16711671
// Merge two runs in stack (at, at + 1)
1672-
void mergeAt(R range, Slice[] stack, immutable size_t at, ref size_t minGallop, ref T[] temp)
1672+
void mergeAt()(R range, Slice[] stack, immutable size_t at, ref size_t minGallop, ref T[] temp)
16731673
in
16741674
{
16751675
assert(stack.length >= 2);
@@ -1691,7 +1691,7 @@ private template TimSortImpl(alias pred, R)
16911691

16921692
// Merge two runs in a range. Mid is the starting index of the second run.
16931693
// minGallop and temp are references; The calling function must receive the updated values.
1694-
void merge(R range, size_t mid, ref size_t minGallop, ref T[] temp)
1694+
void merge()(R range, size_t mid, ref size_t minGallop, ref T[] temp)
16951695
in
16961696
{
16971697
if (!__ctfe)
@@ -1726,7 +1726,7 @@ private template TimSortImpl(alias pred, R)
17261726
}
17271727

17281728
// Enlarge size of temporary memory if needed
1729-
T[] ensureCapacity(size_t minCapacity, T[] temp)
1729+
T[] ensureCapacity()(size_t minCapacity, T[] temp)
17301730
out(ret)
17311731
{
17321732
assert(ret.length >= minCapacity);
@@ -1740,14 +1740,14 @@ private template TimSortImpl(alias pred, R)
17401740
if (newSize < minCapacity) newSize = minCapacity;
17411741

17421742
if (__ctfe) temp.length = newSize;
1743-
else temp = uninitializedArray!(T[])(newSize);
1743+
else temp = () @trusted { return uninitializedArray!(T[])(newSize); }();
17441744
}
17451745
return temp;
17461746
}
17471747

17481748
// Merge front to back. Returns new value of minGallop.
17491749
// temp must be large enough to store range[0 .. mid]
1750-
size_t mergeLo(R range, immutable size_t mid, size_t minGallop, T[] temp)
1750+
size_t mergeLo()(R range, immutable size_t mid, size_t minGallop, T[] temp)
17511751
out
17521752
{
17531753
if (!__ctfe) assert(isSorted!pred(range));
@@ -1830,7 +1830,7 @@ private template TimSortImpl(alias pred, R)
18301830

18311831
// Merge back to front. Returns new value of minGallop.
18321832
// temp must be large enough to store range[mid .. range.length]
1833-
size_t mergeHi(R range, immutable size_t mid, size_t minGallop, T[] temp)
1833+
size_t mergeHi()(R range, immutable size_t mid, size_t minGallop, T[] temp)
18341834
out
18351835
{
18361836
if (!__ctfe) assert(isSorted!pred(range));
@@ -2013,7 +2013,7 @@ private template TimSortImpl(alias pred, R)
20132013
alias gallopReverseUpper = gallopSearch!( true, true);
20142014
}
20152015

2016-
unittest
2016+
@safe unittest
20172017
{
20182018
import std.random : Random, uniform, randomShuffle;
20192019

@@ -2024,7 +2024,7 @@ unittest
20242024
}
20252025

20262026
// Generates data especially for testing sorting with Timsort
2027-
static E[] genSampleData(uint seed)
2027+
static E[] genSampleData(uint seed) @safe
20282028
{
20292029
import std.algorithm.mutation : swap, swapRanges;
20302030

@@ -2088,7 +2088,7 @@ unittest
20882088
enum result = testSort(seed);
20892089
}
20902090

2091-
unittest
2091+
@safe unittest
20922092
{//bugzilla 4584
20932093
assert(isSorted!"a < b"(sort!("a < b", SwapStrategy.stable)(
20942094
[83, 42, 85, 86, 87, 22, 89, 30, 91, 46, 93, 94, 95, 6,
@@ -2097,7 +2097,7 @@ unittest
20972097

20982098
}
20992099

2100-
unittest
2100+
@safe unittest
21012101
{
21022102
//test stable sort + zip
21032103
import std.range;
@@ -2109,7 +2109,7 @@ unittest
21092109
assert(y == "aebcd"d);
21102110
}
21112111

2112-
unittest
2112+
@safe unittest
21132113
{
21142114
// Issue 14223
21152115
import std.range, std.array;
@@ -2223,15 +2223,15 @@ schwartzSort(alias transform, alias less = "a < b",
22232223
schwartzSort!"a[0]"(chars);
22242224
}
22252225

2226-
unittest
2226+
@safe unittest
22272227
{
22282228
// issue 5924
22292229
import std.typecons : Tuple;
22302230
Tuple!(char)[] chars;
22312231
schwartzSort!((Tuple!(char) c){ return c[0]; })(chars);
22322232
}
22332233

2234-
unittest
2234+
@safe unittest
22352235
{
22362236
import std.algorithm.iteration : map;
22372237
import std.math : log2;
@@ -2265,7 +2265,7 @@ unittest
22652265
assert(isSorted!("a > b")(map!(entropy)(arr)));
22662266
}
22672267

2268-
unittest
2268+
@safe unittest
22692269
{
22702270
import std.algorithm.iteration : map;
22712271
import std.math : log2;

0 commit comments

Comments
 (0)