Fix tests that fail on version (BigEndian)

This commit is contained in:
Iain Buclaw 2019-04-20 20:49:21 +02:00 committed by ZombineDev
parent 9f49777977
commit 12854834f6
3 changed files with 33 additions and 11 deletions

View file

@ -408,11 +408,17 @@ class OutBuffer
{ {
OutBuffer buf = new OutBuffer(); OutBuffer buf = new OutBuffer();
"hello"w.copy(buf); "hello"w.copy(buf);
assert(buf.toBytes() == "h\x00e\x00l\x00l\x00o\x00"); version (LittleEndian)
assert(buf.toBytes() == "h\x00e\x00l\x00l\x00o\x00");
version (BigEndian)
assert(buf.toBytes() == "\x00h\x00e\x00l\x00l\x00o");
} }
{ {
OutBuffer buf = new OutBuffer(); OutBuffer buf = new OutBuffer();
"hello"d.copy(buf); "hello"d.copy(buf);
assert(buf.toBytes() == "h\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00"); version (LittleEndian)
assert(buf.toBytes() == "h\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o\x00\x00\x00");
version (BigEndian)
assert(buf.toBytes() == "\x00\x00\x00h\x00\x00\x00e\x00\x00\x00l\x00\x00\x00l\x00\x00\x00o");
} }
} }

View file

@ -762,6 +762,8 @@ version (X86)
enum hasUnalignedReads = true; enum hasUnalignedReads = true;
else version (X86_64) else version (X86_64)
enum hasUnalignedReads = true; enum hasUnalignedReads = true;
else version (SystemZ)
enum hasUnalignedReads = true;
else else
enum hasUnalignedReads = false; // better be safe then sorry enum hasUnalignedReads = false; // better be safe then sorry
@ -1237,8 +1239,13 @@ pure nothrow:
T opIndex(size_t idx) inout T opIndex(size_t idx) inout
{ {
return __ctfe ? simpleIndex(idx) : T ret;
cast(inout(T))(cast(U*) origin)[idx]; version (LittleEndian)
ret = __ctfe ? simpleIndex(idx) :
cast(inout(T))(cast(U*) origin)[idx];
else
ret = simpleIndex(idx);
return ret;
} }
static if (isBitPacked!T) // lack of user-defined implicit conversion static if (isBitPacked!T) // lack of user-defined implicit conversion
@ -1251,10 +1258,15 @@ pure nothrow:
void opIndexAssign(TypeOfBitPacked!T val, size_t idx) void opIndexAssign(TypeOfBitPacked!T val, size_t idx)
{ {
if (__ctfe) version (LittleEndian)
simpleWrite(val, idx); {
if (__ctfe)
simpleWrite(val, idx);
else
(cast(U*) origin)[idx] = cast(U) val;
}
else else
(cast(U*) origin)[idx] = cast(U) val; simpleWrite(val, idx);
} }
} }
else else

View file

@ -2201,8 +2201,10 @@ private
mixin Check!("Chars"); mixin Check!("Chars");
dchar c; dchar c;
int n = -1; ptrdiff_t n = -1;
foreach (int i,dchar d; s) // 'i' must not be smaller than size_t because size_t is used internally in
// aApply.d and it will be cast e.g to (int *) which fails on BigEndian targets.
foreach (size_t i, dchar d; s)
{ {
if (!isChar(d)) if (!isChar(d))
{ {
@ -2238,8 +2240,10 @@ private
mixin Check!("Name"); mixin Check!("Name");
if (s.length == 0) fail(); if (s.length == 0) fail();
int n; ptrdiff_t n;
foreach (int i,dchar c;s) // 'i' must not be smaller than size_t because size_t is used internally in
// aApply.d and it will be cast e.g to (int *) which fails on BigEndian targets.
foreach (size_t i, dchar c; s)
{ {
if (c == '_' || c == ':' || isLetter(c)) continue; if (c == '_' || c == ':' || isLetter(c)) continue;
if (i == 0) fail(); if (i == 0) fail();