import org.junit.Assert; import org.junit.Test; public class SimpleTest { private final TentjesPlaatser plaatser = new MijnTentjesPlaatser(); @Test public void testKlein() { char[][] veld = { {' ', 'B', ' ' }, {'B', ' ', ' ' }, }; int[] rijen = { 2, 0 }; int[] kolommen = { 1, 0, 1 }; check(veld, rijen, kolommen); } @Test public void testOnmogelijk() { char[][] veld = { {' ', 'B', ' ' }, {'B', ' ', ' ' } }; int[] rijen = { 2, 1 }; int[] kolommen = { 1, 0, 1 }; char[][] oplossing = plaatser.plaatsTentjes(veld, rijen, kolommen); Assert.assertNull(oplossing); } @Test public void testOnmogelijk2() { char[][] veld = { {'B', ' ', 'B' }, {' ', ' ', ' ' }, {'B', ' ', ' ' } }; int[] rijen = { 1, 1, 1 }; int[] kolommen = { 1, 1, 1 }; char[][] oplossing = plaatser.plaatsTentjes(veld, rijen, kolommen); Assert.assertNull(oplossing); } @Test public void testGemiddeld(){ char[][] veld = { {' ', ' ', ' ', ' ', 'B', ' ' }, {' ', 'B', 'B', ' ', ' ', 'B' }, {' ', 'B', ' ', ' ', ' ', ' ' } }; int[] rijen = { 2, 1, 2 }; int[] kolommen = { 1, 1, 0, 1, 0, 2 }; check(veld, rijen, kolommen); } @Test public void testGroot() { char[][] veld = { {' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ' }, {' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ' }, {' ', ' ', 'B', ' ', ' ', 'B', ' ', ' ' }, {'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, {' ', 'B', ' ', 'B', ' ', 'B', ' ', ' ' }, {' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ' }, {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ' }, {' ', 'B', ' ', 'B', ' ', ' ', ' ', 'B' }, }; int[] rijen = { 1, 2, 2, 0, 4, 0, 1, 2 }; int[] kolommen = { 4, 0, 3, 0, 2, 0, 2, 1 }; check(veld, rijen, kolommen); } @Test public void testGroter() { char[][] veld = { {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' '}, {'B', ' ', 'B', ' ', 'B', ' ', 'B', ' ', 'B', ' ', ' ', ' ', 'B'}, {' ', 'B', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, {'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' '}, {' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B', ' ', 'B', ' ', ' '}, {'B', ' ', 'B', ' ', 'B', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' '}, {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' '}, {' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' '}, }; int[] rijen = {7, 0, 3, 0, 0, 0, 0, 0, 3, 4, 2, 0, 0}; int[] kolommen = {3, 0, 3, 0, 3, 0, 2, 0, 3, 0, 3, 0, 2}; check(veld, rijen, kolommen); } public void check(char[][] veld, int[] rijen, int[] kolommen) { char[][] oplossing = plaatser.plaatsTentjes(veld, rijen, kolommen); Assert.assertNotNull("Er zou een oplossing moeten gevonden worden", oplossing); Assert.assertEquals("Oplossing heeft niet even veel rijen.", veld.length, oplossing.length) ; Assert.assertEquals("Oplossing heeft niet even veel kolommen", veld[0].length, oplossing[0].length); int bomen = 0; int tenten = 0; int[] tentenInRij = new int[rijen.length]; int[] tentenInKolom = new int[kolommen.length]; for (int i = 0; i < rijen.length; i++) { for (int j = 0; j < kolommen.length; j++) { if (veld[i][j] == 'B') { bomen += 1; Assert.assertEquals(String.format("Er staat geen boom meer op rij %d kolom %d", i, j), 'B', oplossing[i][j]); } else if (veld[i][j] == ' ') { Assert.assertNotEquals(String.format("Er staat een boom teveel op rij %d kolom %d", i, j), 'B', oplossing[i][j]); if (oplossing[i][j] == 'T') { tenten += 1; tentenInRij[i] += 1; tentenInKolom[j] += 1; boolean onderBoom = false; for (int k = -1; k <= 1; k++) { for (int l = -1; l <= 1; l++) { int r = i + k; int c = j + l; if ((k == 0 && l == 0) || r < 0 || r >= rijen.length || c < 0 || c >= kolommen.length) continue; onderBoom |= veld[r][c] == 'B'; Assert.assertNotEquals(String.format("Tenten mogen niet naast elkaar staan, tent op (%d, %d) staat naast (%d, %d)", i, j, r, c), 'T', oplossing[r][c]); } } Assert.assertTrue("Tent ligt niet naast een boom", onderBoom); } } else { Assert.fail(String.format("Illegaal karakter '%c' op rij %d kolom %d", oplossing[i][j], i, j)); } } } Assert.assertEquals("Er zijn niet evenveel tenten als bomen", bomen, tenten); Assert.assertArrayEquals("Aantal tenten in de rijen kloppen niet", rijen, tentenInRij); Assert.assertArrayEquals("Aantal tenten in de kolommen kloppen niet", kolommen, tentenInKolom); } }