program joukkokokeilu;

import tra;

procedure TulostaIntJoukko(var DS:DSET);
var     i:DSET_ITERATOR;
        x: ELEMENT;
begin

        x := DSET_ANY(DS, i);
        while (DSET_ITERATING(DS, i)) do	
            begin
                write(ELEMENT_INT(x), ' '); 
                x := DSET_ANOTHER(DS, i);
			end;
        
		writeln;

end;



(* kokeellinen osa *)
const	N = 40 ; (* lisättävät alkiot *)
	M = 80; (* maksimi alkio *)
	K = 10; (* kokeilut *)

var jou, jou1, jou2, jou3, jou4 : DSET;
	i, s : integer;
	kk : DSET_ITERATOR;

begin

	INT_DSET_CREATE(jou);

	writeln ('Joukkoon : ');
	for i := 1 to N do begin
		s := tra_random(M);
		write(s);
		writeln(' ');
		INT_DSET_INSERT(jou, s);
	end;
	writeln;

	write('Tulostus : ');
	TulostaIntJoukko(jou);	

	writeln('Kokeillaan hakua');
	for i := 1 to K do begin
		s := tra_random(M);
		write(s);
		if (INT_DSET_MEMBER(jou, s)) then
			writeln(' löytyi')
		else
			writeln(' ei löytynyt');
	end;


	writeln;
	writeln('Kokeillaan läpikäyntiä');

	s := INT_DSET_ANY(jou, kk);
	while (INT_DSET_ITERATING(jou, kk)) do begin
		write(s, ' ');
		s := INT_DSET_ANOTHER(jou, kk);
	end;
	writeln;

	INT_DSET_CREATE(jou1);
	write('Joukkoon jou1: ');
	for i := 1 to N do  begin
		s := tra_random(M);
		write(' ', s);
		INT_DSET_INSERT(jou1, s);
	end;
	writeln;
	DSET_PRINT(jou1);

	INT_DSET_CREATE(jou2);
	write('Joukkoon jou2: ');
	for i := 1 to N do  begin
		s := tra_random(M);
		write(' ', s);
		INT_DSET_INSERT(jou2, s);
	end;
	writeln;
	DSET_PRINT(jou2);

	writeln('Yhdiste:');
	jou3 := INT_DSET_UNION(jou1, jou2);
	DSET_PRINT(jou3);
	writeln;

	writeln('Leikkaus');
	jou4 := DSET_INTERSECTION(jou1, jou2);
	DSET_PRINT(jou4);
	writeln;

	writeln('Erotus');
	jou := DSET_DIFFERENCE(jou3, jou4);
	DSET_PRINT(jou);
	writeln;

	writeln('Equal');
	if (DSET_EQUAL(DSET_UNION(jou1, jou2), DSET_UNION(jou3, jou))) then
		writeln('Samat')
	else
		writeln('Eri');

	writeln('Kopiointi ASSIGN');
	DSET_PRINT(jou);
	DSET_PRINT(jou4);

	DSET_ASSIGN(jou, jou4);

	DSET_PRINT(jou);
	DSET_PRINT(jou4);

	jou4 := INT_DSET_UNION(jou1, jou2);

	DSET_PRINT(jou);
	DSET_PRINT(jou4);

	INT_DSET_CREATE(jou1);
	INT_DSET_CREATE(jou2);
	INT_DSET_INSERT(jou1, 1);
	writeln('Equal2');
	if (DSET_EQUAL(jou1, jou2)) then
		writeln('Samat')
	else
		writeln('Eri');
		
	writeln('Equal3');
	if (DSET_EQUAL(jou2, jou1)) then
		writeln('Samat')
	else
		writeln('Eri');

	DSET_FREE(jou);
	DSET_FREE(jou1);
	DSET_FREE(jou2);
	DSET_FREE(jou3);
	DSET_FREE(jou4);
end.
