[M3devel] more m3tests failures

Olaf Wagner wagner at elegosoft.com
Sat Jan 5 21:00:05 CET 2008


I've looked into some more failures of m3tests, which I'd like to
present to the whole list: (All tests run on FreeBSD 6.3)

p035 is a scoping problem which was Ok with

   /usr/local/cm3/bin/cm3cg-5.4.0

but

   /usr/local/cm3/bin/cm3cg-d5.5.1

fails, so it must be caused by recent gcc changes. The check that fails is

   PROCEDURE foo (p: P; same: BOOLEAN) =
     BEGIN
       checkB (bar = p, same); checkB (bar # p, NOT same);
     END foo;
   PROCEDURE bar (<*UNUSED*> t: Text.T) =
     BEGIN
     END bar;
   BEGIN
     msg ("group M"); foo (bar, TRUE);
     msg ("group N"); foo (dummy, FALSE);
   END;

p040 fails due to differences in floating point precision; the numbers
on FreeBSD seem to have a higher precision.

+++ ../src/p0/p040/stdout.pgm   2003-03-08 11:14:03.000000000 +0100
@@ -964,85 +964,85 @@
    ToLongFloat => 0.1   / 3


-0.001234567890123456
+0.0012345678901235

-  FromLongFloat [Flo]    => 0.001234567890123
-  ToLongFloat => 0.001234567890123   / 17
-  FromLongFloat [AltFlo] => 0.001234567890123
-  ToLongFloat => 0.001234567890123   / 17
-  FromLongFloat [Sci]    => 1.234567890123456D-3
-  ToLongFloat => 0.001234567890123456   / 20
-  FromLongFloat [AltSci] => 1.234567890123456D-3
-  ToLongFloat => 0.001234567890123456   / 20
-  FromLongFloat [Mix]    => 0.001234567890123
-  ToLongFloat => 0.001234567890123   / 17
+  FromLongFloat [Flo]    => 0.001234567890124
+  ToLongFloat => 0.001234567890124   / 17
+  FromLongFloat [AltFlo] => 0.001234567890124
+  ToLongFloat => 0.001234567890124   / 17
+  FromLongFloat [Sci]    => 1.234567890123500D-3
+  ToLongFloat => 0.0012345678901235   / 20
+  FromLongFloat [AltSci] => 1.2345678901235D-3
+  ToLongFloat => 0.0012345678901235   / 18
+  FromLongFloat [Mix]    => 0.001234567890124
+  ToLongFloat => 0.001234567890124   / 17

I'm not sure here what to do, as well as for p070, which tests
fingerprints for procedures, and is not implemented in CM3. Do we
need that? From RTProcedure.m3:

PROCEDURE ToFingerprint (<*UNUSED*> p: Proc): Fingerprint.T =
   BEGIN
     <*ASSERT FALSE, "RTProcedure.ToFingerprint is not supported" *>
     RETURN Fingerprint.Zero; <*NOWARN*>
   END ToFingerprint;

PROCEDURE FromFingerprint (<*UNUSED*> READONLY fp: Fingerprint.T): Proc =
   BEGIN
     <*ASSERT FALSE, "RTProcedure.FromFingerprint is not supported" *>
     RETURN NIL; <*NOWARN*>
   END FromFingerprint;

Or should we deactivate that test?

p096 fails with

@@ -1,3 +1,2 @@
  "../src/Main.m3", line 27: default is not a procedure constant (m)
  1 error encountered
-Fatal Error: package build failed
--- p0/p096/stderr.build        2008-01-05 18:27:24.000000000 +0100
+++ ../src/p0/p096/stderr.build 2003-03-08 11:14:05.000000000 +0100

because of this code:

MODULE Main;

CONST K = T.m; L = Q;
TYPE TProc = PROCEDURE(s: T);
CONST A = ARRAY OF TProc{Q};

TYPE T = OBJECT METHODS m() := L; END;
   ST1 = T OBJECT OVERRIDES m := K END;
   (*** ILLEGAL *** ST2 = T OBJECT OVERRIDES m := TProc END; ***)
   ST3 = T OBJECT OVERRIDES m := A[0]; END;

PROCEDURE Q(s: T) = BEGIN EVAL s END Q;

VAR t: T;  st1: ST1;  st3: ST3;
BEGIN
   EVAL t;  EVAL st1;  EVAL st3;
END Main.

I think I can somehow understand the compiler here. Did this ever work?

p116 first fails because FlotMode procedures are not implemented by default:

+++ ../src/p1/p116/stderr.pgm   2003-03-08 11:13:53.000000000 +0100
@@ -1,11 +1,3 @@
-
-
-***
-*** runtime error:
-***    <*ASSERT*> failed: FloatMode.SetRounding not implemented
-***    file "../src/float/IEEE-default/FloatMode.m3", line 14
-***
-
  ---------------------------- REAL ---
     1.0/0.0 # 1.0/(-0.0) test OK
     1.0/0.0 = 1.0/(- (-0.0)) test OK

I think this should be tested conditionally depending on platform.
But then more checks fail:

@@ -25,14 +17,14 @@
     Class (MaxFinite*ten) test OK
     Finite (MaxFinite*ten) test OK
     IsNaN (MaxFinite*ten) test OK
-** Class (zero/zero) test not OK: FALSE should be TRUE
+   Class (zero/zero) test OK
     Finite (zero/zero) test OK
     IsNaN (zero/zero) test OK
     Sign (zero) test OK
     Sign (minusZero) test OK
-   Unordered (zero, NaN) test OK
+** Unordered (zero, NaN) test not OK: FALSE should be TRUE
     Unordered (zero, zero) test OK
-   Unordered (NaN, NaN) test OK
+** Unordered (NaN, NaN) test not OK: FALSE should be TRUE
     Differs (zero, NaN) test OK

which refers to the test lines

     BCheck("Class (zero/zero)", RealFloat.Class(x) =  
IEEEClass.QuietNaN, TRUE);
     BCheck("Unordered (zero, NaN)", RealFloat.Unordered(zero, NaN), TRUE);
     BCheck("Unordered (NaN, NaN)", RealFloat.Unordered(NaN, NaN), TRUE);

Especially the last one suprises me, but I'm no specialist in arithmetics.
Is this to be expected? Should we tolerate or can we fix it?

So far for now, I need to prepare dinner now,

Olaf
-- 
Olaf Wagner -- elego Software Solutions GmbH
                Gustav-Meyer-Allee 25 / Gebäude 12, 13355 Berlin, Germany
phone: +49 30 23 45 86 96  mobile: +49 177 2345 869  fax: +49 30 23 45 86 95
    http://www.elegosoft.com | Geschäftsführer: Olaf Wagner | Sitz: Berlin
Handelregister: Amtsgericht Charlottenburg HRB 77719 | USt-IdNr: DE163214194




More information about the M3devel mailing list