(* stack_as_array_test.ml * * Author: W. M. Farmer * Revised: November 12, 2008 * * Description: Tests the module Stack_as_array. *) open Stack_as_array ;; open Printf ;; (* Test procedures *) let test_stack_height s = printf "Height = %d.\n" (height s) ; print s ; printf "\n" ;; let test_stack_top s = try let element_string = string_of_element (top s) in printf "Top = %s.\n" element_string ; print s ; printf "\n" with Stack_empty -> printf "Top = ?\n" ; printf "Error: Top failed because stack is empty.\n\n" ;; let test_stack_push e s = let element_string = string_of_element e in try push e s ; printf "Push %s.\n" element_string ; print s ; printf "\n" with Stack_full -> printf "Push %s.\n" element_string ; printf "Error: Push failed because stack is full.\n\n" ;; let test_stack_pop s = try pop s ; printf "Pop.\n" ; print s ; printf "\n" with Stack_empty -> printf "Pop.\n" ; printf "Error: Pop failed because stack is empty.\n\n" ;; let test_stack_reset s = reset s ; printf("Reset.\n"); print s ; printf "\n" ;; let print_stack_state s = printf "STACK STATE:\n" ; print s ; printf "Height = %d.\n" s.height ; if s.height <> 0 then let element_string = string_of_element (top s) in printf "Top = %s.\n" element_string else printf "Top is undefined.\n" ; printf "\n" ;; (* The test *) let s = bottom () ;; print_stack_state s ;; test_stack_height s ;; test_stack_top s ;; test_stack_pop s ;; test_stack_push "a" s ;; test_stack_push "b" s ;; test_stack_push "c" s ;; test_stack_height s ;; test_stack_top s ;; print_stack_state s ;; test_stack_pop s ;; test_stack_pop s ;; print_stack_state s ;; test_stack_push "d" s ;; print_stack_state s ;; test_stack_reset s ;; while s.height <> max_height do push "x" s done ;; print_stack_state s ;; test_stack_push "x" s ;;