#313: ignore print -0 test errors on win32
--------------------+-------------------------------------------------------
Reporter: rurban | Owner: rurban
Type: todo | Status: new
Priority: normal | Milestone: 1.0
Component: none | Version: trunk
Severity: medium | Keywords:
Lang: | Patch: new
Platform: win32 |
--------------------+-------------------------------------------------------
The win32 msvcrt has a special limitation not to print -0 as -0, instead
it prints 0.
openbsd seems to have the same problem. cygwin is not affected, since it
uses newlib, which is similar to the glibc in this regard.
For now I fixed the failing tests, but there should be a workaround.
{{{
t\pmc\complex.t:
not ok 380 - sinh of 0-2i
# Have: 0.000000-0.909297i
# Want: -0.000000-0.909297i
not ok 381 - sinh of 0+2i
# Have: 0.000000+0.909297i
# Want: -0.000000+0.909297i
t\pmc\float.t:
not ok 23 - neg 0
# Failed test 'neg 0'
# at t\pmc\float.t line 509
# '0'
# doesn't match '/^-0/
# '
t\op\arithmetics.t:
not ok 7 - turn a native number into its negative
# Failed test 'turn a native number into its negative'
# at t\op\arithmetics.t line 175.
# got: '0
# 0
# -123.456789
# 123.456789
# 0
# 0
# -123.456789
# 123.456789
# '
# expected: '-0
# 0
# -123.456789
# 123.456789
# -0
# 0
# -123.456789
# 123.456789
# '
}}}
The internal numeric representation seems not to be affected.
In detail, this patch does not help. It's just the printer.
{{{
Index: parrot-svn/src/ops/math.ops
===================================================================
--- parrot-svn.orig/src/ops/math.ops
+++ parrot-svn/src/ops/math.ops
@@ -774,7 +774,17 @@ inline op neg(inout INT) :base_core {
}
inline op neg(inout NUM) :base_core {
+#ifdef WIN32
+ /* The msvcrt is broken for neg -0.0 */
+ if ($1 == -0.0) {
+ $1 = -0.0;
+ }
+ else {
+ $1 = - $1;
+ }
+#else
$1 = - $1;
+#endif
}
inline op neg(invar PMC) :base_core {
@@ -786,7 +796,17 @@ inline op neg(out INT, in INT) :base_cor
}
inline op neg(out NUM, in NUM) :base_core {
+#ifdef WIN32
+ /* The msvcrt is broken for neg -0.0 */
+ if ($2 == -0.0) {
+ $1 = -0.0;
+ }
+ else {
+ $1 = - $1;
+ }
+#else
$1 = - $2;
+#endif
}
inline op neg(out PMC, invar PMC) :base_core {
}}}
--
Ticket URL: <https://trac.parrot.org/parrot/ticket/313>
Parrot <https://trac.parrot.org/parrot/>
Parrot Development
_______________________________________________
parrot-tickets mailing list
[email protected]
http://lists.parrot.org/mailman/listinfo/parrot-tickets