Skip to content

Commit

Permalink
Merge pull request #672
Browse files Browse the repository at this point in the history
* Initial setup

* Working initial test

* Added another test

* Added more tests

* Added another test

* Added comments, removed useless imports, added 1 more test

* Reformatting

* Removed useless import

* Added initial and elimination test

* Merge branch 'dev' into stt-test-suite

* Merge branch 'stt-test-suite' of https://github.com/charlestian23/LEG…

* Comments and spacing

* Another test

* Updated comments and wrote new test

* Created two new test files

* Renamed test to be more descriptive

* Added another test

* Rewrote test to be more comprehensive

* More tests :))))

* Fixed test name and file

* Fixed test

* Fixed broken tests

* Shouldn't have touched these files

* Merge branch 'dev' into stt-test-suite

* Merge branch 'stt-test-suite' of https://github.com/charlestian23/LEG…

* CHECKSTYLE

* Merge branch 'dev' into stt-test-suite

* Trying to make CheckStyle happy
  • Loading branch information
charlestian23 authored Oct 24, 2023
1 parent f69fbe3 commit 7e2b0c4
Show file tree
Hide file tree
Showing 5 changed files with 258 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,204 @@
package puzzles.shorttruthtable.rules;

import edu.rpi.legup.model.tree.TreeNode;
import edu.rpi.legup.model.tree.TreeTransition;
import edu.rpi.legup.puzzle.shorttruthtable.ShortTruthTable;
import edu.rpi.legup.puzzle.shorttruthtable.ShortTruthTableBoard;
import edu.rpi.legup.puzzle.shorttruthtable.ShortTruthTableCell;
import edu.rpi.legup.puzzle.shorttruthtable.ShortTruthTableCellType;
import edu.rpi.legup.puzzle.shorttruthtable.rules.basic.elimination.DirectRuleAndElimination;
import edu.rpi.legup.save.InvalidFileFormatException;
import legup.MockGameBoardFacade;
import legup.TestUtilities;
import org.junit.Assert;
import org.junit.BeforeClass;
import org.junit.Test;

public class AndEliminationDirectRuleTest {
private static final DirectRuleAndElimination RULE = new DirectRuleAndElimination();
private static ShortTruthTable stt;

@BeforeClass
public static void setup() {
MockGameBoardFacade.getInstance();
stt = new ShortTruthTable();
}

/**
* Given one statement: B^C where ^ is true
*
* Checks all possible combinations of true, false, and unknown for B and C
* except for where both B and C are true and asserts that each one of them
* is not a valid application of the rule.
*
* @throws InvalidFileFormatException
*/
@Test
public void trueAndTest1() throws InvalidFileFormatException {
TestUtilities.importTestBoard("puzzles/shorttruthtable/rules/AndEliminationDirectRule/TrueAnd", stt);
TreeNode rootNode = stt.getTree().getRootNode();
TreeTransition transition = rootNode.getChildren().get(0);
transition.setRule(RULE);

ShortTruthTableCellType[] cellTypes = {ShortTruthTableCellType.TRUE, ShortTruthTableCellType.FALSE, ShortTruthTableCellType.UNKNOWN};

for (ShortTruthTableCellType cellType1 : cellTypes) {
for (ShortTruthTableCellType cellType2 : cellTypes) {
if (cellType1 == cellType2 && cellType1 == ShortTruthTableCellType.TRUE) {
continue;
}

ShortTruthTableBoard board = (ShortTruthTableBoard) transition.getBoard();
ShortTruthTableCell bonnie = board.getCell(0, 0);
ShortTruthTableCell clyde = board.getCell(2, 0);

if (cellType1 != ShortTruthTableCellType.UNKNOWN) {
bonnie.setData(cellType1);
board.addModifiedData(bonnie);
}

if (cellType2 != ShortTruthTableCellType.UNKNOWN) {
clyde.setData(cellType2);
board.addModifiedData(clyde);
}

Assert.assertNotNull(RULE.checkRule(transition));
}
}
}

/**
* Given one statement: B^C where ^ is true
*
* Checks all possible combinations of true and unknown for B and C
* except for where both B and C are unknown and asserts that each one
* of them is a valid application of the rule.
*
* @throws InvalidFileFormatException
*/
@Test
public void trueAndTest2() throws InvalidFileFormatException {
TestUtilities.importTestBoard("puzzles/shorttruthtable/rules/AndEliminationDirectRule/TrueAnd", stt);
TreeNode rootNode = stt.getTree().getRootNode();
TreeTransition transition = rootNode.getChildren().get(0);
transition.setRule(RULE);

ShortTruthTableCellType[] cellTypes = {ShortTruthTableCellType.TRUE, ShortTruthTableCellType.UNKNOWN};

for (ShortTruthTableCellType cellType1 : cellTypes) {
for (ShortTruthTableCellType cellType2 : cellTypes) {
if (cellType1 == cellType2 && cellType1 == ShortTruthTableCellType.UNKNOWN) {
continue;
}

ShortTruthTableBoard board = (ShortTruthTableBoard) transition.getBoard();
ShortTruthTableCell bonnie = board.getCell(0, 0);
ShortTruthTableCell clyde = board.getCell(2, 0);

if (cellType1 != ShortTruthTableCellType.UNKNOWN) {
bonnie.setData(cellType1);
board.addModifiedData(bonnie);
}

if (cellType2 != ShortTruthTableCellType.UNKNOWN) {
clyde.setData(cellType2);
board.addModifiedData(clyde);
}

Assert.assertNull(RULE.checkRule(transition));
}
}
}

/**
* Given one statement: B^C where ^ is false
*
* Checks all possible combinations of true, false, and unknown for B and C
* and asserts that each one of them is not a valid application of the rule.
*
* @throws InvalidFileFormatException
*/
@Test
public void falseAndWithUnknownsTest() throws InvalidFileFormatException {
TestUtilities.importTestBoard("puzzles/shorttruthtable/rules/AndEliminationDirectRule/FalseAnd", stt);
TreeNode rootNode = stt.getTree().getRootNode();
TreeTransition transition = rootNode.getChildren().get(0);
transition.setRule(RULE);

ShortTruthTableCellType[] cellTypes = {ShortTruthTableCellType.TRUE, ShortTruthTableCellType.FALSE, ShortTruthTableCellType.UNKNOWN};

for (ShortTruthTableCellType cellType1 : cellTypes) {
for (ShortTruthTableCellType cellType2 : cellTypes) {
ShortTruthTableBoard board = (ShortTruthTableBoard) transition.getBoard();
ShortTruthTableCell bonnie = board.getCell(0, 0);
ShortTruthTableCell clyde = board.getCell(2, 0);

if (cellType1 != ShortTruthTableCellType.UNKNOWN) {
bonnie.setData(cellType1);
board.addModifiedData(bonnie);
}

if (cellType2 != ShortTruthTableCellType.UNKNOWN) {
clyde.setData(cellType2);
board.addModifiedData(clyde);
}

Assert.assertNotNull(RULE.checkRule(transition));
}
}
}

/**
* Given one statement: B^C where both B and ^ are false
*
* Asserts that this is not a valid application of the rule if C is set to
* either true or false.
*
* @throws InvalidFileFormatException
*/
@Test
public void falseAndWithKnownFalseTest() throws InvalidFileFormatException {
TestUtilities.importTestBoard("puzzles/shorttruthtable/rules/AndEliminationDirectRule/FalseAndWithKnownFalse", stt);
TreeNode rootNode = stt.getTree().getRootNode();
TreeTransition transition = rootNode.getChildren().get(0);
transition.setRule(RULE);

ShortTruthTableBoard board = (ShortTruthTableBoard) transition.getBoard();

ShortTruthTableCell clyde = board.getCell(2, 0);
clyde.setData(ShortTruthTableCellType.TRUE);
board.addModifiedData(clyde);
Assert.assertNotNull(RULE.checkRule(transition));

clyde.setData(ShortTruthTableCellType.FALSE);
board.addModifiedData(clyde);
Assert.assertNotNull(RULE.checkRule(transition));
}

/**
* Given one statement: B^C where B is true and ^ is false
*
* Asserts that this is a valid application of the rule if and only if C is
* set to false.
*
* @throws InvalidFileFormatException
*/
@Test
public void falseAndWithKnownTrueTest() throws InvalidFileFormatException {
TestUtilities.importTestBoard("puzzles/shorttruthtable/rules/AndEliminationDirectRule/FalseAndWithKnownTrue", stt);
TreeNode rootNode = stt.getTree().getRootNode();
TreeTransition transition = rootNode.getChildren().get(0);
transition.setRule(RULE);

ShortTruthTableBoard board = (ShortTruthTableBoard) transition.getBoard();

ShortTruthTableCell clyde = board.getCell(2, 0);
clyde.setData(ShortTruthTableCellType.TRUE);
board.addModifiedData(clyde);
Assert.assertNotNull(RULE.checkRule(transition));

clyde.setData(ShortTruthTableCellType.FALSE);
board.addModifiedData(clyde);
Assert.assertNull(RULE.checkRule(transition));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Legup version="3.0.0">
<saved/>
<puzzle name="ShortTruthTable">
<board>
<data>
<statement representation="B^C" row_index="0"/>
<cell char_index="1" row_index="0" type="FALSE"/>
</data>
</board>
</puzzle>
<solved isSolved="false" lastSaved="2023-10-17 16:17:56"/>
</Legup>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Legup version="3.0.0">
<saved/>
<puzzle name="ShortTruthTable">
<board>
<data>
<statement representation="B^C" row_index="0"/>
<cell char_index="0" row_index="0" type="FALSE"/>
<cell char_index="1" row_index="0" type="FALSE"/>
</data>
</board>
</puzzle>
<solved isSolved="false" lastSaved="2023-10-17 16:57:05"/>
</Legup>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Legup version="3.0.0">
<saved/>
<puzzle name="ShortTruthTable">
<board>
<data>
<statement representation="B^C" row_index="0"/>
<cell char_index="0" row_index="0" type="TRUE"/>
<cell char_index="1" row_index="0" type="FALSE"/>
</data>
</board>
</puzzle>
<solved isSolved="false" lastSaved="2023-10-17 16:57:05"/>
</Legup>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Legup version="3.0.0">
<saved/>
<puzzle name="ShortTruthTable">
<board>
<data>
<statement representation="B^C" row_index="0"/>
<cell char_index="1" row_index="0" type="TRUE"/>
</data>
</board>
</puzzle>
<solved isSolved="false" lastSaved="2023-10-17 16:17:56"/>
</Legup>

0 comments on commit 7e2b0c4

Please sign in to comment.