Added list and unit test for it.

This commit is contained in:
Simon Brooke 2021-09-08 13:47:36 +01:00
parent 06e87f09fa
commit 3abebe937c
No known key found for this signature in database
GPG key ID: A7A4F18D1D4DF987
5 changed files with 58 additions and 2 deletions

View file

@ -236,6 +236,7 @@ int main( int argc, char *argv[] ) {
bind_function( L"hashmap", lisp_make_hashmap );
bind_function( L"inspect", &lisp_inspect );
bind_function( L"keys", &lisp_keys );
bind_function( L"list", &lisp_list);
bind_function( L"mapcar", &lisp_mapcar );
bind_function( L"meta", &lisp_metadata );
bind_function( L"metadata", &lisp_metadata );

View file

@ -1453,6 +1453,19 @@ struct cons_pointer lisp_mapcar( struct stack_frame *frame,
return result;
}
struct cons_pointer lisp_list( struct stack_frame *frame,
struct cons_pointer frame_pointer,
struct cons_pointer env ) {
struct cons_pointer result = frame->more;
for ( int a = nilp(result) ? frame->args - 1: args_in_frame - 1;
a >= 0; a-- ) {
result = make_cons(fetch_arg(frame, a), result);
}
return result;
}
// /**
// * Function; print the internal representation of the object indicated by `frame->arg[0]` to the
// * (optional, defaults to the value of `*out*` in the environment) stream indicated by `frame->arg[1]`.

View file

@ -211,4 +211,8 @@ struct cons_pointer lisp_append( struct stack_frame *frame,
struct cons_pointer lisp_mapcar( struct stack_frame *frame,
struct cons_pointer frame_pointer,
struct cons_pointer env );
struct cons_pointer lisp_list( struct stack_frame *frame,
struct cons_pointer frame_pointer,
struct cons_pointer env );
#endif

View file

@ -1,8 +1,8 @@
#!/bin/bash
value=354
expected="Integer cell: value ${value},"
echo ${value} | target/psse -v5 2>&1 | grep "${expected}" > /dev/null
expected="(${value} \"INTR\")"
echo "(set! x $value)(list x (type x))" | target/psse 2>&1 | grep "${expected}" > /dev/null
if [ $? -eq 0 ]
then

38
unit-tests/list-test,sh Normal file
View file

@ -0,0 +1,38 @@
#!/bin/bash
expected="(0 1 2 3 4 5 6 7 8 9 a b c d e f)"
actual=`echo "(list 0 1 2 3 4 5 6 7 8 9 'a 'b 'c 'd 'e 'f)" | target/psse | tail -1`
if [ "${expected}" = "${actual}" ]
then
echo "OK"
else
echo "Fail: expected '$expected', got '$actual'"
exit 1
fi
expected="(0 1 2 3 4)"
actual=`echo "(list 0 1 2 3 4)" | target/psse | tail -1`
if [ "${expected}" = "${actual}" ]
then
echo "OK"
else
echo "Fail: expected '$expected', got '$actual'"
exit 1
fi
expected="(0 1 2 3 4 5 6 7)"
actual=`echo "(list 0 1 2 3 4 5 6 7)" | target/psse | tail -1`
if [ "${expected}" = "${actual}" ]
then
echo "OK"
exit 0
else
echo "Fail: expected '$expected', got '$actual'"
exit 1
fi