[comp.lang.eiffel] Errors in comp.lang.eiffel

gjc@batserver.cs.uq.oz (Cumming) (10/06/89)

There appears to be an error in the implementation of INT_BINTREE. The classes
below, written by myself and dependent upon INT_BINTREE produce erroneous 
output.

MY_INT_BINTREE is simply INT_BINTREE with node_action redefined to print a 
integer value and create taking an integer rather than an INT_COMPAR parameter.

TEST_BINDING simply takes integer input and inserts that input into a tree of
integers (or INT_COMPARs) and calls infix to print the current tree in infix 
order.

As one can see, the first integer entered is printed correctly. The further 
entries are inserted in the correct place but are not printed correctly, 
though further tests have shown that the random value printed to represent the 
entered value is not always entered in the correct order.

Script started on Thu Oct  5 12:19:45 1989
[1] es test_binding
Eiffel configuration manager
         (version 2.1)
Pass 1 on class test_binding
Pass 1 on class my_int_bintree
Pass 2 on class test_binding
        Interface may have changed.
Pass 2 on class my_int_bintree
        Interface may have changed.
Pass 3 on class test_binding
Pass 3 on class my_int_bintree
Pass 4 on class test_binding
Pass 4 on class my_int_bintree
C-compiling test_binding
C-compiling my_int_bintree
Generating and C-compiling temporary main file.
Linking system (17 classes)
es: System assembly complete
[2] test_binding

Please enter integer value: 46
46,
Please enter integer value: 78
46,317584,
Please enter integer value: 2
298916,46,317584,
Please enter integer value: 1
298808,298916,46,317584,
Please enter integer value: 99
298808,298916,46,298616,317584,
Please enter integer value: 0
[3] exit

script done on Thu Oct  5 12:22:07 1989
class MY_INT_BINTREE export

	start, finish,
	is_leaf, arity,

	left, right,
	has_left, has_right, has_both, has_none,
	insert_value, contains_value,

	preorder, infix, postorder,  node_action,

	screen

inherit
	INT_BINTREE 
		rename 
			Create as bintree_Create
		redefine
			node_action

feature

	Create (i: INTEGER) is
			-- Create node with value i and no children
		local
			iv:INT_COMPAR;
		do
			screen.Create;
			iv.Create(i);
			bintree_Create(iv);
		ensure
			node_value = iv;
			left.Void and right.Void
		end; -- Create

	screen:STD_FILES;

	node_action (v: INT_COMPAR) is
                        -- Operation on node value,
                        -- to be defined by descendant classes.
                        -- Here it is defined as an empty operation.
                        -- Redefine this procedure in descendant classes if useful
                        -- operations are to be performed during traversals.
                do
			screen.putint(v.value);
			screen.putstring(",");
                end; -- node_action

end -- INT_BINTREE

class TEST_BINDING

feature

	io:STD_FILES;

	b:MY_INT_BINTREE;

	AskForInt:INT_COMPAR is
		local
			int:INTEGER;
			ic:INT_COMPAR;
		do
			io.new_line;
			io.putstring ("Please enter integer value: ");

			io.readint;
			int:=io.lastint;
			io.next_line;

			ic.create(int);
			Result:=ic;
		end; -- AskForInt

	create is
			-- Execute sequence of interactive commands
		local
			entry:INT_COMPAR;
		do
			io.create;
			from
				entry:=AskForInt;
				b.Create(entry.value);
			until entry.value=0 loop
				b.infix;
				entry:=AskForInt;
				if entry.value/=0 then
					b.insert_value(entry.value);
				end; -- if entry.value/=0 then
			end;
			io.forget;
		end; -- create

end -- class TEST_BINDING