wrapprog.mod 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. MODULE WrapProg;
  2. // Smoke test for the new wrapper/time modules: StdChans, TimeString,
  3. // wrapclock, wraptime, wrapc. Exit 42.
  4. IMPORT StdChans, TimeString, wrapclock, wraptime, wrapc;
  5. IMPORT IOChan;
  6. FROM SYSTEM IMPORT ADDRESS;
  7. VAR ExitCode : INTEGER;
  8. VAR s, t : ARRAY [0..63] OF CHAR;
  9. VAR ts : wrapclock.timespec;
  10. VAR tv : wraptime.timeval;
  11. VAR tm : wraptime.tm;
  12. VAR sec, nano : LONGCARD;
  13. VAR ok : INTEGER;
  14. VAR n : INTEGER;
  15. VAR out : IOChan.ChanId;
  16. BEGIN
  17. (* StdChans: the current output channel is the standard one *)
  18. out := StdChans.OutChan();
  19. IOChan.WriteString(out, "wrappers ");
  20. IOChan.WriteLn(out);
  21. (* TimeString: a non-empty time string *)
  22. TimeString.GetTimeString(s);
  23. ok := 0;
  24. IF s[0] # CHR(0) THEN INC(ok) END;
  25. (* wrapclock: a timespec, read back *)
  26. ts := wrapclock.InitTimespec();
  27. ok := ok + wrapclock.GetTimeRealtime(ts);
  28. ok := ok + wrapclock.GetTimespec(ts, sec, nano);
  29. ok := ok + wrapclock.SetTimespec(ts, 5, 7);
  30. ok := ok + wrapclock.GetTimespec(ts, sec, nano);
  31. IF (sec = 5) AND (nano = 7) THEN INC(ok) END;
  32. ts := wrapclock.KillTimespec(ts);
  33. (* wraptime: timeval + localtime + field accessors *)
  34. tv := wraptime.InitTimeval();
  35. tm := wraptime.InitTM();
  36. ok := ok + wraptime.gettimeofday(tv, NIL);
  37. wraptime.SetTimeval(tv, 0, 0);
  38. IF wraptime.LocalTime(tv, tm) # NIL THEN INC(ok) END;
  39. IF wraptime.GetYear(tm) >= 1970 THEN INC(ok) END;
  40. tm := wraptime.KillTM(tm);
  41. tv := wraptime.KillTimeval(tv);
  42. (* wrapc: rand range, signbit, isfinite *)
  43. n := wrapc.getrand(10);
  44. IF (n >= 0) AND (n < 10) THEN INC(ok) END;
  45. IF wrapc.signbit(-1.0) = 1 THEN INC(ok) END;
  46. IF wrapc.isfinite(1.0) = 1 THEN INC(ok) END;
  47. IF ok >= 7 THEN ExitCode := 42 ELSE ExitCode := ok END
  48. END WrapProg.