(* DIGITAL EQUIPMENT CORPORATION CONFIDENTIAL AND PROPRIETARY *) (* File: StatTest.m3 *) (* Last modified on Sat Apr 7 00:13:36 1990 by muller *) (* modified on Fri Sep 29 10:30:51 1989 by kalsow *) (* modified on Sat Oct 24 20:31:08 1987 by stolfi *) MODULE StatTest EXPORTS Main; IMPORT Stat, Wr, Fmt, Math, Text; FROM Stdio IMPORT stderr; PROCEDURE Prt (name: Text.T; READONLY s: Stat.T) = BEGIN Wr.PutText (stderr, "\n\n" & name & ":\n "); Stat.Print (stderr, s); ASSERT (Stat.Num (s) = FLOAT (s.num), "Num"); ASSERT (Stat.Min (s) = s.minimum, "Min"); ASSERT (Stat.Max (s) = s.maximum, "Max"); ASSERT (Stat.Mean (s) = FLOAT (s.mean), "Mean"); ASSERT (Stat.Var (s) = FLOAT (s.variance), "Var"); Wr.PutText (stderr, "\n SDev(s) = " & Fmt.Real (Stat.SDev (s))); Wr.PutText (stderr, " RMS(s) = " & Fmt.Real (Stat.RMS (s))); END Prt; PROCEDURE Main () = CONST trials = 100; VAR ones, twos, vals, sqrs, sins, both, tmps: Stat.T; x, w: REAL; BEGIN w := 8.0e+0 * FLOAT (Math.atan (1.0d+0)) / FLOAT (trials); Stat.Init (ones); Stat.Init (twos); Stat.Init (vals); Stat.Init (sqrs); Stat.Init (sins); Stat.Init (both); FOR i := 0 TO trials - 1 DO x := FLOAT (i); Stat.Accum (ones, 1.0e+0); Stat.Accum (twos, 2.0e+0); Stat.Accum (vals, x); Stat.Accum (sqrs, x * x); Stat.Accum (sins, FLOAT (Math.sin (LONGFLOAT (x * w)))); Stat.Accum (both, 1.0e+0); Stat.Accum (both, FLOAT (Math.sin (LONGFLOAT (x * w)))); END; Prt ("Ones", ones); Prt ("Twos", twos); Prt ("Values", vals); Prt ("Squares", sqrs); Prt ("Sines", sins); Prt ("Ones&Sines", both); Stat.Init (tmps); Prt ("Nothing", tmps); tmps := Stat.Combine (ones, ones); Prt ("Ones&Ones", tmps); tmps := Stat.Combine (ones, twos); Prt ("Ones&Twos", tmps); tmps := Stat.Combine (ones, sins); Prt ("Ones&Sins", tmps); Wr.PutText (stderr, "\n\nDone.\n"); END Main; EXCEPTION ASSERT_FAILED (Text.T); <*INLINE*> PROCEDURE ASSERT (b: BOOLEAN; msg: Text.T := NIL) = BEGIN IF NOT b THEN RAISE ASSERT_FAILED (msg) END; END ASSERT; BEGIN Main (); END StatTest.