home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / icon / dos / src / tests / gener.icn < prev    next >
Text File  |  1992-02-09  |  3KB  |  100 lines

  1. ##    gener.icn -- test generation in parallel with inserts/deletes
  2. #
  3. #     This is a torture test for the set generation code.  Items are inserted
  4. #     in or deleted from the set while the set is being generated.  We check
  5. #     every item not inserted or deleted is generated exactly once, and every
  6. #     other item is generated no more than once.
  7. #
  8. #     If every line of output says '[ok]', the test has passed.  "gener -v"
  9. #     gives a little more information; in this case, the output is sensitive
  10. #     to the runtime system's configuration parameters.
  11.  
  12.  
  13. global verbose
  14.  
  15.  
  16. procedure main (args)
  17.    if args[1] == "-v" then
  18.       verbose := 1
  19.    every tdel (41 | 619 | 991,  3 | 11 |  23)
  20.    every tins (40 | 103 | 233,  239 | 419 | 503,  3 | 11 | 23)
  21.    write ("[done]")
  22.    end
  23.  
  24.  
  25. ##  tins (init, limit, n) -- test insertions
  26. #
  27. #   The initial set consists of the integers 1 through <init>.
  28. #   Then the set is generated, and <n> more integers are added
  29. #   for each element generated until the set reaches <limit>
  30. #   entries.
  31.  
  32. procedure tins (init, limit, n)
  33.    writes ("test insert:",
  34.       right(init,6), ",", right(limit,5), ",", right(n,3))
  35.    s := set()
  36.    every insert (s, 1 to init)
  37.    s1 := copy (s)
  38.    l := list()
  39.    every put (l, e := !s) do
  40.       if *s < limit then
  41.          every 1 to n do
  42.             insert (s, *s + 1)
  43.    check (s1, s, l)
  44.    end
  45.  
  46.  
  47. ##  tdel (limit, n) -- test deletions
  48. #
  49. #   The set initially contains the first <limit> integers.
  50. #   Then, for each one generated, n elements are deleted.
  51.  
  52. procedure tdel (limit, n)
  53.    writes ("test delete:", right(limit,6), ",", right(n,5))
  54.    s := set()
  55.    every insert (s, 1 to limit)
  56.    s2 := copy(s)
  57.    l := list()
  58.    k := 0
  59.    every put (l, !s) do
  60.       every 1 to n do 
  61.          delete (s, k +:= 1)
  62.    check (s, s2, l)
  63.    end
  64.  
  65.  
  66.  
  67. ##  check (s1, s2, l) -- check results of generation
  68. #
  69. #   s1    small set (before insertion / after deletion)
  70. #   s2  large set (after insertion / before deletion)
  71. #   l   generated list
  72.  
  73. procedure check (s1, s2, l)
  74.    sg := set(l)
  75.    if \verbose then
  76.        writes ("  \tsizes ",right(*s1,5)," <=",right(*sg,5)," <=",right(*s2,5))
  77.    ok := "\t[ok]"
  78.  
  79.    if *(s := (s1 -- sg)) > 0 then {
  80.       writes ("\n not generated:")
  81.       every writes (" ", !sort(s))
  82.       ok := &null
  83.       }
  84.  
  85.    if *(s := (sg -- s2)) > 0 then {
  86.       writes ("\n unknown values generated:")
  87.       every writes (" ", !sort(s))
  88.       ok := &null
  89.       }
  90.  
  91.    if *sg < *l then {
  92.       writes("\n generated twice:")
  93.       every e := !l do
  94.          delete(sg,member(sg,e)) | writes (" ", e)
  95.       ok := &null
  96.    }
  97.  
  98.    write (ok)
  99.    end
  100.