mirror of
https://github.com/dlang/phobos.git
synced 2025-05-01 23:50:31 +03:00
Merge pull request #3634 from MartinNowak/merge_stable
Merge remote-tracking branch 'upstream/stable' into merge_stable
This commit is contained in:
commit
bb7e5fb3cc
5 changed files with 67 additions and 28 deletions
|
@ -2534,8 +2534,10 @@ template reduce(fun...) if (fun.length >= 1)
|
||||||
foreach (/+auto ref+/ E e; r) // @@@4707@@@
|
foreach (/+auto ref+/ E e; r) // @@@4707@@@
|
||||||
{
|
{
|
||||||
foreach (i, f; binfuns)
|
foreach (i, f; binfuns)
|
||||||
static assert(is(typeof(args[i] = f(args[i], e))),
|
{
|
||||||
|
static assert(!is(typeof(f(args[i], e))) || is(typeof(args[i] = f(args[i], e))),
|
||||||
algoFormat("Incompatible function/seed/element: %s/%s/%s", fullyQualifiedName!f, Args[i].stringof, E.stringof));
|
algoFormat("Incompatible function/seed/element: %s/%s/%s", fullyQualifiedName!f, Args[i].stringof, E.stringof));
|
||||||
|
}
|
||||||
|
|
||||||
static if (mustInitialize) if (initialized == false)
|
static if (mustInitialize) if (initialized == false)
|
||||||
{
|
{
|
||||||
|
|
|
@ -430,6 +430,7 @@ assert(std.algorithm.equal(sl[], ["a", "b", "c", "d", "e"]));
|
||||||
|
|
||||||
size_t insertAfter(Stuff)(Range r, Stuff stuff)
|
size_t insertAfter(Stuff)(Range r, Stuff stuff)
|
||||||
{
|
{
|
||||||
|
initialize();
|
||||||
if (!_first)
|
if (!_first)
|
||||||
{
|
{
|
||||||
enforce(!r._head);
|
enforce(!r._head);
|
||||||
|
@ -761,3 +762,11 @@ unittest
|
||||||
r.front = 1; //test frontAssign
|
r.front = 1; //test frontAssign
|
||||||
assert(r.front == 1);
|
assert(r.front == 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
unittest
|
||||||
|
{
|
||||||
|
// issue 14920
|
||||||
|
SList!int s;
|
||||||
|
s.insertAfter(s[], 1);
|
||||||
|
assert(s.front == 1);
|
||||||
|
}
|
||||||
|
|
|
@ -90,7 +90,7 @@ auto tempCString(To = char, From)(From str)
|
||||||
|
|
||||||
alias CF = Unqual!(ElementEncodingType!From);
|
alias CF = Unqual!(ElementEncodingType!From);
|
||||||
|
|
||||||
enum To* useStack = null;
|
enum To* useStack = () @trusted { return cast(To*)size_t.max; }();
|
||||||
|
|
||||||
static struct Res
|
static struct Res
|
||||||
{
|
{
|
||||||
|
@ -182,7 +182,14 @@ auto tempCString(To = char, From)(From str)
|
||||||
}
|
}
|
||||||
import std.utf : byUTF;
|
import std.utf : byUTF;
|
||||||
static if (isSomeString!From)
|
static if (isSomeString!From)
|
||||||
|
{
|
||||||
auto r = cast(const(CF)[])str; // because inout(CF) causes problems with byUTF
|
auto r = cast(const(CF)[])str; // because inout(CF) causes problems with byUTF
|
||||||
|
if (r is null) // Bugzilla 14980
|
||||||
|
{
|
||||||
|
res._ptr = null;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
}
|
||||||
else
|
else
|
||||||
alias r = str;
|
alias r = str;
|
||||||
foreach (const c; byUTF!(Unqual!To)(r))
|
foreach (const c; byUTF!(Unqual!To)(r))
|
||||||
|
@ -232,8 +239,14 @@ nothrow @nogc unittest
|
||||||
assert(tempCString(abc[].byWchar).buffPtr.asArray == abc);
|
assert(tempCString(abc[].byWchar).buffPtr.asArray == abc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Bugzilla 14980
|
||||||
|
nothrow @nogc unittest
|
||||||
|
{
|
||||||
|
const(char[]) str = null;
|
||||||
|
auto res = tempCString(str);
|
||||||
|
const char* ptr = res;
|
||||||
|
assert(ptr is null);
|
||||||
|
}
|
||||||
|
|
||||||
version(Windows)
|
version(Windows)
|
||||||
alias tempCStringW = tempCString!(wchar, const(char)[]);
|
alias tempCStringW = tempCString!(wchar, const(char)[]);
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2824,36 +2824,13 @@ auto generate(Fun)(Fun fun)
|
||||||
return Generator!(Fun)(fun);
|
return Generator!(Fun)(fun);
|
||||||
}
|
}
|
||||||
|
|
||||||
///
|
/// ditto
|
||||||
auto generate(alias fun)()
|
auto generate(alias fun)()
|
||||||
if (isCallable!fun)
|
if (isCallable!fun)
|
||||||
{
|
{
|
||||||
return Generator!(fun)();
|
return Generator!(fun)();
|
||||||
}
|
}
|
||||||
|
|
||||||
//private struct Generator(bool onPopFront, bool runtime, Fun...)
|
|
||||||
private struct Generator(Fun...)
|
|
||||||
{
|
|
||||||
static assert(Fun.length == 1);
|
|
||||||
static assert(isInputRange!Generator);
|
|
||||||
|
|
||||||
private:
|
|
||||||
static if (is(Fun[0]))
|
|
||||||
Fun[0] fun;
|
|
||||||
else
|
|
||||||
alias fun = Fun[0];
|
|
||||||
|
|
||||||
public:
|
|
||||||
enum empty = false;
|
|
||||||
|
|
||||||
auto ref front() @property
|
|
||||||
{
|
|
||||||
return fun();
|
|
||||||
}
|
|
||||||
|
|
||||||
void popFront() { }
|
|
||||||
}
|
|
||||||
|
|
||||||
///
|
///
|
||||||
@safe pure unittest
|
@safe pure unittest
|
||||||
{
|
{
|
||||||
|
@ -2879,6 +2856,38 @@ public:
|
||||||
assert(equal(generate(infiniteIota(1, 4)).take(10), [1, 2, 3, 1, 2, 3, 1, 2, 3, 1]));
|
assert(equal(generate(infiniteIota(1, 4)).take(10), [1, 2, 3, 1, 2, 3, 1, 2, 3, 1]));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
///
|
||||||
|
unittest
|
||||||
|
{
|
||||||
|
import std.format, std.random;
|
||||||
|
|
||||||
|
auto r = generate!(() => uniform(0, 6)).take(10);
|
||||||
|
format("%(%s %)", r);
|
||||||
|
}
|
||||||
|
|
||||||
|
//private struct Generator(bool onPopFront, bool runtime, Fun...)
|
||||||
|
private struct Generator(Fun...)
|
||||||
|
{
|
||||||
|
static assert(Fun.length == 1);
|
||||||
|
static assert(isInputRange!Generator);
|
||||||
|
|
||||||
|
private:
|
||||||
|
static if (is(Fun[0]))
|
||||||
|
Fun[0] fun;
|
||||||
|
else
|
||||||
|
alias fun = Fun[0];
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum empty = false;
|
||||||
|
|
||||||
|
auto ref front() @property
|
||||||
|
{
|
||||||
|
return fun();
|
||||||
|
}
|
||||||
|
|
||||||
|
void popFront() { }
|
||||||
|
}
|
||||||
|
|
||||||
@safe unittest
|
@safe unittest
|
||||||
{
|
{
|
||||||
import std.algorithm : equal;
|
import std.algorithm : equal;
|
||||||
|
|
|
@ -1061,6 +1061,12 @@ unittest
|
||||||
assert(results.length && results[0].family == AddressFamily.INET6);
|
assert(results.length && results[0].family == AddressFamily.INET6);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (getaddrinfoPointer)
|
||||||
|
{
|
||||||
|
auto results = getAddressInfo(null, "1234", AddressInfoFlags.PASSIVE, SocketType.STREAM, ProtocolType.TCP, AddressFamily.INET);
|
||||||
|
assert(results.length == 1 && results[0].address.toString() == "0.0.0.0:1234");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue