The attached (er. Can't seem to attach the file, I'll e-mail it to anyone
who's willing to take a look) has a bug on WinXP DMD 1.040. I can't seem
to reduce it at all as anything but trivial changes (like removing dead code)
seems to make the bug vanish.
The short description is I have some code that looks something like this:
bool Foo()
{
bool ret = true;
writef(ret,'\n');
return ret;
}
unittest
{
auto ret = Foo();
writef(ret,'\n');
assert(ret);
}
output:
true
false
Assert Failed
BCS wrote:
The attached (er. Can't seem to attach the file, I'll e-mail it to
anyone who's willing to take a look) has a bug on WinXP DMD 1.040. I
can't seem to reduce it at all as anything but trivial changes (like
removing dead code) seems to make the bug vanish.
The short description is I have some code that looks something like this:
bool Foo()
{
bool ret = true;
writef(ret,'\n');
return ret;
}
unittest
{
auto ret = Foo();
writef(ret,'\n');
assert(ret);
}
output:
true
false
Assert Failed
Prints
true
true
on Fedora-10, dmd v1.042
Reply to Georg,
BCS wrote:
The attached (er. Can't seem to attach the file, I'll e-mail it to
anyone who's willing to take a look) has a bug on WinXP DMD 1.040. I
can't seem to reduce it at all as anything but trivial changes (like
removing dead code) seems to make the bug vanish.
The short description is I have some code that looks something like
this:
bool Foo()
{
bool ret = true;
writef(ret,'\n');
return ret;
}
unittest
{
auto ret = Foo();
writef(ret,'\n');
assert(ret);
}
output:
true
false
Assert Failed
true
true
on Fedora-10, dmd v1.042
As I said, it's something like the above (but not exactly) and even minor
changes make it vanish so it's no surprise that exact code works.
Reply to Benjamin,
The attached (er. Can't seem to attach the file, I'll e-mail it to
anyone who's willing to take a look) has a bug on WinXP DMD 1.040. I
can't seem to reduce it at all as anything but trivial changes (like
removing dead code) seems to make the bug vanish.
The short description is I have some code that looks something like
this:
bool Foo()
{
bool ret = true;
writef(ret,'\n');
return ret;
}
unittest
{
auto ret = Foo();
writef(ret,'\n');
assert(ret);
}
output:
true
false
Assert Failed
I've posted the code here:
http://smplsite.com/filebox/error.zip
BCS Wrote:
I've posted the code here:
http://smplsite.com/filebox/error.zip
auto r = (rp == Point(-.5,1.5));
writef("---%s\n", r);
assert(r, "++"~rp.toString);
Is this it?
Reply to Kagamin,
BCS Wrote:
I've posted the code here:
http://smplsite.com/filebox/error.zip
writef("---%s\n", r);
assert(r, "++"~rp.toString);
Is this it?
Yes that's the spot that was (is?) generating an error. I'm not so sure anymore
as my system is no longer reproing but I seem to recall that it was printing
out true inside the opEquals function but false outside.
BTW the first function in that file had a bug and should be:
//Usable AlmostEqual function
bool ULP(T)(T A, T B, uint maxUlps)
{
if(A == B) return true;
static if(is(T == float)) { alias int Tint; Tint bound = 0x8000_0000; }
else static if(is(T == double)) { alias long Tint; Tint bound =
0x8000_0000_0000_0000;
}
else static assert(false, "only float or double can be used, not "~T.stringof);
// Make sure maxUlps is non-negative and small enough that the
// default NAN won't compare as equal to anything.
assert(maxUlps > 0 && maxUlps < 4 * 1024 * 1024);
auto aInt = *cast(Tint*)&A;
// Make aInt lexicographically ordered as a twos-complement int
if (aInt < 0) aInt = bound - aInt;
// Make bInt lexicographically ordered as a twos-complement int
auto bInt = *cast(Tint*)&B;
if (bInt < 0) bInt = bound - bInt;
auto ulp = abs(aInt - bInt);
if (ulp <= maxUlps) return true;
return false;
}
"BCS" <none anon.com> wrote in message
news:a6268ff56558cb9ab074256fbe news.digitalmars.com...
The attached (er. Can't seem to attach the file, I'll e-mail it to anyone
who's willing to take a look) has a bug on WinXP DMD 1.040. I can't seem
to reduce it at all as anything but trivial changes (like removing dead
code) seems to make the bug vanish.
The short description is I have some code that looks something like this:
bool Foo()
{
bool ret = true;
writef(ret,'\n');
return ret;
}
unittest
{
auto ret = Foo();
writef(ret,'\n');
assert(ret);
}
output:
true
false
Assert Failed
Prepending the following to the above:
import std.stdio;
void main() {}
I got the following on WinXP 32-bit DMD 1.041:
true
true
Reply to Nick,
"BCS" <none anon.com> wrote in message
news:a6268ff56558cb9ab074256fbe news.digitalmars.com...
The attached (er. Can't seem to attach the file, I'll e-mail it to
anyone who's willing to take a look)
I got the following on WinXP 32-bit DMD 1.041:
true
true
try the version that actuly has the bug:
http://smplsite.com/filebox/error.zip
"BCS" <ao pathlink.com> wrote in message
news:78ccfa2d3f7098cb9acac6a471c6 news.digitalmars.com...
Reply to Nick,
"BCS" <none anon.com> wrote in message
news:a6268ff56558cb9ab074256fbe news.digitalmars.com...
The attached (er. Can't seem to attach the file, I'll e-mail it to
anyone who's willing to take a look)
I got the following on WinXP 32-bit DMD 1.041:
true
true
try the version that actuly has the bug:
http://smplsite.com/filebox/error.zip
Ok, WinXP 32-bit, and on both 1.040 and 1.041 (byte-for-byte identical
output on both), my output from go.bat was:
----------------------
D:\DevProject\Test\D\NewsgroupRequest\error>del *.obj
D:\DevProject\Test\D\NewsgroupRequest\error>dmd -c -unittest -Icairod
by_loop.d
[<%lg,%lg>|<%lg,%lg>]
D:\DevProject\Test\D\NewsgroupRequest\error>dmd -c -unittest -Icairod
output.d
[<%lg,%lg>|<%lg,%lg>]
D:\DevProject\Test\D\NewsgroupRequest\error>dmd -c -unittest -Icairod
graph.d
[<%lg,%lg>|<%lg,%lg>]
D:\DevProject\Test\D\NewsgroupRequest\error>dmd -c -unittest -Icairod geom.d
[<%lg,%lg>|<%lg,%lg>]
D:\DevProject\Test\D\NewsgroupRequest\error>dmd -c -unittest -Icairod
utmain.d
D:\DevProject\Test\D\NewsgroupRequest\error>dmd utmain.obj by_loop.obj
output.obj graph.obj geom.obj cairo.lib
D:\DevProject\Test\D\NewsgroupRequest\error>utmain
true
false
true
true
true
true
true
true
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
true
true
false
false
false
false
false
false
false
false
false
false
false
false
true
true
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
true
true
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
false
true
true
false
false
false
false
true
false
false
false
false
true
false
false
false
false
true
false
false
false
false
true
Reply to Nick,
Ok, WinXP 32-bit, and on both 1.040 and 1.041 (byte-for-byte identical
output on both), my output from go.bat was:
true
Hmm. IIRC my home box gave:
true
but I just ran it on my work boxes and got:
false
I'll have to recheck the home machine. With a bit more digging it seems that
right now I'm getting an almost equal error that writef was hiding by rounding.
I've already got a fuzzy equal so I guess I just need to do some tuning.