public virtual void runTestQuery(SpatialMatchConcern concern, SpatialTestQuery q) { String msg = q.toString(); //"Query: " + q.args.toString(ctx); SearchResults got = executeQuery(makeQuery(q), Math.Max(100, q.ids.size() + 1)); if (storeShape && got.numFound > 0) { //check stored value is there assertNotNull(got.results[0].document.Get(strategy.FieldName)); } if (concern.orderIsImportant) { IEnumerator<String> ids = q.ids.GetEnumerator(); foreach (SearchResult r in got.results) { String id = r.document.Get("id"); if (!ids.MoveNext()) { fail(msg + " :: Did not get enough results. Expect" + q.ids + ", got: " + got.toDebugString()); } assertEquals("out of order: " + msg, ids.Current, id); } if (ids.MoveNext()) { fail(msg + " :: expect more results then we got: " + ids.Current); } } else { // We are looking at how the results overlap if (concern.resultsAreSuperset) { ISet<string> found = new JCG.HashSet<string>(); foreach (SearchResult r in got.results) { found.add(r.document.Get("id")); } foreach (String s in q.ids) { if (!found.contains(s)) { fail("Results are mising id: " + s + " :: " + found); } } } else { List<string> found = new List<string>(); foreach (SearchResult r in got.results) { found.Add(r.document.Get("id")); } // sort both so that the order is not important CollectionUtil.TimSort(q.ids); CollectionUtil.TimSort(found); assertEquals(msg, q.ids.toString(), found.toString()); } } }
protected virtual IEnumerator <SpatialTestQuery> getTestQueries(String testQueryFile, SpatialContext ctx) { Stream @in = GetType().getResourceAsStream(RESOURCE_PATH + testQueryFile); return(SpatialTestQuery.GetTestQueries( argsParser, ctx, testQueryFile, @in));//closes the InputStream }
public virtual void runTestQueries( IEnumerator <SpatialTestQuery> queries, SpatialMatchConcern concern) { while (queries.MoveNext()) { SpatialTestQuery q = queries.Current; runTestQuery(concern, q); } }
/** * Get Test Queries. The InputStream is closed. */ public static IEnumerator <SpatialTestQuery> GetTestQueries( SpatialArgsParser parser, SpatialContext ctx, string name, Stream @in) { IList <SpatialTestQuery> results = new JCG.List <SpatialTestQuery>(); TextReader bufInput = new StreamReader(@in, Encoding.UTF8); try { String line; for (int lineNumber = 1; (line = bufInput.ReadLine()) != null; lineNumber++) { SpatialTestQuery test = new SpatialTestQuery(); test.line = line; test.lineNumber = lineNumber; try { // skip a comment if (line.StartsWith("[", StringComparison.Ordinal)) { int idx2 = line.IndexOf(']'); if (idx2 > 0) { line = line.Substring(idx2 + 1); } } int idx = line.IndexOf('@'); StringTokenizer st = new StringTokenizer(line.Substring(0, idx - 0)); while (st.MoveNext()) { test.ids.Add(st.Current.Trim()); } test.args = parser.Parse(line.Substring(idx + 1).Trim(), ctx); results.Add(test); } catch (Exception ex) { throw RuntimeException.Create("invalid query line: " + test.line, ex); } } } finally { bufInput.Dispose(); } return(results.GetEnumerator()); }
/** * Get Test Queries. The InputStream is closed. */ public static IEnumerator<SpatialTestQuery> GetTestQueries( SpatialArgsParser parser, SpatialContext ctx, string name, Stream @in) { List<SpatialTestQuery> results = new List<SpatialTestQuery>(); TextReader bufInput = new StreamReader(@in, Encoding.UTF8); try { String line; for (int lineNumber = 1; (line = bufInput.ReadLine()) != null; lineNumber++) { SpatialTestQuery test = new SpatialTestQuery(); test.line = line; test.lineNumber = lineNumber; try { // skip a comment if (line.StartsWith("[", StringComparison.Ordinal)) { int idx2 = line.IndexOf(']'); if (idx2 > 0) { line = line.Substring(idx2 + 1); } } int idx = line.IndexOf('@'); StringTokenizer st = new StringTokenizer(line.Substring(0, idx - 0)); while (st.HasMoreTokens()) { test.ids.Add(st.NextToken().Trim()); } test.args = parser.Parse(line.Substring(idx + 1).Trim(), ctx); results.Add(test); } catch (Exception ex) { throw new ApplicationException("invalid query line: " + test.line, ex); } } } finally { bufInput.Dispose(); } return results.GetEnumerator(); }
protected virtual void AssertOperation(IDictionary<String, IShape> indexedDocs, SpatialOperation operation, IShape queryShape) { //Generate truth via brute force ISet<string> expectedIds = new JCG.HashSet<string>(); foreach (var stringShapeEntry in indexedDocs) { if (operation.Evaluate(stringShapeEntry.Value, queryShape)) expectedIds.add(stringShapeEntry.Key); } SpatialTestQuery testQuery = new SpatialTestQuery(); testQuery.args = new SpatialArgs(operation, queryShape); testQuery.ids = new List<string>(expectedIds); runTestQuery(SpatialMatchConcern.FILTER, testQuery); }
public virtual void TestQueries() { String name = StrategyTestCase.RESOURCE_PATH + StrategyTestCase.QTEST_Cities_Intersects_BBox; Stream @in = GetType().getResourceAsStream(name); SpatialContext ctx = SpatialContext.GEO; IEnumerator <SpatialTestQuery> iter = SpatialTestQuery.GetTestQueries( new SpatialArgsParser(), ctx, name, @in);//closes the InputStream IList <SpatialTestQuery> tests = new JCG.List <SpatialTestQuery>(); while (iter.MoveNext()) { tests.Add(iter.Current); } assertEquals(3, tests.size()); SpatialTestQuery sf = tests[0]; // assert assertEquals(1, sf.ids.size()); assertTrue(sf.ids[0].Equals("G5391959", StringComparison.Ordinal)); assertTrue(sf.args.Shape is IRectangle); assertEquals(SpatialOperation.Intersects, sf.args.Operation); }
protected virtual Query makeQuery(SpatialTestQuery q) { return(strategy.MakeQuery(q.args)); }
protected virtual void AssertOperation(IDictionary<String, IShape> indexedDocs, SpatialOperation operation, IShape queryShape) { //Generate truth via brute force ISet<string> expectedIds = new HashSet<string>(); foreach (var stringShapeEntry in indexedDocs) { if (operation.Evaluate(stringShapeEntry.Value, queryShape)) expectedIds.add(stringShapeEntry.Key); } SpatialTestQuery testQuery = new SpatialTestQuery(); testQuery.args = new SpatialArgs(operation, queryShape); testQuery.ids = new List<string>(expectedIds); runTestQuery(SpatialMatchConcern.FILTER, testQuery); }
protected virtual Query makeQuery(SpatialTestQuery q) { return strategy.MakeQuery(q.args); }
public virtual void runTestQuery(SpatialMatchConcern concern, SpatialTestQuery q) { String msg = q.toString(); //"Query: " + q.args.toString(ctx); SearchResults got = executeQuery(makeQuery(q), Math.Max(100, q.ids.size() + 1)); if (storeShape && got.numFound > 0) { //check stored value is there assertNotNull(got.results[0].document.Get(strategy.FieldName)); } if (concern.orderIsImportant) { IEnumerator<String> ids = q.ids.GetEnumerator(); foreach (SearchResult r in got.results) { String id = r.document.Get("id"); if (!ids.MoveNext()) { fail(msg + " :: Did not get enough results. Expect" + q.ids + ", got: " + got.toDebugString()); } assertEquals("out of order: " + msg, ids.Current, id); } if (ids.MoveNext()) { fail(msg + " :: expect more results then we got: " + ids.Current); } } else { // We are looking at how the results overlap if (concern.resultsAreSuperset) { ISet<string> found = new HashSet<string>(); foreach (SearchResult r in got.results) { found.add(r.document.Get("id")); } foreach (String s in q.ids) { if (!found.contains(s)) { fail("Results are mising id: " + s + " :: " + found); } } } else { List<string> found = new List<string>(); foreach (SearchResult r in got.results) { found.Add(r.document.Get("id")); } // sort both so that the order is not important CollectionUtil.TimSort(q.ids); CollectionUtil.TimSort(found); assertEquals(msg, q.ids.toString(), found.toString()); } } }