Files
context/_reports/st/st_list.li
T
2019-09-28 10:14:18 -04:00

251 lines
5.6 KiB
Plaintext

/*
* @progname st_list.li
* @version 1.16 (2007-05-06)
* @author Perry Rapp
* @category self-test
* @output none
* @description validate list functions
*/
char_encoding("ASCII")
require("lifelines-reports.version:1.3")
option("explicitvars") /* Disallow use of undefined variables */
include("st_aux")
/* entry point in case not invoked via st_all.ll */
proc main()
{
call testLists()
}
/*
test some list functions
*/
proc testLists()
{
call initSubsection()
list(li)
if (not(empty(li))) {
call reportfail("empty FAILED")
}
else { incr(testok) }
if (inlist(li,4)) {
call reportfail("inlist(empty) FAILED")
}
else { incr(testok) }
enqueue(li, 1)
if (empty(li)) {
call reportfail("not empty FAILED")
}
else { incr(testok) }
if (not(inlist(li,1))) {
call reportfail("inlist(1) in list with 1 FAILED")
}
else { incr(testok) }
if (inlist(li,4)) {
call reportfail("inlist(4) in list without 4 FAILED")
}
else { incr(testok) }
set(te, dequeue(li))
if (ne(te, 1)) {
call reportfail("dequeue(1) FAILED")
}
else { incr(testok) }
/* enqueue & dequeue */
enqueue(li, 100)
enqueue(li, 200)
set(te, dequeue(li))
if (ne(te, 100)) {
call reportfail("dequeue(100) FAILED")
}
else { incr(testok) }
set(te, dequeue(li))
if (ne(te, 200)) {
call reportfail("dequeue(200) FAILED")
}
else { incr(testok) }
if (not(empty(li))) {
call reportfail("empty (enqueue & dequeue) FAILED")
}
else { incr(testok) }
/* requeue */
enqueue(li, 10)
enqueue(li, 20)
set(te, dequeue(li))
if (ne(te, 10)) {
call reportfail("dequeue(10) FAILED")
}
else { incr(testok) }
requeue(li, 8)
set(te, dequeue(li))
if (ne(te, 8)) {
call reportfail("dequeue(8) FAILED")
}
else { incr(testok) }
dequeue(li)
if (not(empty(li))) {
call reportfail("empty (requeue) FAILED")
}
else { incr(testok) }
/* push & pop */
push(li, 1)
push(li, 2)
set(te, pop(li))
if (ne(te, 2)) {
call reportfail("pop(2) FAILED")
}
else { incr(testok) }
set(te, pop(li))
if (ne(te, 1)) {
call reportfail("pop(1) FAILED")
}
else { incr(testok) }
if (not(empty(li))) {
call reportfail("empty (push&pop) FAILED")
}
else { incr(testok) }
/* getel & setel */
enqueue(li, 1)
enqueue(li, 2)
set(te, getel(li, 2))
if (ne(te, 2)) {
call reportfail("getel(,2)==2 FAILED")
}
else { incr(testok) }
setel(li, 4, 4) /* put a 4th element (3rd will be zero-filled) */
/* forlist & length */
set(te2,0)
set(te3,0)
set(te4,0)
forlist(li, te, n) {
set(te1, te2)
set(te2, te3)
set(te3, te4)
set(te4, te)
set(max, n)
}
if(ne(max,length(li))) {call reportfail("length FAILED")}
else {incr(testok)}
if(ne(te1,1)) {call reportfail("forlist#1 FAILED")} else {incr(testok)}
if(ne(te2,2)) {call reportfail("forlist#2 FAILED")} else {incr(testok)}
if(ne(te3,0)) {call reportfail("forlist#3 FAILED")} else {incr(testok)}
if(ne(te4,4)) {call reportfail("forlist#4 FAILED")} else {incr(testok)}
/* continue getel & setel */
set(te, dequeue(li))
if (ne(te, 1)) {
call reportfail("dequeue(1) from setel FAILED")
}
else { incr(testok) }
set(te, dequeue(li))
if (ne(te, 2)) {
call reportfail("dequeue(2) from setel FAILED")
}
else { incr(testok) }
set(te, dequeue(li))
if (ne(te, 0)) {
/* the 3rd was uninitialized created by setel */
call reportfail("dequeue(3) from setel FAILED")
}
else { incr(testok) }
set(te, dequeue(li))
if (ne(te, 4)) {
call reportfail("dequeue(4) from setel FAILED")
}
else { incr(testok) }
if (not(empty(li))) {
call reportfail("empty (getel & setel) FAILED")
}
else { incr(testok) }
enqueue(li, "harry")
enqueue(li, 3)
call testFreeList(li)
/* sort & rsort */
list(li)
push(li, "aardvark")
push(li, "coon")
push(li, "bear")
push(li, "eel")
push(li, "dog")
/* sort on li */
/* so we expect words to come out in order */
sort(li)
if (or(
ne(getel(li, 1), "aardvark")
,ne(getel(li, 2), "bear")
,ne(getel(li, 3), "coon")
,ne(getel(li, 4), "dog")
,ne(getel(li, 5), "eel")
)) {
call reportfail("sort FAILED")
} else { incr(testok) }
/* rsort on li */
/* so we expect words to come out in reverse order */
rsort(li)
if (or(
ne(getel(li, 1), "eel")
,ne(getel(li, 2), "dog")
,ne(getel(li, 3), "coon")
,ne(getel(li, 4), "bear")
,ne(getel(li, 5), "aardvark")
)) {
call reportfail("rsort FAILED")
} else { incr(testok) }
/* test sorting on 2nd argument */
list(li)
list(li2)
push(li, "bush")
push(li2, "hsub")
push(li, "grass")
push(li2, "ssarg")
push(li, "shrub")
push(li2, "burhs")
push(li, "tree")
push(li2, "eert")
push(li, "marsh")
push(li2, "hsram")
push(li, "benz")
push(li2, "zneb")
/* sort on li2, which is words backwards */
/* so we expect words to come out in order of each word backwards */
/* eg, shrub is first because it ends with b */
sort(li,li2)
if (or(
ne(getel(li, 1), "shrub")
,ne(getel(li, 2), "tree")
,ne(getel(li, 3), "marsh")
,ne(getel(li, 4), "bush")
,ne(getel(li, 5), "grass")
,ne(getel(li, 6), "benz")
)) {
call reportfail("sort on 2 args FAILED")
} else { incr(testok) }
/* rsort on li2, which is words backwards */
/* so we expect words to come out in reverse order of each word backwards */
/* eg, benz is first because it ends with z */
rsort(li, li2)
if (or(
ne(getel(li, 1), "benz")
,ne(getel(li, 2), "grass")
,ne(getel(li, 3), "bush")
,ne(getel(li, 4), "marsh")
,ne(getel(li, 5), "tree")
,ne(getel(li, 6), "shrub")
)) {
call reportfail("rsort on 2 args FAILED")
} else { incr(testok) }
call reportSubsection("list tests")
}
proc testFreeList(li)
{
free(li)
if (ne(li, 0)) {
call reportfail("free list FAILED")
}
else { incr(testok) }
}