home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Power-Programmierung
/
CD1.mdf
/
icon
/
dos
/
src
/
tests
/
recent.icn
< prev
next >
Wrap
Text File
|
1992-02-09
|
7KB
|
264 lines
procedure main ()
sf([])
write(args(main))
write(args(write))
# show results of bitwise operations on various operand combinations
every i := 1 | '2' | "3" do {
write (
" i j ~j i & j i | j i ^ j i << j i >> j")
every j := 0 | 1 | 2 | 3 | 4 | 100 do {
write(right(i,8), right(j,9))
word (i)
word (j)
word (icom (j))
word (iand (i, j))
word (ior (i, j))
word (ixor (i, j))
word (ishift (i, j))
word (ishift (i, -j))
write ()
}
}
# test remove() and rename(), and print errors in case of malfunction
name1 := "temp1"
name2 := "temp2"
data := "Here's the data"
every remove (name1 | name2) # just in case
open (name1) & stop ("can't remove ", name1, " to initialize test")
open (name2) & stop ("can't remove ", name2, " to initialize test")
remove (name1) & stop ("successfully removed nonexistent file")
rename (name1, name2) & stop ("successfully renamed nonexistent file")
f := open (name1, "w") | stop ("can't open ",name1," for write")
write (f, data)
close (f)
f := open (name1) | stop ("can't open ",name1," after write")
s := read (f) | ""
close(f)
s == data | stop ("data lost after write")
rename (name1, name2) | stop ("can't rename(",name1,",",name2,")")
f := open (name2) | stop ("can't open ",name2," after rename")
s := read (f) | ""
close(f)
s == data | stop ("data lost after rename")
remove (name1) & stop ("remove succeeded on file already renamed")
remove (name2) | stop ("can't remove renamed file")
open (name1) & stop (name1, " still around at end of test")
open (name2) & stop (name2, " still around at end of test")
# test seek() and where()
f := open("concord.dat")
write(image(seek(f,11)))
write(where(f))
write(image(reads(f,10)))
write(where(f))
write(where(f))
seek(f,-2)
write(where(f))
write(image(reads(f,1)))
write(where(f))
# test ord() and char(), and print messages if wrong results
s := string (&cset)
every i := 0 to 255 do {
c := char (i)
n := ord (c)
if n ~= i | c ~== s[i+1] then
write ("oops -- ord/char failure at ",i)
}
if char("47") ~== char(47) then
write ("oops -- type conversion failed in char()")
if ord(9) ~= ord("9") then
write ("oops -- type conversion failed in ord()")
every ferr (char, -65536 | -337 | -1 | 256 | 4713 | 65536 | 123456, 205)
every ferr (char, "abc" | &lcase | &errout | [], 101)
every ferr (ord, "" | "ab" | "antidisestablishmentarianism" | 47, 205)
every ferr (ord, &output | table(), 103)
# test getenv()
write(getenv("HOME") | write("getenv failed"))
write(getenv("foo") | write("getenv failed"))
# test sorting
a := list(1) # different sizes to make identification easy
b := list(2)
c := list(3)
d := list(4)
e := &lcase ++ &ucase
f := &lcase ++ &ucase
g := '123456789'
h := &digits
A := sort([h,g,a,c,b,d,f,e,&lcase,[],&cset,&ascii])
every write(image(!A))
# test varargs
write("p(1):")
p(1)
write("p(1, 2):")
p(1, 2)
write("p(1, 2, 3):")
p(1, 2, 3)
write("p(1, 2, 3, 4, 5):")
p(1, 2, 3, 4, 5)
write("q(1, 2):")
q(1, 2)
# test Version 7 table features
write("t := table(\"default\") --> ", image(t := table("default")) |
"failure")
show(t)
write("insert(t, 3, 4) --> ", image(insert(t, 3, 4)) | "failure")
write("insert(t, \"xyz\", \"abc\") --> ", image(insert(t, "xyz", "abc")) |
"failure")
write("insert(t, &digits) --> ", image(insert(t, &digits)) | "failure")
show(t)
write("t[\"xyz\"] := \"new value\" --> ", image(t["xyz"] := "new value") |
"failure")
show(t)
write("insert(t, \"xyz\", \"def\") --> ", image(insert(t, "xyz", "def")) |
"failure")
show(t)
write("delete(t, \"xyz\") -- > ", image(delete(t, "xyz")) | "failure")
show(t)
write("delete(t, \"xyz\") -- > ", image(delete(t, "xyz")) | "failure")
show(t)
# test run-time error mechanism
end
# write word in hexadecimal
procedure word (v)
xd (v, 8)
writes (" ")
return
end
# write n low-order hex digits of v
procedure xd (v, n)
xd (ishift (v, -4), 0 < n - 1)
writes ("0123456789ABCDEF" [1 + iand (v, 16r0F)])
return
end
# ferr(func,val,err) -- call func(val) and verify that error "err" is produced
procedure ferr (func, val, err)
write(msg := "oops -- " || image(func) || "(" || image (val) || ") ")
return
end
procedure p(a, b, c[])
write(" image(a):", image(a))
write(" image(b):", image(b))
write(" image(c):", image(c))
write(" every write(\"\\t\", !c):")
every write("\t", !c)
end
procedure q(a[])
write(" every write(\"\\t\", !a):")
every write("\t", !a)
end
procedure show(t)
local x
write(" *t --> ", *t)
write(" t[\"xyz\"] --> ", image(t["xyz"]) | "failure")
write(" member(t, \"xyz\") --> ", image(member(t, "xyz")) | "failure")
x := sort(t, 3)
write(" contents of t:")
while writes("\t", image(get(x)), " : ")
do write(image(get(x)))
write("")
end
# test the new sortf(x,n) function
global data
record r1(a)
record r3(a,b,c)
procedure sf (args)
local n, z
z := []
every put (z, 1 to 100)
data := [
r3(3,1,4),
[1,5,9],
r3(2,6,5),
r3(3,5),
r1(2),
3,
r1(4),
r1(8),
[5,&null,5],
[4,4,4,4],
[3,3,3],
[&null,25],
4,
[2,2],
[1],
[&null,&null],
[],
r3(7,8,9),
z]
dump ("sort(L)", sort (data))
if *args = 0 then
every test (&null | 1 | "2" | '3' | 4 | 17 | -4 | -3 | "-2" | -1)
else
every test (!args)
end
procedure test (n)
local r1, r2
write ()
write ("-------------------- testing n = ", \n | "&null")
r1 := sortf (data, n)
r2 := sortf (set(data), n)
dump ("sortf(L,n)", r1)
if same (r1, r2) then
write ("\nsortf(S,n) [same]")
else
dump ("sortf(S,n) [********** OOPS -- results differ: **********]", r2)
end
procedure dump (s, l)
local e
write ()
write (s, ":")
every e := !l do {
writes (" ", left(type(e), 8))
if (type(e) == ("r1" | "r3" | "list")) then
every writes (" ", image(e[(1 to 5) | (95 to 100)]) | "\n")
else
write (" ", image(e))
}
return
end
procedure same (a, b)
local i
if *a ~= *b then fail
every i := 1 to *a do
if a[i] ~=== b[i] then fail
return
end