// Test for Assignment 1 Functions for CS 51 // Introduction to C // // File: functions_test.cc // Author: Bob Walton (walton@deas.harvard.edu) // Assignment: c // This file contains a test for the assigment 1 // functions programmed in C++. // In the following, 'x is used to represent C++ code // which when executed will produce the s-expression // x in memory and return an `object *' pointer to it. #include "intro51.h" int fibonacci ( int n ); int sum_all ( object * e ); int count_atoms ( object * e ); object * bubble ( object * n, object * list ); object * bubble_sort (object * list); object * remove_dups ( object * list ); int main ( ) { initialize_memory (); cout << "fibonacci (0) = " << fibonacci (0) << endl; cout << "fibonacci (1) = " << fibonacci (1) << endl; cout << "fibonacci (2) = " << fibonacci (2) << endl; cout << "fibonacci (3) = " << fibonacci (3) << endl; cout << "fibonacci (4) = " << fibonacci (4) << endl; cout << "fibonacci (5) = " << fibonacci (5) << endl; cout << "fibonacci (6) = " << fibonacci (6) << endl; cout << "fibonacci (7) = " << fibonacci (7) << endl; cout << "fibonacci (8) = " << fibonacci (8) << endl; cout << "fibonacci (16) = " << fibonacci (16) << endl; cout << "sum_all ('77777777) = " << sum_all (make_integer (777777777)) << endl; cout << "sum_all ('x) = " << sum_all (make_symbol ("X")) << endl; cout << "sum_all ('()) = " << sum_all (NIL) << endl; cout << "sum_all ('(1 . 2)) = " << sum_all ( make_cons ( make_integer (1), make_integer (2))) << endl; cout << "sum_all ('((1 . 2) . (3 . (4 . nil)))) = " << sum_all ( make_cons ( make_cons ( make_integer (1), make_integer (2) ), make_cons ( make_integer (3), make_cons ( make_integer (4), NIL )))) << endl; cout << "sum_all ('(5 (2 3 b) a 1 3)) = " << sum_all ( make_cons ( make_integer (5), make_cons ( make_cons ( make_integer (2), make_cons ( make_integer (3), make_cons ( make_symbol ("B"), NIL ))), make_cons ( make_symbol ("A"), make_cons ( make_integer (1), make_cons ( make_integer (3), NIL )))))) << endl; cout << "sum_all ('( ( (nil . 5) 8 7 b) . x) ) = " << sum_all ( make_cons ( make_cons ( make_cons ( NIL, make_integer ( 5 ) ), make_cons ( make_integer ( 8 ), make_cons ( make_integer ( 7 ), make_cons ( make_symbol ( "B" ), NIL )))), make_symbol ( "X" ))) << endl; cout << "count_atoms ('77777777) = " << count_atoms ( make_integer ( 777777777 ) ) << endl; cout << "count_atoms ('x) = " << count_atoms ( make_symbol ( "X" ) ) << endl; cout << "count_atoms ('()) = " << count_atoms (NIL) << endl; cout << "count_atoms ('(1 . 2)) = " << count_atoms ( make_cons ( make_integer (1), make_integer (2))) << endl; cout << "count_atoms" " ('((1 . 2) . (3 . (4 . nil)))) = " << count_atoms ( make_cons ( make_cons ( make_integer (1), make_integer (2) ), make_cons ( make_integer (3), make_cons ( make_integer (4), NIL )))) << endl; cout << "count_atoms ('(5 (2 3 b) a 1 3)) = " << count_atoms ( make_cons ( make_integer (5), make_cons ( make_cons ( make_integer (2), make_cons ( make_integer (3), make_cons ( make_symbol ("B"), NIL ))), make_cons ( make_symbol ("A"), make_cons ( make_integer (1), make_cons ( make_integer (3), NIL )))))) << endl; cout << "count_atoms" " ('( ( (nil . 5) 8 7 b) . x) ) = " << count_atoms ( make_cons ( make_cons ( make_cons ( NIL, make_integer ( 5 ) ), make_cons ( make_integer ( 8 ), make_cons ( make_integer ( 7 ), make_cons ( make_symbol ( "B" ), NIL )))), make_symbol ( "X" ))) << endl; cout << "bubble (5 '()) =\n " << bubble (make_integer (5), NIL) << endl; cout << "bubble (5 '(1)) =\n " << bubble ( make_integer (5), make_cons ( make_integer (1), NIL)) << endl; cout << "bubble (5 '(10)) =\n " << bubble ( make_integer (5), make_cons ( make_integer (10), NIL)) << endl; cout << "bubble (5 '(5)) =\n " << bubble ( make_integer (5), make_cons ( make_integer (5), NIL)) << endl; cout << "bubble (5 '(1 3 8 9)) =\n " << bubble ( make_integer (5), make_cons ( make_integer (1), make_cons ( make_integer (3), make_cons ( make_integer (8), make_cons ( make_integer (9), NIL ))))) << endl; cout << "bubble (-2 '(1 3 8 9)) =\n " << bubble ( make_integer (-2), make_cons ( make_integer (1), make_cons ( make_integer (3), make_cons ( make_integer (8), make_cons ( make_integer (9), NIL ))))) << endl; cout << "bubble (10 '(1 3 8 9)) =\n " << bubble ( make_integer (10), make_cons ( make_integer (1), make_cons ( make_integer (3), make_cons ( make_integer (8), make_cons ( make_integer (9), NIL ))))) << endl; cout << "bubble_sort ('()) =\n " << bubble_sort (NIL) << endl; cout << "bubble_sort ('(3)) =\n " << bubble_sort ( make_cons ( make_integer (3), NIL )) << endl; cout << "bubble_sort ('(1 2)) =\n " << bubble_sort ( make_cons ( make_integer (1), make_cons ( make_integer (2), NIL ))) << endl; cout << "bubble_sort ('(2 1)) =\n " << bubble_sort ( make_cons ( make_integer (2), make_cons ( make_integer (1), NIL ))) << endl; cout << "bubble_sort ('(5 1 8 9 3)) =\n " << bubble_sort ( make_cons ( make_integer (5), make_cons ( make_integer (3), make_cons ( make_integer (8), make_cons ( make_integer (9), make_cons ( make_integer (3), NIL )))))) << endl; cout << "bubble_sort ('(3 9 -2 1 8)) =\n " << bubble_sort ( make_cons ( make_integer (3), make_cons ( make_integer (9), make_cons ( make_integer (-2), make_cons ( make_integer (1), make_cons ( make_integer (8), NIL )))))) << endl; cout << "remove_dups ('()) =\n " << remove_dups (NIL) << endl; cout << "remove_dups ('(a a)) =\n " << remove_dups ( make_cons ( make_symbol ( "A" ), make_cons ( make_symbol ( "A" ), NIL ))) << endl; cout << "remove_dups ('(a b)) =\n " << remove_dups ( make_cons ( make_symbol ( "A" ), make_cons ( make_symbol ( "B" ), NIL ))) << endl; cout << "remove_dups ('(a b a)) =\n " << remove_dups ( make_cons ( make_symbol ( "A" ), make_cons ( make_symbol ( "B" ), make_cons ( make_symbol ( "A" ), NIL )))) << endl; cout << "remove_dups ('(a 8 b a 8 3)) =\n " << remove_dups ( make_cons ( make_symbol ( "A" ), make_cons ( make_integer ( 8 ), make_cons ( make_symbol ( "B" ), make_cons ( make_symbol ( "A" ), make_cons ( make_integer ( 8 ), make_cons ( make_integer ( 3 ), NIL ))))))) << endl; return 0; }