com.bigdata.rdf.sparql.ast.eval.TestOptionals Maven / Gradle / Ivy
Show all versions of bigdata-rdf-test Show documentation
/**
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
*/
/*
* Created on Oct 11, 2011
*/
package com.bigdata.rdf.sparql.ast.eval;
/**
* Test suite for OPTIONAL groups. Unlike the TCK, this test suite is focused on
* the semantics of well-formed OPTIONAL groups.
*
* @author Bryan Thompson
* @version $Id$
*/
public class TestOptionals extends AbstractDataDrivenSPARQLTestCase {
public TestOptionals() {
}
public TestOptionals(String name) {
super(name);
}
/**
* Unit test for a simple optional (one where the statement pattern can
* be lifted into the parent group).
*/
public void test_simple_optional_01() throws Exception {
new TestHelper(
"simple-optional-01",// testURI
"simple-optional-01.rq", // queryURI
"simple-optional-01.ttl", // dataURI
"simple-optional-01.srx" // resultURI
).runTest();
}
/**
* Unit test for an optional which is too complex to be handled as a simple
* optional (it uses a filter which can not be lifted since it requires a
* materialized variable).
*/
public void test_optional_with_filter() throws Exception {
new TestHelper(
"optional-with-filter-01",// testURI
"optional-with-filter-01.rq", // queryURI
"optional-with-filter-01.ttl", // dataURI
"optional-with-filter-01.srx" // resultURI
).runTest();
}
/**
* The FILTER will always fail. This means that the OPTIONAL group will
* never produce any solutions. Thus only the original solutions from the
* statement pattern outside of the optional will be reported as solutions
* for the query. This tests the correct eventual triggering of the optional
* hash join at the end of the optional group.
*
* Note: If this test fails, then it is likely that the optional hash join
* was not triggered for its last pass evaluation. For this test to pass the
* optional hash join needs to be triggered for last pass evaluation even
* though no solutions reached the optional hash join through normal
* evaluation (they were all failed by the filter).
*/
public void test_optional_with_filter_that_fails() throws Exception {
new TestHelper("optional-with-filter-that-fails-01",// testURI
"optional-with-filter-that-fails-01.rq", // queryURI
"optional-with-filter-that-fails-01.ttl", // dataURI
"optional-with-filter-that-fails-01.srx" // resultURI
).runTest();
}
/**
* Unit test for an optional which is too complex to be handled as a simple
* optional (it involves more than one statement pattern).
*
*
* select ?x ?o ?y ?z
* where {
* ?x rdf:type foaf:Person
* OPTIONAL {
* ?x rdfs:label ?o
* }
* OPTIONAL {
* ?x foaf:knows ?y .
* ?y foaf:knows ?z .
* FILTER ( ?z != ?x )
* }
* }
*
*/
public void test_complex_optional_01() throws Exception {
new TestHelper(
"complex-optional-01",// testURI
"complex-optional-01.rq", // queryURI
"complex-optional-01.ttl", // dataURI
"complex-optional-01.srx" // resultURI
// ,true// laxCardinality
// ,false // checkOrder
).runTest();
}
/**
* Unit test for trac 712
*
*
* select ?x
* where {
* OPTIONAL {
* FILTER ( false )
* }
* }
*
*/
public void test_non_matching_optional_01() throws Exception {
new TestHelper(
"non-matching-optional-01",// testURI
"non-matching-optional-01.rq", // queryURI
"non-matching-optional-01.ttl", // dataURI
"non-matching-optional-01.srx" // resultURI
// ,true// laxCardinality
// ,false // checkOrder
).runTest();
}
/**
* Unit test for trac 712
*
*
* select ?x
* where {
* BIND ( 1 as ?y )
* OPTIONAL {
* FILTER ( false )
* }
* }
*
*/
public void test_non_matching_optional_02() throws Exception {
new TestHelper(
"non-matching-optional-02",// testURI
"non-matching-optional-02.rq", // queryURI
"non-matching-optional-01.ttl", // dataURI - same as before
"non-matching-optional-01.srx" // resultURI - same as before
// ,true// laxCardinality
// ,false // checkOrder
).runTest();
}
/**
*
* select *
* where {
* ?s rdf:type :Person .
* OPTIONAL {
* ?s :p1 ?p1 .
* OPTIONAL {
* ?p1 :p2 ?o2 .
* }
* }
* }
*
*
* Note: This test was ported from
* TestBigdataSailEvaluationStrategyImpl#test_prune_groups()
*/
public void test_prune_groups() throws Exception {
new TestHelper("prune_groups").runTest();
}
/**
*
* select ?s ?label ?comment
* where {
* ?s rdf:type :Person .
* ?s rdf:type :Object .
* OPTIONAL { ?s rdfs:label ?label . }
* OPTIONAL { ?s rdfs:comment ?comment . }
* }
*
*
* Note: This test was ported from
* TestBigdataSailEvaluationStrategyImpl#test_prune_groups()
*/
public void test_nested_optionals() throws Exception {
new TestHelper("nested_optionals").runTest();
}
/*
* Tests ported from com.bigdata.rdf.sail.TestOptionals.
*/
/**
*
* select *
* where {
* ?a :knows ?b .
* OPTIONAL {
* ?b :knows ?c .
* ?c :knows ?d .
* }
* }
*
*/
public void test_optionals_simplest() throws Exception {
new TestHelper("optionals_simplest").runTest();
}
/**
*
* select *
* where {
* ?a :knows ?b .
* OPTIONAL {
* ?b :knows ?c .
* ?c :knows ?d .
* filter(?d != :leon)
* }
* }
*
*/
public void test_optionals_simplestWithFilter() throws Exception {
new TestHelper("optionals_simplestWithFilter").runTest();
}
/**
*
* select *
* where {
* ?a :knows ?b .
* OPTIONAL {
* ?b :knows ?c .
* ?c :knows ?d .
* filter(?d != :paul)
* }
* }
*
*/
public void test_optionals_simplestWithConditional() throws Exception {
new TestHelper("optionals_simplestWithConditional").runTest();
}
/**
* Test case for issue #1079.
*
*
* select * where {
* optional {
* rdfs:label ?labelPrefered_l_ru.
* filter( langMatches(lang(?labelPrefered_l_ru),"de") )
* }
* optional {
* rdfs:label ?labelPrefered_l_ru.
* filter( langMatches(lang(?labelPrefered_l_ru),"en") )
* }
* }
*
*/
public void test_optionals_emptyWhereClause() throws Exception {
new TestHelper("optionals_emptyWhereClause").runTest();
}
}