@@ -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