package rabbitescape.engine.logic; import static rabbitescape.engine.util.WorldAssertions.assertWorldEvolvesLike; import org.junit.Test; public class TestDrowning { @Test public void rabbits_drown_when_pipes_pump_water_on_them() { assertWorldEvolvesLike( "#P#" + "\n" + "# #" + "\n" + "#r#" + "\n" + "###", "#P#" + "\n" + "# #" + "\n" + "#|#" + "\n" + "###", "#P#" + "\n" + "#n#" + "\n" + "#?#" + "\n" + "###", "#P#" + "\n" + "#n#" + "\n" + "#|#" + "\n" + // Rabbits characters are displayed in preference to water. "###", "#P#" + "\n" + "#n#" + "\n" + "#R#" + "\n" + // Rabbit is drowning "###" ); } @Test public void rabbits_drown_on_slopes() { assertWorldEvolvesLike( "# P#" + "\n" + "# r/ " + "\n" + "# / " + "\n" + "#/ ", "# P#" + "\n" + "# $ " + "\n" + "# r " + "\n" + "#/ ", "# P#" + "\n" + "# ? " + "\n" + "# / " + "\n" + "#/ ", "# nP#" + "\n" + "# nn " + "\n" + "# % " + "\n" + "#/ ", "# nP#" + "\n" + "# nn " + "\n" + "# n " + "\n" + "#% ", "# nP#" + "\n" + "#nnn " + "\n" + "#nn " + "\n" + "#[ ", "# nP#" + "\n" + "#nnn " + "\n" + "#n$ " + "\n" + "#n ", "# nP#" + "\n" + "#nn$ " + "\n" + "#nn " + "\n" + "#n ", "# nP#" + "\n" + "#nnR " + "\n" + "#nn " + "\n" + "#n " ); } @Test public void rabbits_can_wade_through_rivers() { assertWorldEvolvesLike( " P#" + "\n" + "r #" + "\n" + "######", " P#" + "\n" + " r> #" + "\n" + "######", " P#" + "\n" + " r>n#" + "\n" + "######", " P#" + "\n" + " n>#" + "\n" + "######", " nP#" + "\n" + " nn?#" + "\n" + "######", " nP#" + "\n" + " nn<n#" + "\n" + "######", " nP#" + "\n" + "nn<nn#" + "\n" + "######", " nP#" + "\n" + "n<nnn#" + "\n" + "######", " nP#" + "\n" + "<nnnn#" + "\n" + "######" ); } @Test public void bashing_can_cause_drowning() { assertWorldEvolvesLike( "# r #" + "\n" + "# ####" + "\n" + "# \\PP#" + "\n" + "# b\\ #" + "\n" + "######", "# r>#" + "\n" + "# ####" + "\n" + "# \\PP#" + "\n" + "# b\\ #" + "\n" + "######", "# ?#" + "\n" + "# ####" + "\n" + "# \\PP#" + "\n" + "# bnn#" + "\n" + "######", "# <j#" + "\n" + "# ####" + "\n" + "# nPP#" + "\n" + "# bnN#" + "\n" + "######", "# <j #" + "\n" + "# ####" + "\n" + "# nPP#" + "\n" + "# bnN#" + "\n" + "######", "#<j #" + "\n" + "# ####" + "\n" + "# nPP#" + "\n" + "# bnN#" + "\n" + "######", "#j #" + "\n" + "#f####" + "\n" + "#fnPP#" + "\n" + "# bnN#" + "\n" + "######", "# #" + "\n" + "# ####" + "\n" + "#jnPP#" + "\n" + "#fbnN#" + "\n" + "######", "# #" + "\n" + "# ####" + "\n" + "# nPP#" + "\n" + "#|bNN#" + "\n" + "######", "# #" + "\n" + "# ####" + "\n" + "# NPP#" + "\n" + "#r>NN#" + "\n" + "######", "# #" + "\n" + "# ####" + "\n" + "# NPP#" + "\n" + "# rKN#" + "\n" + "######", "# #" + "\n" + "# ####" + "\n" + "# NPP#" + "\n" + "# r>N#" + "\n" + "######", "# #" + "\n" + "# ####" + "\n" + "# NPP#" + "\n" + "# RN#" + "\n" + // The rabbit is drowning. "######", // If the world was to continue after the death of the rabbit then // the water would flow to fill the space. "# #" + "\n" + "# ####" + "\n" + "# NPP#" + "\n" + "# NNN#" + "\n" + "######" ); } }