com.bigdata.bop.rdf.aggregate.TestCOUNT Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bigdata-rdf-test Show documentation
Show all versions of bigdata-rdf-test Show documentation
Blazegraph(TM) RDF Test Suites
/**
Copyright (C) SYSTAP, LLC DBA Blazegraph 2006-2016. All rights reserved.
Contact:
SYSTAP, LLC DBA Blazegraph
2501 Calvert ST NW #106
Washington, DC 20008
[email protected]
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; version 2 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package com.bigdata.bop.rdf.aggregate;
import java.math.BigInteger;
import junit.framework.TestCase2;
import com.bigdata.bop.BOpContext;
import com.bigdata.bop.Constant;
import com.bigdata.bop.ContextBindingSet;
import com.bigdata.bop.IBindingSet;
import com.bigdata.bop.IConstant;
import com.bigdata.bop.IVariable;
import com.bigdata.bop.TestMockUtility;
import com.bigdata.bop.Var;
import com.bigdata.bop.bindingSet.ListBindingSet;
import com.bigdata.journal.ITx;
import com.bigdata.rdf.error.SparqlTypeErrorException;
import com.bigdata.rdf.internal.IV;
import com.bigdata.rdf.internal.VTE;
import com.bigdata.rdf.internal.XSD;
import com.bigdata.rdf.internal.constraints.MathBOp;
import com.bigdata.rdf.internal.impl.TermId;
import com.bigdata.rdf.internal.impl.literal.XSDIntegerIV;
import com.bigdata.rdf.internal.impl.literal.XSDNumericIV;
import com.bigdata.rdf.model.BigdataLiteral;
import com.bigdata.rdf.model.BigdataValue;
import com.bigdata.rdf.model.BigdataValueFactory;
import com.bigdata.rdf.model.BigdataValueFactoryImpl;
import com.bigdata.rdf.sparql.ast.GlobalAnnotations;
import com.bigdata.rdf.store.AbstractTripleStore;
import com.bigdata.util.InnerCause;
/**
* Unit tests for {@link COUNT}.
*
* @author thompsonbry
*/
public class TestCOUNT extends TestCase2 {
public TestCOUNT() {
}
public TestCOUNT(String name) {
super(name);
}
protected void setUp() throws Exception {
super.setUp();
}
protected void tearDown() throws Exception {
super.tearDown();
}
public void test_count() {
final IVariable org = Var.var("org");
final IVariable auth = Var.var("auth");
final IVariable book = Var.var("book");
final IVariable lprice = Var.var("lprice");
final IConstant org1 = new Constant("org1");
final IConstant org2 = new Constant("org2");
final IConstant auth1 = new Constant("auth1");
final IConstant auth2 = new Constant("auth2");
final IConstant auth3 = new Constant("auth3");
final IConstant book1 = new Constant("book1");
final IConstant book2 = new Constant("book2");
final IConstant book3 = new Constant("book3");
final IConstant book4 = new Constant("book4");
final IConstant> price5 = new Constant>(
new XSDNumericIV(5));
final IConstant> price7 = new Constant>(
new XSDNumericIV(7));
final IConstant> price9 = new Constant>(
new XSDNumericIV(9));
/**
* The test data:
*
*
* ?org ?auth ?book ?lprice
* org1 auth1 book1 9
* org1 auth1 book3 5
* org1 auth2 book3 7
* org2 auth3 book4 7
*
*/
final IBindingSet data [] = new IBindingSet []
{
new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth1, book1, price9 } )
, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth1, book2, price5 } )
, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth2, book3, price7 } )
, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org2, auth3, book4, price7 } )
};
final COUNT op = new COUNT(false/* distinct */, lprice);
assertFalse(op.isDistinct());
assertFalse(op.isWildcard());
op.reset();
for (IBindingSet bs : data) {
op.get(bs);
}
assertEquals(new XSDIntegerIV(new BigInteger(Long.toString((long) data.length))), op.done());
}
public void test_count_with_complex_inner_value_expression() {
AbstractTripleStore kb = TestMockUtility.mockTripleStore(getName());
try {
final BOpContext context = TestMockUtility.mockContext(kb);
final String lexiconNamespace = kb.getLexiconRelation().getNamespace();
GlobalAnnotations globals = new GlobalAnnotations(lexiconNamespace, ITx.READ_COMMITTED);
final IVariable org = Var.var("org");
final IVariable auth = Var.var("auth");
final IVariable book = Var.var("book");
final IVariable lprice = Var.var("lprice");
final IConstant org1 = new Constant("org1");
final IConstant org2 = new Constant("org2");
final IConstant auth1 = new Constant("auth1");
final IConstant auth2 = new Constant("auth2");
final IConstant auth3 = new Constant("auth3");
final IConstant book1 = new Constant("book1");
final IConstant book2 = new Constant("book2");
final IConstant book3 = new Constant("book3");
final IConstant book4 = new Constant("book4");
final IConstant> price5 = new Constant>(
new XSDNumericIV(5));
final IConstant> price7 = new Constant>(
new XSDNumericIV(7));
final IConstant> price9 = new Constant>(
new XSDNumericIV(9));
/**
* The test data:
*
*
* ?org ?auth ?book ?lprice
* org1 auth1 book1 9
* org1 auth1 book3 5
* org1 auth2 book3 7
* org2 auth3 book4 7
*
*/
final IBindingSet data [] = new IBindingSet []
{
new ContextBindingSet(context, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth1, book1, price9 } ))
, new ContextBindingSet(context, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth1, book2, price5 } ))
, new ContextBindingSet(context, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth2, book3, price7 } ))
, new ContextBindingSet(context, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org2, auth3, book4, price7 } ))
};
// COUNT(lprice+1)
final COUNT op = new COUNT(false/* distinct */, new MathBOp(lprice,
new Constant(new XSDNumericIV(1)), MathBOp.MathOp.PLUS,globals));
assertFalse(op.isDistinct());
assertFalse(op.isWildcard());
op.reset();
for (IBindingSet bs : data) {
op.get(bs);
}
assertEquals(new XSDIntegerIV(new BigInteger(Long.toString((long) data.length))), op.done());
} finally {
kb.getIndexManager().destroy();
}
}
public void test_count_with_null() {
final IVariable org = Var.var("org");
final IVariable auth = Var.var("auth");
final IVariable book = Var.var("book");
final IVariable lprice = Var.var("lprice");
final IConstant org1 = new Constant("org1");
final IConstant org2 = new Constant("org2");
final IConstant auth1 = new Constant("auth1");
final IConstant auth2 = new Constant("auth2");
final IConstant auth3 = new Constant("auth3");
final IConstant book1 = new Constant("book1");
final IConstant book2 = new Constant("book2");
final IConstant book3 = new Constant("book3");
final IConstant book4 = new Constant("book4");
final IConstant> price7 = new Constant>(
new XSDNumericIV(7));
final IConstant> price9 = new Constant>(
new XSDNumericIV(9));
/**
* The test data:
*
*
* ?org ?auth ?book ?lprice
* org1 auth1 book1 9
* org1 auth1 book3 NULL
* org1 auth2 book3 7
* org2 auth3 book4 7
*
*/
final IBindingSet data [] = new IBindingSet []
{
new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth1, book1, price9 } )
, new ListBindingSet ( new IVariable> [] { org, auth, book, }, new IConstant [] { org1, auth1, book2, } )
, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth2, book3, price7 } )
, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org2, auth3, book4, price7 } )
};
final COUNT op = new COUNT(false/* distinct */, lprice);
assertFalse(op.isDistinct());
assertFalse(op.isWildcard());
op.reset();
for (IBindingSet bs : data) {
op.get(bs);
}
assertEquals(new XSDIntegerIV(new BigInteger(Long.toString(3L))), op.done());
}
public void test_count_with_errors() {
AbstractTripleStore kb = TestMockUtility.mockTripleStore(getName());
try {
final BOpContext context = TestMockUtility.mockContext(kb);
final String lexiconNamespace = kb.getLexiconRelation().getNamespace();
GlobalAnnotations globals = new GlobalAnnotations(lexiconNamespace, ITx.READ_COMMITTED);
final BigdataValueFactory f = BigdataValueFactoryImpl.getInstance(getName());
final IVariable org = Var.var("org");
final IVariable auth = Var.var("auth");
final IVariable book = Var.var("book");
final IVariable lprice = Var.var("lprice");
final IConstant org1 = new Constant("org1");
final IConstant org2 = new Constant("org2");
final IConstant auth1 = new Constant("auth1");
final TermId tid1 = new TermId(VTE.LITERAL, 1);
tid1.setValue(f.createLiteral("auth2"));
final IConstant auth2 = new Constant(tid1);
final IConstant auth3 = new Constant("auth3");
final IConstant book1 = new Constant("book1");
final IConstant book2 = new Constant("book2");
final IConstant book3 = new Constant("book3");
final IConstant book4 = new Constant("book4");
final IConstant> price5 = new Constant>(
new XSDNumericIV(5));
final IConstant> price7 = new Constant>(
new XSDNumericIV(7));
final IConstant> price9 = new Constant>(
new XSDNumericIV(9));
/**
* The test data:
*
*
* ?org ?auth ?book ?lprice
* org1 auth1 book1 9
* org1 auth1 book3 5
* org1 auth2 book3 7
* org2 auth3 book4 7
*
*/
final IBindingSet data [] = new IBindingSet []
{
new ContextBindingSet(context, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth1, book1, price9 } ))
, new ContextBindingSet(context, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth1, book2, price5 } ))
, new ContextBindingSet(context, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org1, auth2, book3, auth2 } ))
, new ContextBindingSet(context, new ListBindingSet ( new IVariable> [] { org, auth, book, lprice }, new IConstant [] { org2, auth3, book4, price7 } ))
};
/*
* Setup a materialized IV for ZERO (0).
*/
final IV ZERO = new XSDNumericIV(0);
ZERO.setValue(f.createLiteral("0", XSD.INT));
// Note: Formula will produce an error for non-numeric data.
final COUNT op = new COUNT(false/* distinct */, new MathBOp(lprice,
new Constant(ZERO), MathBOp.MathOp.PLUS,globals));
assertFalse(op.isDistinct());
assertFalse(op.isWildcard());
try {
op.reset();
for (IBindingSet bs : data) {
op.get(bs);
}
fail("Expecting: " + SparqlTypeErrorException.class);
} catch (RuntimeException ex) {
if (InnerCause.isInnerCause(ex, SparqlTypeErrorException.class)) {
if (log.isInfoEnabled()) {
log.info("Ignoring expected exception: " + ex);
}
} else {
fail("Expecting: " + SparqlTypeErrorException.class, ex);
}
}
/*
* Now verify that the error is sticky.
*/
try {
op.done();
fail("Expecting: " + SparqlTypeErrorException.class);
} catch (RuntimeException ex) {
if (InnerCause.isInnerCause(ex, SparqlTypeErrorException.class)) {
if (log.isInfoEnabled()) {
log.info("Ignoring expected exception: " + ex);
}
} else {
fail("Expecting: " + SparqlTypeErrorException.class, ex);
}
}
/*
* Now verify that reset() clears the error.
*/
op.reset();
op.done();
} finally {
kb.getIndexManager().destroy();
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy