home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 5 / Apprentice-Release5.iso / Source Code / C / Applications / Moscow ML 1.31 / source code / mosml / src / mosmllib / test / real.sml < prev    next >
Encoding:
Text File  |  1996-07-03  |  4.6 KB  |  170 lines  |  [TEXT/R*ch]

  1. (* test/real.sml -- here we test only the `exotic' operations
  2.    PS 1995-03-24 *)
  3.  
  4. use "auxil.sml";
  5.  
  6. local 
  7.     open Real
  8. in    
  9.  
  10. val test1 = check(sign ~57.0 = ~1 andalso sign 99.0 = 1 andalso sign 0.0 = 0);
  11. val test2 = check(sameSign(~255.0, ~256.0) andalso sameSign(255.0, 256.0) 
  12.           andalso sameSign(0.0, 0.0));
  13. val test3 = check(sign 1E~300 = 1 andalso sign ~1E~300 = ~1
  14.           andalso sign 1E300 = 1 andalso sign ~1E300 = ~1);
  15.  
  16. local 
  17.     val args = [0.0, 99.0, ~5.0, 1.1, ~1.1, 1.9, ~1.9, 2.5, ~2.5, 
  18.         1000001.4999, ~1000001.4999];
  19. in
  20. val test4 = check(map ceil args  
  21.            = [0, 99, ~5, 2, ~1, 2, ~1, 3, ~2, 1000002, ~1000001]);
  22. val test5 = check(map floor args 
  23.            = [0, 99, ~5, 1, ~2, 1, ~2, 2, ~3, 1000001, ~1000002]);
  24. val test6 = check(map trunc args 
  25.            = [0, 99, ~5, 1, ~1, 1, ~1, 2, ~2, 1000001, ~1000001]);
  26. val test7 = check(map round args 
  27.            = [0, 99, ~5, 1, ~1, 2, ~2, 2, ~2, 1000001, ~1000001]);
  28. end
  29.  
  30. val test8 = check(0.0 = real 0 andalso 2.0 = real 2 andalso ~2.0 = real ~2);
  31.  
  32. fun chk(s, r) = 
  33.     let val eps = abs r * 1E~10 
  34.     in 
  35.     check'(fn _ => 
  36.            case fromString s of
  37.            SOME res => abs(res - r) <= eps
  38.                  | NONE     => false)
  39.     end
  40.  
  41. val test9 = 
  42.     List.map chk[("0", 0.0),
  43.          ("156", 156.0),
  44.          ("+156", 156.0), 
  45.          ("~156", ~156.0), 
  46.          ("-156", ~156.0), 
  47.          ("156.25", 156.25), 
  48.          ("+156.25", 156.25), 
  49.          ("~156.25", ~156.25), 
  50.          ("-156.25", ~156.25),
  51.  
  52.          (".25", 0.25),
  53.          ("+.25", 0.25),
  54.          ("~.25", ~0.25),
  55.           ("-.25", ~0.25),
  56.  
  57.           ("156E024", 156E024),
  58.           ("+156E024", 156E024),
  59.           ("~156E024", ~156E024),
  60.           ("-156E024", ~156E024),
  61.           ("156.25E024", 156.25E024),
  62.           ("+156.25E024", 156.25E024),
  63.           ("~156.25E024", ~156.25E024),
  64.           ("-156.25E024", ~156.25E024),
  65.           (".25E024", 0.25E024),
  66.           ("+.25E024", 0.25E024),
  67.           ("~.25E024", ~0.25E024),
  68.           ("-.25E024", ~0.25E024),
  69.  
  70.           ("156E+024", 156E024),
  71.           ("+156E+024", 156E024),
  72.           ("~156E+024", ~156E024),
  73.           ("-156E+024", ~156E024),
  74.           ("156.25E+024", 156.25E024),
  75.           ("+156.25E+024", 156.25E024),
  76.           ("~156.25E+024", ~156.25E024),
  77.           ("-156.25E+024", ~156.25E024),
  78.           (".25E+024", 0.25E024),
  79.           ("+.25E+024", 0.25E024),
  80.           ("~.25E+024", ~0.25E024),
  81.           ("-.25E+024", ~0.25E024),
  82.  
  83.           ("156E~024", 156E~024),
  84.           ("+156E~024", 156E~024),
  85.           ("~156E~024", ~156E~024),
  86.           ("-156E~024", ~156E~024),
  87.           ("156.25E~024", 156.25E~024),
  88.           ("+156.25E~024", 156.25E~024),
  89.           ("~156.25E~024", ~156.25E~024),
  90.           ("-156.25E~024", ~156.25E~024),
  91.           (".25E~024", 0.25E~024),
  92.           ("+.25E~024", 0.25E~024),
  93.           ("~.25E~024", ~0.25E~024),
  94.           ("-.25E~024", ~0.25E~024),
  95.  
  96.           ("156E-024", 156E~024),
  97.           ("+156E-024", 156E~024),
  98.           ("~156E-024", ~156E~024),
  99.           ("-156E-024", ~156E~024),
  100.           ("156.25E-024", 156.25E~024),
  101.           ("+156.25E-024", 156.25E~024),
  102.           ("~156.25E-024", ~156.25E~024),
  103.           ("-156.25E-024", ~156.25E~024),
  104.           (".25E-024", 0.25E~024),
  105.           ("+.25E-024", 0.25E~024),
  106.           ("~.25E-024", ~0.25E~024),
  107.           ("-.25E-024", ~0.25E~024),
  108.  
  109.           ("156e024", 156E024),
  110.           ("+156e024", 156E024),
  111.           ("~156e024", ~156E024),
  112.           ("-156e024", ~156E024),
  113.           ("156.25e024", 156.25E024),
  114.           ("+156.25e024", 156.25E024),
  115.           ("~156.25e024", ~156.25E024),
  116.           ("-156.25e024", ~156.25E024),
  117.           (".25e024", 0.25E024),
  118.           ("+.25e024", 0.25E024),
  119.           ("~.25e024", ~0.25E024),
  120.           ("-.25e024", ~0.25E024),
  121.  
  122.           ("156e+024", 156E024),
  123.           ("+156e+024", 156E024),
  124.           ("~156e+024", ~156E024),
  125.           ("-156e+024", ~156E024),
  126.           ("156.25e+024", 156.25E024),
  127.           ("+156.25e+024", 156.25E024),
  128.           ("~156.25e+024", ~156.25E024),
  129.           ("-156.25e+024", ~156.25E024),
  130.           (".25e+024", 0.25E024),
  131.           ("+.25e+024", 0.25E024),
  132.           ("~.25e+024", ~0.25E024),
  133.           ("-.25e+024", ~0.25E024),
  134.  
  135.           ("156e~024", 156E~024),
  136.           ("+156e~024", 156E~024),
  137.           ("~156e~024", ~156E~024),
  138.           ("-156e~024", ~156E~024),
  139.           ("156.25e~024", 156.25E~024),
  140.           ("+156.25e~024", 156.25E~024),
  141.           ("~156.25e~024", ~156.25E~024),
  142.           ("-156.25e~024", ~156.25E~024),
  143.           (".25e~024", 0.25E~024),
  144.           ("+.25e~024", 0.25E~024),
  145.           ("~.25e~024", ~0.25E~024),
  146.           ("-.25e~024", ~0.25E~024),
  147.  
  148.           ("156e-024", 156E~024),
  149.           ("+156e-024", 156E~024),
  150.           ("~156e-024", ~156E~024),
  151.           ("-156e-024", ~156E~024),
  152.           ("156.25e-024", 156.25E~024),
  153.           ("+156.25e-024", 156.25E~024),
  154.           ("~156.25e-024", ~156.25E~024),
  155.           ("-156.25e-024", ~156.25E~024),
  156.           (".25e-024", 0.25E~024),
  157.           ("+.25e-024", 0.25E~024),
  158.           ("~.25e-024", ~0.25E~024),
  159.           ("-.25e-024", ~0.25E~024)];
  160.  
  161. val test10 = 
  162.     List.map (fn s => case fromString s of NONE => "OK" | _ => "WRONG") 
  163.              ["20.E", 
  164.           "e10", "E10", 
  165.           "+e10", "+E10", 
  166.           "~e10", "~E10", 
  167.           "-e10", "-E10"];
  168.  
  169. end
  170.