nus/cs2030s/labs/Lab7/Test3.java

70 lines
1.6 KiB
Java

import cs2030s.fp.Immutator;
import cs2030s.fp.Memo;
public class Test3 {
public static void main(String[] args) {
CS2030STest we = new CS2030STest();
int[] _incr = new int[]{0};
Immutator<Integer, Integer> incr = x -> {
_incr[0] += 1;
return x + 1;
};
int[] _dbl = new int[]{0};
Immutator<Integer, Integer> dbl = x -> {
_dbl[0] += 1;
return x + x;
};
MemoList<Integer> nat = MemoList.generate(10, 0, incr);
we.expect(
"An initial natural number only has a single evaluated element",
nat.toString(),
"[0, ?, ?, ?, ?, ?, ?, ?, ?, ?]"
);
MemoList<Integer> even = nat.map(dbl);
we.expect(
"An initial even number has no evaluated element",
even.toString(),
"[?, ?, ?, ?, ?, ?, ?, ?, ?, ?]"
);
nat.indexOf(2);
we.expect(
"Looking for 2 on natural number causes 2 evaluations on increments ...",
_incr[0],
2
);
we.expect(
"... and causes 0 evaluations on double",
_dbl[0],
0
);
even.indexOf(6);
we.expect(
"Looking for 6 on even number causes 1 more evaluation on increment ...",
_incr[0],
3
);
we.expect(
"... and causes 4 evaluation on double",
_dbl[0],
4
);
MemoList<Integer> odd = even.map(incr);
odd.get(8);
we.expect(
"Retrieving index 8 on odd number causes 5 more evaluation on increment ...",
_incr[0],
9
);
we.expect(
"... and causes 1 more evaluation on double",
_dbl[0],
5
);
}
}