Files
compiler-the-translators/tests/given/test/selectionSort.alpha
2025-05-04 16:05:13 -04:00

70 lines
1.5 KiB
Plaintext

(* TEST: [-asc -tc] *)
(* Type definitions *)
type string2int: string -> integer
type intArray: 1 -> integer
type intArrayXinteger: [ intArray: data; integer: index ]
type intArrayXinteger2integer: intArrayXinteger -> integer
type intArray2Boolean: intArray -> Boolean
(* Function declarations
They use the above type definitions
*)
function indexOfSmallest: intArrayXinteger2integer
function selectionSort: intArray2Boolean
function entry : string2int
(* indexOfSmallest *)
indexOfSmallest (* as *) (data, startingIndex) := {
[ integer: indexOfSmallestSoFar; integer: i ]
indexOfSmallestSoFar := startingIndex;
i := 0 ;
while (i < data._1 ) {
if ( data(i) < data(indexOfSmallestSoFar) )
then {
indexOfSmallestSoFar := i;
}
else {
i := i;
}
i := i + 1;
}
return indexOfSmallestSoFar;
}
(* selectionSort *)
selectionSort(data) := {
[ integer: i ]
i := 0 ;
while (i < data._1 ) {
[ integer: index; integer: temp ]
index := indexOfSmallest(data,i);
temp := data(index);
data(index) := data(i);
data(i) := temp;
i := i + 1;
}
return true;
}
(* Function definition
entry is the first function called
*)
entry(arg) := {
[ intArray: data; Boolean: _ ]
data := reserve data(8);
data(0) := 60;
data(1) := 80;
data(2) := 10;
data(3) := 50;
data(4) := 30;
data(5) := 40;
data(6) := 20;
data(7) := 70;
_ := selectionSort(data);
return 0;
}