mirror of
https://github.com/kennethreitz/context.git
synced 2026-06-05 23:00:17 +00:00
251 lines
5.6 KiB
Plaintext
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) }
|
|
}
|