/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2007.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.query.algebra.evaluation.util;
import info.aduna.iteration.CloseableIteration;
import java.util.Arrays;
import java.util.Iterator;
import junit.framework.TestCase;
import org.openrdf.model.Value;
import org.openrdf.query.BindingSet;
import org.openrdf.query.QueryEvaluationException;
import org.openrdf.query.algebra.Order;
import org.openrdf.query.algebra.OrderElem;
import org.openrdf.query.algebra.TupleExpr;
import org.openrdf.query.algebra.ValueExpr;
import org.openrdf.query.algebra.evaluation.EvaluationStrategy;
import org.openrdf.query.algebra.evaluation.ValueExprEvaluationException;
/**
*
* @author james
*
*/
public class OrderComparatorTest extends TestCase {
class EvaluationStrategyStub implements EvaluationStrategy {
public CloseableIteration<BindingSet, QueryEvaluationException> evaluate(
TupleExpr expr, BindingSet bindings)
throws QueryEvaluationException {
throw new UnsupportedOperationException();
}
public Value evaluate(ValueExpr expr, BindingSet bindings)
throws ValueExprEvaluationException, QueryEvaluationException {
return null;
}
public boolean isTrue(ValueExpr expr, BindingSet bindings)
throws ValueExprEvaluationException, QueryEvaluationException {
throw new UnsupportedOperationException();
}
}
class ComparatorStub extends ValueComparator {
Iterator<Integer> iter;
public void setIterator(Iterator<Integer> iter) {
this.iter = iter;
}
@Override
public int compare(Value o1, Value o2) {
return iter.next();
}
}
private EvaluationStrategyStub strategy = new EvaluationStrategyStub();
private Order order = new Order();
private OrderElem asc = new OrderElem();
private OrderElem desc = new OrderElem();
private ComparatorStub cmp = new ComparatorStub();
private int ZERO = 0;
private int POS = 378;
private int NEG = -7349;
public void testEquals() throws Exception {
order.addElement(asc);
cmp.setIterator(Arrays.asList(ZERO).iterator());
OrderComparator sud = new OrderComparator(strategy, order, cmp);
assertTrue(sud.compare(null, null) == 0);
}
public void testZero() throws Exception {
order.addElement(asc);
order.addElement(asc);
cmp.setIterator(Arrays.asList(ZERO, POS).iterator());
OrderComparator sud = new OrderComparator(strategy, order, cmp);
assertTrue(sud.compare(null, null) > 0);
}
public void testTerm() throws Exception {
order.addElement(asc);
order.addElement(asc);
cmp.setIterator(Arrays.asList(POS, NEG).iterator());
OrderComparator sud = new OrderComparator(strategy, order, cmp);
assertTrue(sud.compare(null, null) > 0);
}
public void testAscLessThan() throws Exception {
order.addElement(asc);
cmp.setIterator(Arrays.asList(NEG).iterator());
OrderComparator sud = new OrderComparator(strategy, order, cmp);
assertTrue(sud.compare(null, null) < 0);
}
public void testAscGreaterThan() throws Exception {
order.addElement(asc);
cmp.setIterator(Arrays.asList(POS).iterator());
OrderComparator sud = new OrderComparator(strategy, order, cmp);
assertTrue(sud.compare(null, null) > 0);
}
public void testDescLessThan() throws Exception {
order.addElement(desc);
cmp.setIterator(Arrays.asList(NEG).iterator());
OrderComparator sud = new OrderComparator(strategy, order, cmp);
assertTrue(sud.compare(null, null) > 0);
}
public void testDescGreaterThan() throws Exception {
order.addElement(desc);
cmp.setIterator(Arrays.asList(POS).iterator());
OrderComparator sud = new OrderComparator(strategy, order, cmp);
assertTrue(sud.compare(null, null) < 0);
}
@Override
protected void setUp() throws Exception {
asc.setAscending(true);
desc.setAscending(false);
}
}