All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.bigdata.rdf.sparql.ast.eval.service.TestGeoSpatialServiceEvaluation Maven / Gradle / Ivy

There is a newer version: 2.1.4
Show newest version
/**

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 September 18, 2015
 */
package com.bigdata.rdf.sparql.ast.eval.service;

import java.util.Properties;

import com.bigdata.journal.BufferMode;
import com.bigdata.rdf.axioms.NoAxioms;
import com.bigdata.rdf.sail.BigdataSail;
import com.bigdata.rdf.sparql.ast.eval.AbstractDataDrivenSPARQLTestCase;
import com.bigdata.rdf.store.AbstractTripleStore;

/**
 * Data driven test suite for GeoSpatial service feature in quads mode,
 * testing of different service configurations,
 * as well as correctness of the GeoSpatial service itself.
 * 
 * @author Michael Schmidt
 * @version $Id$
 */
public class TestGeoSpatialServiceEvaluation extends AbstractDataDrivenSPARQLTestCase {

    /**
     * 
     */
    public TestGeoSpatialServiceEvaluation() {
    }

    /**
     * @param name
     */ 
    public TestGeoSpatialServiceEvaluation(String name) {
        super(name);
    }



    /**
     * Verify rectangle search with simple query:
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "2#2" .
     *     ?res geo:spatialRectangleNorthEast "3#6" .
     *     ?res geo:timeStart "4" .
     *     ?res geo:timeEnd "4" .
     *   }
     * } 
     */    
    public void testInRectangleQuery01() throws Exception {
       
       new TestHelper(
          "geo-rectangle01",
          "geo-rectangle01.rq", 
          "geo-grid101010.nt",
          "geo-rectangle01.srx").runTest();
       
    }
    
    /**
     * Verify rectangle search with simple query:
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "5#5" .
     *     ?res geo:spatialRectangleNorthEast "5#5" .
     *     ?res geo:timeStart "1" .
     *     ?res geo:timeEnd "10" .
     *   }
     * } 
     */
    public void testInRectangleQuery02() throws Exception {
       
       new TestHelper(
          "geo-rectangle02",
          "geo-rectangle02.rq", 
          "geo-grid101010.nt",
          "geo-rectangle02.srx").runTest();
       
    }


    /**
     * Verify rectangle search with simple query:
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "-1#9" .
     *     ?res geo:spatialRectangleNorthEast "1#12" .
     *     ?res geo:timeStart "7" .
     *     ?res geo:timeEnd "12" .
     *   }
     * } 
     */
    public void testInRectangleQuery03() throws Exception {
       
       new TestHelper(
          "geo-rectangle03",
          "geo-rectangle03.rq", 
          "geo-grid101010.nt",
          "geo-rectangle03040506.srx").runTest();
       
    }

    /**
     * Verify rectangle search with simple query:
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "-90#8.8837" .
     *     ?res geo:spatialRectangleNorthEast "1.00#12.2344" .
     *     ?res geo:timeStart "7" .
     *     ?res geo:timeEnd "100000000000000" .
     *   }
     * } 
     */
    public void testInRectangleQuery04() throws Exception {
       
       new TestHelper(
          "geo-rectangle04",
          "geo-rectangle04.rq", 
          "geo-grid101010.nt",
          "geo-rectangle03040506.srx").runTest();
       
    }

    /**
     * Verify rectangle search with simple query:
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "-90E0#.88837E1" .
     *     ?res geo:spatialRectangleNorthEast "1.00#179.2344" .
     *     ?res geo:timeStart "7" .
     *     ?res geo:timeEnd "1000000" .
     *   }
     * } 
     */
    public void testInRectangleQuery05() throws Exception {
       
       new TestHelper(
          "geo-rectangle05",
          "geo-rectangle05.rq", 
          "geo-grid101010.nt",
          "geo-rectangle03040506.srx").runTest();
       
    }
    

    /**
     * Verify rectangle search with simple query (not wrapped into service):
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   ?res geo:search "inRectangle" .
     *   ?res geo:predicate  .
     *   ?res geo:spatialRectangleSouthWest "-90E0#.88837E1" .
     *   ?res geo:spatialRectangleNorthEast "1.00#179.2344" .
     *   ?res geo:timeStart "7" .
     *   ?res geo:timeEnd "1000000" .
     * } 
     */
    public void testInRectangleQuery06() throws Exception {
       
       new TestHelper(
          "geo-rectangle06",
          "geo-rectangle06.rq", 
          "geo-grid101010.nt",
          "geo-rectangle03040506.srx").runTest();
       
    }
    
    /**
     * Verify rectangle search with simple query and subsequent join of result.
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "2#2" .
     *     ?res geo:spatialRectangleNorthEast "3#6" .
     *     ?res geo:timeStart "4" .
     *     ?res geo:timeEnd "4" .
     *   }
     *   ?res ?p ?o .
     *   FILTER(?p = )
     * } 
     */
    public void testInRectangleQuery07() throws Exception {
       
       new TestHelper(
          "geo-rectangle07",
          "geo-rectangle07.rq", 
          "geo-grid101010.nt",
          "geo-rectangle07.srx").runTest();
       
    }
    
    
    /**
     * Verify precision handling. The query
     * 
     * PREFIX geo: 
     * SELECT ?res ?o WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "1.10#1.100000001111" .
     *     ?res geo:spatialRectangleNorthEast "6.666666#7" .
     *     ?res geo:timeStart "0" .
     *     ?res geo:timeEnd "0" .
     *   }
     *   ?res ?p ?o .
     * }
     * 
     * is evaluated over data
     * 
     *   "0#0#0"^^ .
     *   "1.1#1.1#0"^^ .
     *   "2.22#2.22#0"^^ .
     *   "3.333#3.333#0"^^ .
     *   "4.4444#4.4444#0"^^ .
     *   "5.55555#5.55555#0"^^ .
     *   "6.666666#6.6666666#0"^^ .
     *   "6.66667#6.6666666#0"^^ .
     *   "6.66666#6.66667#0"^^ .
     *   "6.66667#6.66667#0"^^ .
     * 
     * Since the geospatial datatype has precision=5 (in our standard datatype), 
     * the query is equivalent to
     * 
     * PREFIX geo: 
     * SELECT ?res ?o WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "1.10#1.1" .
     *     ?res geo:spatialRectangleNorthEast "6.66666#7" .
     *     ?res geo:timeStart "0" .
     *     ?res geo:timeEnd "0" .
     *   }
     *   ?res ?p ?o .
     * }
     * 
     * and the data is equivalent to 
     * 
     *   "0#0#0"^^ .
     *   "1.1#1.1#0"^^ .
     *   "2.22#2.22#0"^^ .
     *   "3.333#3.333#0"^^ .
     *   "4.4444#4.4444#0"^^ .
     *   "5.55555#5.55555#0"^^ .
     *   "6.66666#6.666666#0"^^ .
     *   "6.66667#6.666666#0"^^ .
     *   "6.66666#6.66667#0"^^ .
     *   "6.66667#6.66667#0"^^ .
     *  
     * Consequently, subjects s0, s6b, and s6d are *not* contained in the
     * result, while all others are.
     */
    public void testInRectangleQuery08() throws Exception {
       
       new TestHelper(
          "geo-rectangle08",
          "geo-rectangle08.rq", 
          "geo-rectangle08.nt",
          "geo-rectangle08.srx").runTest();
       
    }
    
    /**
     * Verify rectangle search with simple:
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "4#4" .
     *     ?res geo:spatialRectangleNorthEast "5#5" .
     *     ?res geo:timeStart "1" .
     *     ?res geo:timeEnd "10" .
     *   }
     *   hint:Prior  "10" .
     *   hint:Prior  "10" .
     *   hint:Prior  "100" .
     *   hint:Prior  "10" .
     * } 
     * 
     * which implies setup of parallel threads for data extraction.
     */
    public void testRectangleQueryParallel01() throws Exception {
       
       final TestHelper helper = new TestHelper(
          "geo-rectangle-parallel01",
          "geo-rectangle-parallel01.rq", 
          "geo-grid101010.nt",
          "geo-rectangle-parallel.srx");
       
       helper.runTest();
    }
    
    /**
     * Variant of testRectangleQueryParallel01.
     */
    public void testRectangleQueryParallel02() throws Exception {
       
       final TestHelper helper = new TestHelper(
          "geo-rectangle-parallel02",
          "geo-rectangle-parallel02.rq", 
          "geo-grid101010.nt",
          "geo-rectangle-parallel.srx");
       
       helper.runTest();
    }
    
    /**
     * Variant of testRectangleQueryParallel01.
     */
    public void testRectangleQueryParallel03() throws Exception {
       
       final TestHelper helper = new TestHelper(
          "geo-rectangle-parallel03",
          "geo-rectangle-parallel03.rq", 
          "geo-grid101010.nt",
          "geo-rectangle-parallel.srx");
       
       helper.runTest();
    }
    
    /**
     * Variant of testRectangleQueryParallel01.
     */
    public void testRectangleQueryParallel04() throws Exception {
       
       final TestHelper helper = new TestHelper(
          "geo-rectangle-parallel04",
          "geo-rectangle-parallel04.rq", 
          "geo-grid101010.nt",
          "geo-rectangle-parallel.srx");
       
       helper.runTest();
    }
    
    /**
     * Variant of testRectangleQueryParallel01.
     */
    public void testRectangleQueryParallel05() throws Exception {
       
       final TestHelper helper = new TestHelper(
          "geo-rectangle-parallel05",
          "geo-rectangle-parallel05.rq", 
          "geo-grid101010.nt",
          "geo-rectangle-parallel.srx");
       
       helper.runTest();
    }
    
    /**
     * Test query
     * 
     * PREFIX geo: 
     * 
     * SELECT * WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inCircle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialCircleCenter "4#4" .
     *     ?res geo:spatialCircleRadius "1" . #km
     *     ?res geo:timeStart "5" .
     *     ?res geo:timeEnd "7" .
     *   }
     * }
     * 
     * , which extracts the center point 4#4 with three timestamps.
     * 
     * @throws Exception
     */
    public void testInCircleQuery01a() throws Exception {
       
       new TestHelper(
          "geo-circle01a",
          "geo-circle01a.rq", 
          "geo-grid101010.nt",
          "geo-circle01.srx").runTest();
       
    }
    
    /**
     * Test query
     * 
     * PREFIX geo: 
     * 
     * SELECT * WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inCircle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialCircleCenter "4#4" .
     *     ?res geo:spatialCircleRadius "105" . #km
     *     ?res geo:timeStart "5" .
     *     ?res geo:timeEnd "7" .
     *   }
     * } 
     * 
     * , which extracts the center point 4#4 with three timestamps (105km
     * is still too small to match any points of 1 lat/lon distance in the grid)
     * 
     * @throws Exception
     */    
    public void testInCircleQuery01b() throws Exception {
       
       new TestHelper(
          "geo-circle01b",
          "geo-circle01b.rq", 
          "geo-grid101010.nt",
          "geo-circle01.srx").runTest();
       
    }
    
    /**
     * Test query
     * 
     * PREFIX geo: 
     * 
     * SELECT * WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inCircle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialCircleCenter "4#4" .
     *     ?res geo:spatialCircleRadius "65" . 
     *     ?res geo:spatialUnit "Miles" .
     *     ?res geo:timeStart "5" .
     *     ?res geo:timeEnd "7" .
     *   }
     * } 
     * 
     * , which is the same as the circle01b, just using a (roughly) equivalent
     * value specified in miles rather than kilometers.
     * 
     * @throws Exception
     */ 
    public void testInCircleQuery01c() throws Exception {
       
       new TestHelper(
          "geo-circle01c",
          "geo-circle01c.rq", 
          "geo-grid101010.nt",
          "geo-circle01.srx").runTest();
       
    }
    
    /**
     * Test query
     * 
     * PREFIX geo: 
     * 
     * SELECT * WHERE {
     *   ?res geo:search "inCircle" .
     *   ?res geo:predicate  .
     *   ?res geo:spatialCircleCenter "4#4" .
     *   ?res geo:spatialCircleRadius "1" . #km
     *   ?res geo:timeStart "5" .
     *   ?res geo:timeEnd "7" .
     * }
     * 
     * , which is a variante of circle01a just not wrapped into a SERVICE.
     * 
     * @throws Exception
     */
    public void testInCircleQuery01d() throws Exception {
       
       new TestHelper(
          "geo-circle01d",
          "geo-circle01d.rq", 
          "geo-grid101010.nt",
          "geo-circle01.srx").runTest();
       
    }
    

    /**
     * Compared to the circle01* queries, the query
     * 
     * PREFIX geo: 
     * 
     * SELECT * WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inCircle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialCircleCenter "4#4" .
     *     ?res geo:spatialCircleRadius "112" . #km
     *     ?res geo:timeStart "5" .
     *     ?res geo:timeEnd "5" .
     *   }
     * } 
     * 
     * extends the radius such that the point's neighbors in the east, west,
     * south, and nord are matched now.
     * 
     * @throws Exception
     */
    public void testInCircleQuery02() throws Exception {
       
       new TestHelper(
          "geo-circle02",
          "geo-circle02.rq", 
          "geo-grid101010.nt",
          "geo-circle0203.srx").runTest();
       
    }
    

    /**
     * A variant of circle02 where the unit is specified in miles rather
     * than kilometers (delivering the same result).
     */
    public void testInCircleQuery03() throws Exception {
       
       new TestHelper(
          "geo-circle03",
          "geo-circle03.rq", 
          "geo-grid101010.nt",
          "geo-circle0203.srx").runTest();
       
    }
    
    /**
     * Compared to queries circle02 and circle03, the query
     * 
     * PREFIX geo: 
     * 
     * SELECT * WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inCircle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialCircleCenter "4#4" .
     *     ?res geo:spatialCircleRadius "190" . #km
     *     ?res geo:timeStart "5" .
     *     ?res geo:timeEnd "5" .
     *   }
     * } 
     * 
     * extends the radius such that the point's neighbors in the south-east,
     * sout-west, north-east, and north-west are included now as well.
     * @throws Exception
     */
    public void testInCircleQuery04() throws Exception {
       
       new TestHelper(
          "geo-circle04",
          "geo-circle04.rq", 
          "geo-grid101010.nt",
          "geo-circle04.srx").runTest();
       
    }
    
    /**
     *  Compared to queries circle04, the query
     *  
     * PREFIX geo: 
     * 
     * SELECT * WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inCircle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialCircleCenter "4#4" .
     *     ?res geo:spatialCircleRadius "240000" . 
     *     ?res geo:spatialUnit "Meters" .
     *     ?res geo:timeStart "5" .
     *     ?res geo:timeEnd "5" .
     *   }
     * }
     * 
     * further extends the range such that the next set of eastern, western,
     * southern, and northern points are matched.
     */
    public void testInCircleQuery05() throws Exception {
       
       new TestHelper(
          "geo-circle05",
          "geo-circle05.rq", 
          "geo-grid101010.nt",
          "geo-circle05.srx").runTest();
       
    }
    
    /**
     * Query similar in spirit to circle04, but settled at the corner of our
     * gred (top left):
     * 
     * PREFIX geo: 
     * 
     * SELECT * WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inCircle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialCircleCenter "1#1" .
     *     ?res geo:spatialCircleRadius "240" . 
     *     ?res geo:timeStart "5" .
     *     ?res geo:timeEnd "5" .
     *   }
     * }
     * 
     * @throws Exception
     */
    public void testInCircleQuery06a() throws Exception {
       
       new TestHelper(
          "geo-circle06a",
          "geo-circle06a.rq", 
          "geo-grid101010.nt",
          "geo-circle06a.srx").runTest();
       
    }

    /**
     * Query similar in spirit to circle06a, but top-right corner.
     * 
     * @throws Exception
     */
    public void testInCircleQuery06b() throws Exception {
       
       new TestHelper(
          "geo-circle06b",
          "geo-circle06b.rq", 
          "geo-grid101010.nt",
          "geo-circle06b.srx").runTest();
       
    }

    /**
     * Query similar in spirit to circle06a, but lower-left corner.
     * 
     * @throws Exception
     */
    public void testInCircleQuery06c() throws Exception {
       
       new TestHelper(
          "geo-circle06c",
          "geo-circle06c.rq", 
          "geo-grid101010.nt",
          "geo-circle06c.srx").runTest();
       
    }

    /**
     * Query similar in spirit to circle06a, but lower-right corner.
     * 
     * @throws Exception
     */
    public void testInCircleQuery06d() throws Exception {
       
       new TestHelper(
          "geo-circle06d",
          "geo-circle06d.rq", 
          "geo-grid101010.nt",
          "geo-circle06d.srx").runTest();
       
    }
    
    /**
     * Test query
     * 
     * PREFIX geo: 
     * 
     * SELECT * WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inCircle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialCircleCenter "4#4" .
     *     ?res geo:spatialCircleRadius "240000" . 
     *     ?res geo:spatialUnit "Meters" .
     *     ?res geo:timeStart "5" .
     *     ?res geo:timeEnd "5" .
     *   }
     *   hint:Prior  "5" .
     *   hint:Prior  "5" .
     *   hint:Prior  "10" .
     *   hint:Prior  "3" .  
     * } 
     * 
     * , which is the same as circle05 just executed with parallel processing enabled.
     * 
     * @throws Exception
     */
    public void testInCircleQueryParallel01() throws Exception {
       
       final TestHelper helper = new TestHelper(
          "geo-circle-parallel01",
          "geo-circle-parallel01.rq", 
          "geo-grid101010.nt",
          "geo-circle-parallel01.srx");
       
       helper.runTest();
    }

    /**
     * Verify that location value is properly extracted.
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "2#2" .
     *     ?res geo:spatialRectangleNorthEast "3#6" .
     *     ?res geo:timeStart "4" .
     *     ?res geo:timeEnd "4" .
     *     ?res geo:locationValue ?location .
     *   }
     * } 
     */    
    public void testDimensionValueExtracion01() throws Exception {
       
       new TestHelper(
          "geo-valueextr",
          "geo-valueextr01.rq", 
          "geo-grid101010.nt",
          "geo-valueextr01.srx").runTest();
       
    }
    
    /**
     * Verify that time value is properly extracted.
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "2#2" .
     *     ?res geo:spatialRectangleNorthEast "3#6" .
     *     ?res geo:timeStart "4" .
     *     ?res geo:timeEnd "4" .
     *     ?res geo:timeValue ?time .
     *   }
     * } 
     */    
    public void testDimensionValueExtracion02() throws Exception {
       
       new TestHelper(
          "geo-valueextr",
          "geo-valueextr02.rq", 
          "geo-grid101010.nt",
          "geo-valueextr02.srx").runTest();
       
    }
    
    /**
     * Verify that location + time value is properly extracted.
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "2#2" .
     *     ?res geo:spatialRectangleNorthEast "3#6" .
     *     ?res geo:timeStart "4" .
     *     ?res geo:timeEnd "4" .
     *     ?res geo:locationAndTimeValue ?locationAndTime .    
     *   }
     * } 
     */    
    public void testDimensionValueExtracion03() throws Exception {
       
       new TestHelper(
          "geo-valueextr",
          "geo-valueextr03.rq", 
          "geo-grid101010.nt",
          "geo-valueextr03.srx").runTest();
       
    }
    
    
    /**
     * Verify that all dimension values are extracted properly
     * when respective output variables are present
     * 
     * PREFIX geo: 
     * 
     * SELECT ?res WHERE {
     *   SERVICE geo:search {
     *     ?res geo:search "inRectangle" .
     *     ?res geo:predicate  .
     *     ?res geo:spatialRectangleSouthWest "2#2" .
     *     ?res geo:spatialRectangleNorthEast "3#6" .
     *     ?res geo:timeStart "4" .
     *     ?res geo:timeEnd "4" .
     *     ?res geo:locationValue ?location .
     *     ?res geo:timeValue ?time .
     *     ?res geo:locationAndTimeValue ?locationAndTime .    
     *   }
     * } 
     */    
    public void testDimensionValueExtracion04() throws Exception {
       
       new TestHelper(
          "geo-valueextr",
          "geo-valueextr04.rq", 
          "geo-grid101010.nt",
          "geo-valueextr04.srx").runTest();
       
    }
    
    /**
     * Verify that a circle query with illegal center point latitude
     * value fails.
     * 
     * PREFIX geo: 
     * 
     * SERVICE geo:search {
     *   ?res geo:search "inCircle" .
     *   ?res geo:predicate  .
     *   ?res geo:spatialCircleCenter "-91#0.883" .
     *   ?res geo:spatialCircleRadius "10000000" . # spans all earth
     *   ?res geo:timeStart "0" .
     *   ?res geo:timeEnd "0" .
     * }
     */
    public void testCircleOutOfBounds01a() throws Exception {
       
       try {
          new TestHelper(
             "geo-circle-outofbounds1a",
             "geo-circle-outofbounds1a.rq", 
             "geo-small.nt",
             "geo-circle-outofbounds1a.srx").runTest();
       } catch (Exception e) {
          
          // error message is saying that "NortSouth" coordinates 
          // are out of range
          assertTrue(e.getMessage().contains("NorthSouth"));
          
          return; // we should follow this code path
       }
       
       throw new RuntimeException("Expected to run into exception. Test case failed.");
    }
    
    /**
     * Verify that a circle query with illegal center point longitude
     * value fails.
     * 
     * PREFIX geo: 
     * 
     * SERVICE geo:search {
     *   ?res geo:search "inCircle" .
     *   ?res geo:predicate  .
     *   ?res geo:spatialCircleCenter "27.9932#182" .
     *   ?res geo:spatialCircleRadius "10000000" . # spans all earth
     *   ?res geo:timeStart "0" .
     *   ?res geo:timeEnd "0" .
     * }
     */
    public void testCircleOutOfBounds01b() throws Exception {
       
       try {

          new TestHelper(
                "geo-circle-outofbounds1b",
                "geo-circle-outofbounds1b.rq", 
                "geo-small.nt",
                "geo-circle-outofbounds1b.srx").runTest();
       } catch (Exception e) {
          
          // error message is saying that "EastWest" coordinates 
          // are out of range
          assertTrue(e.getMessage().contains("EastWest"));
          
          return; // we should follow this code path

       }
       
       throw new RuntimeException("Expected to run into exception. Test case failed.");

    }

    /**
     * 
     * Verify that a query that spans over the max lat + lon
     * values does not fail, but yields all data in the database.
     * 
     * PREFIX geo: 
     * 
     * SERVICE geo:search {
     *   ?res geo:search "inCircle" .
     *   ?res geo:predicate  .
     *   ?res geo:spatialCircleCenter "27.9932#39.928" .
     *   ?res geo:spatialCircleRadius "10000000" . # spans all earth
     *   ?res geo:timeStart "0" .
     *   ?res geo:timeEnd "0" .
     * }
     */
    public void testCircleOutOfBounds02() throws Exception {
       
       new TestHelper(
             "geo-circle-outofbounds2",
             "geo-circle-outofbounds2.rq", 
             "geo-small.nt",
             "geo-circle-outofbounds2.srx").runTest();
    }
    
    
    /**
     * Assert failing in case of invalid rectangle coordinates (in upper left).
     * 
     * @throws Exception
     */
    public void testRectangleOutOfBounds01a() throws Exception {
       
       try {
          new TestHelper(
             "geo-rectangle-outofbounds1a",
             "geo-rectangle-outofbounds1a.rq", 
             "geo-small.nt",
             "geo-rectangle-outofbounds1a.srx").runTest();
       } catch (Exception e) {
          
          // error message is saying that "NortSouth" coordinates 
          // are out of range
          assertTrue(e.getMessage().contains("NorthSouth"));
          
          return; // we should follow this code path
       }
       
       throw new RuntimeException("Expected to run into exception. Test case failed.");
    }
    
    /**
     * Assert failing in case of invalid rectangle coordinates (in lower right).
     * 
     * @throws Exception
     */
    public void testRectangleOutOfBounds01b() throws Exception {
       
       try {
          new TestHelper(
             "geo-rectangle-outofbounds1b",
             "geo-rectangle-outofbounds1b.rq", 
             "geo-small.nt",
             "geo-rectangle-outofbounds1b.srx").runTest();
       } catch (Exception e) {
          
          // error message is saying that "EathWest" coordinates 
          // are out of range
          assertTrue(e.getMessage().contains("EastWest"));
          
          return; // we should follow this code path
       }
       
       
       throw new RuntimeException("Expected to run into exception. Test case failed.");
    }
    
    /**
     * Real world test against geo coordinates of few cities.
     * 
     * @throws Exception
     */
    public void testRealWordCircle01() throws Exception {
       
       new TestHelper(
             "geo-realworld-circle01",
             "geo-realworld-circle01.rq", 
             "geo-realworld-cities.nt",
             "geo-realworld-circle01.srx").runTest();
    }

    /**
     * Real world test against geo coordinates of few cities.
     * 
     * @throws Exception
     */
    public void testRealWordCircle02() throws Exception {
       
       new TestHelper(
             "geo-realworld-circle02",
             "geo-realworld-circle02.rq", 
             "geo-realworld-cities.nt",
             "geo-realworld-circle02.srx").runTest();
    }

    /**
     * Real world test against geo coordinates of few cities.
     * 
     * @throws Exception
     */
    public void testRealWordRectangle01() throws Exception {
       
       new TestHelper(
             "geo-realworld-rectangle01",
             "geo-realworld-rectangle01.rq", 
             "geo-realworld-cities.nt",
             "geo-realworld-rectangle01.srx").runTest();       
    }

    /**
     * Rectangle test q query on grid ranging from [-179;180] longitude
     * and [-5;5] latitude and fixed "0" timestamp, aiming
     * covering edge cases overlapping the -180 and +180
     * longitude values.
     * 
     * @throws Exception
     */
    public void testGrid180x5vRectangle01() throws Exception {
        new TestHelper(
            "geo-grid180-rectangle01",
            "geo-grid180-rectangle01.rq", 
            "geo-grid180x5.n3",
            "geo-grid180-rectangle01.srx").runTest();     
    }

    
    /**
     * Rectangle test query on grid ranging from [-179;180] longitude
     * and [-5;5] latitude and fixed "0" timestamp, aiming
     * covering edge cases overlapping the -180 and +180
     * longitude values.
     * 
     * @throws Exception
     */
    public void testGrid180x5vRectangle02() throws Exception {
        new TestHelper(
            "geo-grid180-rectangle02",
            "geo-grid180-rectangle02.rq", 
            "geo-grid180x5.n3",
            "geo-grid180-rectangle02.srx").runTest();     
    }

    
    /**
     * Rectangle test query on grid ranging from [-179;180] longitude
     * and [-5;5] latitude and fixed "0" timestamp, aiming
     * covering edge cases overlapping the -180 and +180
     * longitude values.
     * 
     * @throws Exception
     */
    public void testGrid180x5vRectangle03() throws Exception {
        new TestHelper(
            "geo-grid180-rectangle03",
            "geo-grid180-rectangle03.rq", 
            "geo-grid180x5.n3",
            "geo-grid180-rectangle03.srx").runTest();     
    }
    
    /**
     * Circle test q query on grid ranging from [-179;180] longitude
     * and [-5;5] latitude and fixed "0" timestamp, aiming
     * covering edge cases overlapping the -180 and +180
     * longitude values.
     * 
     * @throws Exception
     */
    public void testGrid180x5vCircle01() throws Exception {
        new TestHelper(
            "geo-grid180-circle01",
            "geo-grid180-circle01.rq", 
            "geo-grid180x5.n3",
            "geo-grid180-circle01.srx").runTest();     
    }

    
    /**
     * Circle test query on grid ranging from [-179;180] longitude
     * and [-5;5] latitude and fixed "0" timestamp, aiming
     * covering edge cases overlapping the -180 and +180
     * longitude values.
     * 
     * @throws Exception
     */
    public void testGrid180x5vCircle02() throws Exception {
        new TestHelper(
            "geo-grid180-circle02",
            "geo-grid180-circle02.rq", 
            "geo-grid180x5.n3",
            "geo-grid180-circle02.srx").runTest();     
    }

    
    /**
     * Circle test q query on grid ranging from [-179;180] longitude
     * and [-5;5] latitude and fixed "0" timestamp, aiming
     * covering edge cases overlapping the -180 and +180
     * longitude values.
     * 
     * @throws Exception
     */
    public void testGrid180x5vCircle03() throws Exception {
        new TestHelper(
            "geo-grid180-circle03",
            "geo-grid180-circle03.rq", 
            "geo-grid180x5.n3",
            "geo-grid180-circle03.srx").runTest();     
    }

    
    /**
     * Circle test q query on grid ranging from [-179;180] longitude
     * and [-5;5] latitude and fixed "0" timestamp, aiming
     * covering edge cases overlapping the -180 and +180
     * longitude values.
     * 
     * @throws Exception
     */
    public void testGrid180x5vCircle04() throws Exception {
        new TestHelper(
            "geo-grid180-circle04",
            "geo-grid180-circle04.rq", 
            "geo-grid180x5.n3",
            "geo-grid180-circle04.srx").runTest();     
    }

    /**
     * BLZG-1718: exception if search predicate is unknown
     * 
     * @throws Exception
     */
    public void testUnknwonPredicate() throws Exception {
        new TestHelper(
                "geo-unknown-predicate",
                "geo-unknown-predicate.rq", 
                "geo-unknown-predicate.nt",
                "geo-unknown-predicate.srx").runTest();     
    }
    
    /**
     * BLZG-1719: test rectangle for real-world example
     * 
     * @throws Exception
     */
    public void testRectangleRealworld() throws Exception {
        new TestHelper(
                "geo-rectangle-realworld",
                "geo-rectangle-realworld.rq", 
                "geo-rectangle-realworld.n3",
                "geo-rectangle-realworld.srx").runTest();     
    }
    
    @Override
    public Properties getProperties() {

        // Note: clone to avoid modifying!!!
        final Properties properties = (Properties) super.getProperties().clone();

        // turn on quads.
        properties.setProperty(AbstractTripleStore.Options.QUADS, "false");

        // TM not available with quads.
        properties.setProperty(BigdataSail.Options.TRUTH_MAINTENANCE,"false");

        // turn off axioms.
        properties.setProperty(AbstractTripleStore.Options.AXIOMS_CLASS,
                NoAxioms.class.getName());

        // no persistence.
        properties.setProperty(com.bigdata.journal.Options.BUFFER_MODE,
                BufferMode.Transient.toString());

        // enable GeoSpatial index
        properties.setProperty(
           com.bigdata.rdf.store.AbstractLocalTripleStore.Options.GEO_SPATIAL, "true");

        return properties;

    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy