nus/cs2030s/PE2/plab0124/Test1.java
2022-11-08 18:03:40 +08:00

101 lines
4.4 KiB
Java

import cs2030s.fp.Saveable;
import java.util.NoSuchElementException;
class Test1 {
public static void main(String[] args) {
CS2030STest i = new CS2030STest();
i.expectCompile("Saveable<String> u = Saveable.of(\"PE2\") compiles",
"cs2030s.fp.Saveable<String> u = cs2030s.fp.Saveable.of(\"PE2\")",
true);
i.expectReturn("Saveable.of(\"PE2\").toString()",
() -> Saveable.of("PE2").toString(),
"Saveable[PE2]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\");",
() -> Saveable.of("PE2").map(x -> x + "!").toString(),
"Saveable[PE2!]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").map(x -> x + \"?\");",
() -> Saveable.of("PE2").map(x -> x + "!").map(x -> x + "?").toString(),
"Saveable[PE2!?]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").undo()",
() -> Saveable.of("PE2").map(x -> x + "!").undo().toString(),
"Saveable[PE2]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").undo().map(x -> x + \"?\")",
() -> Saveable.of("PE2").map(x -> x + "!").undo().map(x -> x + "?").toString(),
"Saveable[PE2?]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").undo().map(x -> x + \"?\").undo()",
() -> Saveable.of("PE2").map(x -> x + "!").undo().map(x -> x + "?").undo().toString(),
"Saveable[PE2]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").map(x -> x + \"?\").undo()",
() -> Saveable.of("PE2").map(x -> x + "!").map(x -> x + "?").undo().toString(),
"Saveable[PE2!]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").map(x -> x + \"?\").undo().undo()",
() -> Saveable.of("PE2").map(x -> x + "!").map(x -> x + "?").undo().undo().toString(),
"Saveable[PE2]");
i.expectException("Saveable.of(\"PE2\").map(x -> x + \"!\").map(x -> x + \"?\")" +
".undo().undo().undo()",
() -> Saveable.of("PE2").map(x -> x + "!").map(x -> x + "?").undo().undo().undo(),
new NoSuchElementException());
i.expectException("Saveable.of(\"PE2\").undo()",
() -> Saveable.of("PE2").undo(),
new NoSuchElementException());
// with redo
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").undo()",
() -> Saveable.of("PE2").map(x -> x + "!").undo().toString(),
"Saveable[PE2]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").undo().redo()",
() -> Saveable.of("PE2").map(x -> x + "!").undo().redo().toString(),
"Saveable[PE2!]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").undo().redo().map(x -> x + \"?\")",
() -> Saveable.of("PE2").map(x -> x + "!").undo().redo().map(x -> x + "?").toString(),
"Saveable[PE2!?]");
i.expectException("Saveable.of(\"PE2\").map(x -> x + \"!\").undo().map(x -> x + \"?\")" +
".redo()",
() -> Saveable.of("PE2").map(x -> x + "!").undo().map(x -> x + "?").redo(),
new NoSuchElementException());
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").map(x -> x + \"?\").undo().redo()",
() -> Saveable.of("PE2").map(x -> x + "!").map(x -> x + "?").undo().redo().toString(),
"Saveable[PE2!?]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").undo().map(x -> x + \"?\").undo().redo()",
() -> Saveable.of("PE2").map(x -> x + "!").undo().map(x -> x + "?").undo().redo().toString(),
"Saveable[PE2?]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").map(x -> x + \"?\")" +
".undo().undo().redo()",
() -> Saveable.of("PE2").map(x -> x + "!").map(x -> x + "?").undo().undo().redo()
.toString(),
"Saveable[PE2!]");
i.expectReturn("Saveable.of(\"PE2\").map(x -> x + \"!\").map(x -> x + \"?\")" +
".undo().undo().redo().redo()",
() -> Saveable.of("PE2").map(x -> x + "!").map(x -> x + "?").undo().undo().redo().redo()
.toString(),
"Saveable[PE2!?]");
i.expectException("Saveable.of(\"PE2\").map(x -> x + \"!\").undo().redo().redo()",
() -> Saveable.of("PE2").map(x -> x + "!").map(x -> x + "?").undo().redo().redo(),
new NoSuchElementException());
i.expectCompile("Saveable<Number> x = Saveable.<Number>of(4).map(hash); compiles",
"cs2030s.fp.Immutator<Integer,Object> hash = o -> o.hashCode();\n" +
"cs2030s.fp.Saveable<Number> x = cs2030s.fp.Saveable.<Number>of(4).map(hash);",
true);
}
}