package de.danielbasedow.prospecter.core.query;
import aima.core.logic.propositional.parsing.ast.Connective;
import aima.core.logic.propositional.parsing.ast.Sentence;
import de.danielbasedow.prospecter.core.MatchCondition;
import de.danielbasedow.prospecter.core.Token;
import de.danielbasedow.prospecter.core.query.build.Clause;
import de.danielbasedow.prospecter.core.query.build.ClauseNode;
import de.danielbasedow.prospecter.core.query.build.Conjunction;
import de.danielbasedow.prospecter.core.query.build.PropositionalSentenceMapper;
import junit.framework.TestCase;
import java.util.ArrayList;
import java.util.List;
public class QueryTest extends TestCase {
public void testFlattenOr() {
List<ClauseNode> conditionsA = new ArrayList<ClauseNode>();
conditionsA.add(new Condition("price", new Token<Integer>(100, MatchCondition.GREATER_THAN_EQUALS)));
conditionsA.add(new Condition("floor", new Token<Integer>(4, MatchCondition.LESS_THAN)));
Clause clauseA = new Clause(Clause.ClauseType.OR, conditionsA);
List<ClauseNode> conditionsB = new ArrayList<ClauseNode>();
conditionsB.add(new Condition("category", new Token<String>("foo", MatchCondition.EQUALS)));
conditionsB.add(new Condition("category", new Token<String>("bar", MatchCondition.EQUALS)));
Clause clauseB = new Clause(Clause.ClauseType.OR, conditionsB);
List<ClauseNode> clauses = new ArrayList<ClauseNode>();
clauses.add(clauseA);
clauses.add(clauseB);
Clause root = new Clause(Clause.ClauseType.OR, clauses);
Sentence sentence = PropositionalSentenceMapper.map(root);
assertEquals(Connective.OR, sentence.getConnective());
assertEquals(2, sentence.getNumberSimplerSentences());
Sentence cnf = Query.getCNF(sentence);
Conjunction conjunction = new Conjunction();
Query.flatten(conjunction, cnf);
assertEquals(1, conjunction.getNumberSimplerSentences());
assertEquals(4, conjunction.getSimplerSentence(0).getNumberSimplerSentences());
}
}