package rabbitescape.engine.logic;
import static rabbitescape.engine.util.WorldAssertions.*;
import org.junit.Test;
public class TestFire
{
@Test
public void Fire_falls()
{
assertWorldEvolvesLike(
"AA " + "\n" +
" A" + "\n" +
" " + "\n" +
"\\/ " + "\n" +
"###",
" " + "\n" +
"AA " + "\n" +
"ggA" + "\n" +
"\\/g" + "\n" +
"###",
" " + "\n" +
" " + "\n" +
"AA " + "\n" +
"ggA" + "\n" +
"###",
" " + "\n" +
" " + "\n" +
" " + "\n" +
"AAA" + "\n" +
"###",
" " + "\n" +
" " + "\n" +
" " + "\n" +
"AAA" + "\n" +
"###"
);
}
@Test
public void Rabbit_burns_on_slope()
{
assertWorldEvolvesLike(
" A" + "\n" +
"r /" + "\n" +
"###",
" " + "\n" +
" r~" + "\n" +
"###",
" " + "\n" +
" X" + "\n" +
"###",
" " + "\n" +
" A" + "\n" +
"###"
);
}
@Test
public void Rabbits_fall_faster_than_fire_and_fire_falls_from_world()
{
assertWorldEvolvesLike(
"rr" + "\n" +
"A " + "\n" +
" A" + "\n" +
" " + "\n" +
" " + "\n" +
" ",
" " + "\n" +
" " + "\n" +
"Xr" + "\n" +
"gf" + "\n" +
" g" + "\n" +
" ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
"A " + "\n" +
"gX" + "\n" +
" g",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"A " + "\n" +
"gA",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
"A ",
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" " + "\n" +
" "
);
}
@Test
public void Fire_falls_on_bridger()
{
assertWorldEvolvesLike(
" Ar A" + "\n" +
" rb# b#" + "\n" +
"### ## " + "\n" +
" " + "\n" +
" " + "\n" +
"ri ri " + "\n" +
"#######",
" A A" + "\n" +
" rKr>#" + "\n" +
"### ## " + "\n" +
" " + "\n" +
" " + "\n" +
" rB rB " + "\n" +
"#######",
" A A" + "\n" +
" rg rK" + "\n" +
"### ## " + "\n" +
" " + "\n" +
" " + "\n" +
" r[ r[ " + "\n" +
"#######",
" A" + "\n" +
" X rg" + "\n" +
"###g## " + "\n" +
" " + "\n" +
" " + "\n" +
" r{ r{ " + "\n" +
"#######",
" " + "\n" +
" X" + "\n" +
"###A##g" + "\n" +
" g " + "\n" +
" B B" + "\n" +
" r r " + "\n" +
"#######",
" " + "\n" +
" " + "\n" +
"### ##A" + "\n" +
" A g" + "\n" +
" g [" + "\n" +
" r r " + "\n" +
"#######",
" " + "\n" +
" " + "\n" +
"### ## " + "\n" +
" A" + "\n" +
" { g" + "\n" +
" rg r " + "\n" +
"#######",
" " + "\n" +
" " + "\n" +
"### ## " + "\n" +
" ' " + "\n" +
" r X" + "\n" +
" (A ( " + "\n" +
"#######",
" " + "\n" +
" " + "\n" +
"### ## " + "\n" +
" r " + "\n" +
" (f A" + "\n" +
" (Af( " + "\n" +
"#######",
" " + "\n" +
" " + "\n" +
"### ## " + "\n" +
" " + "\n" +
" ( A" + "\n" +
" (Ar~ " + "\n" +
"#######",
" " + "\n" +
" " + "\n" +
"### ## " + "\n" +
" " + "\n" +
" ( $" + "\n" +
" (A r " + "\n" +
"#######",
" " + "\n" +
" " + "\n" +
"### ## " + "\n" +
" " + "\n" +
" ( X" + "\n" +
" (A ( " + "\n" +
"#######",
" " + "\n" +
" " + "\n" +
"### ## " + "\n" +
" " + "\n" +
" ( A" + "\n" +
" (A ( " + "\n" +
"#######",
" " + "\n" +
" " + "\n" +
"### ## " + "\n" +
" " + "\n" +
" ( A" + "\n" +
" (A ( " + "\n" +
"#######"
);
}
/**
* A slightly complicated scenario where a fire is extinguished by water. In
* order to check the fire has gone, a rabbit is used (sacrificed) to
* redirect the water away from the spot where the fire was, in order to
* prove that it is now empty.
*/
@Test
public void Fire_extinguished_by_water()
{
assertWorldEvolvesLike(
" j#" + "\n" +
"# ###" + "\n" +
"# #P " + "\n" +
"#\\b# " + "\n" +
"### A" + "\n" +
" #",
" <j #" + "\n" +
"# ###" + "\n" +
"# #P " + "\n" +
"#\\b# " + "\n" +
"### A" + "\n" +
" #",
" j #" + "\n" +
"#f###" + "\n" +
"#f#Pn" + "\n" +
"#\\b# " + "\n" +
"### A" + "\n" +
" #",
" #" + "\n" +
"# ###" + "\n" +
"#j#Pn" + "\n" +
"#ab#n" + "\n" +
"### A" + "\n" +
" #",
" #" + "\n" +
"# ###" + "\n" +
"# #Pn" + "\n" +
"#|b#n" + "\n" +
"### n" + "\n" +
" #",
" #" + "\n" +
"# ###" + "\n" +
"# #Pn" + "\n" +
"#r_#n" + "\n" +
"###nn" + "\n" +
" #",
" #" + "\n" +
"# ###" + "\n" +
"# #Pn" + "\n" +
"#\\rKn" + "\n" +
"###nn" + "\n" +
" n#",
" #" + "\n" +
"# ###" + "\n" +
"# #Pn" + "\n" +
"#\\r>n" + "\n" +
"###nn" + "\n" +
" n#",
" #" + "\n" +
"# ###" + "\n" +
"# #Pn" + "\n" +
"#\\ Rn" + "\n" + // The rabbit drowns here.
"###nn" + "\n" +
" n#",
" #" + "\n" +
"# ###" + "\n" +
"# #Pn" + "\n" +
"#\\nnn" + "\n" +
"###Nn" + "\n" +
" n#",
" #" + "\n" +
"# ###" + "\n" +
"# #P " + "\n" +
"#nnNn" + "\n" +
"###nn" + "\n" +
" N#",
" #" + "\n" +
"# ###" + "\n" +
"# #Pn" + "\n" +
"#nnn " + "\n" +
"###Nn" + "\n" +
" nn#",
// The fire has been extinguished by the water.
" #" + "\n" +
"# ###" + "\n" +
"# #P " + "\n" +
"#nnnn" + "\n" +
"### " + "\n" +
" N#"
);
}
}