You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by yo...@apache.org on 2010/09/12 19:12:22 UTC

svn commit: r996343 - /lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/search/TestSort.java

Author: yonik
Date: Sun Sep 12 17:12:21 2010
New Revision: 996343

URL: http://svn.apache.org/viewvc?rev=996343&view=rev
Log:
tests: expand TestSort to cover more cases

Modified:
    lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/search/TestSort.java

Modified: lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/search/TestSort.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/search/TestSort.java?rev=996343&r1=996342&r2=996343&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/search/TestSort.java (original)
+++ lucene/dev/branches/branch_3x/solr/src/test/org/apache/solr/search/TestSort.java Sun Sep 12 17:12:21 2010
@@ -24,6 +24,7 @@ import org.apache.lucene.index.IndexRead
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.search.*;
 import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.util.OpenBitSet;
 import org.apache.solr.util.AbstractSolrTestCase;
 
@@ -37,7 +38,7 @@ public class TestSort extends AbstractSo
   Random r = new Random();
 
   int ndocs = 77;
-  int iter = 100;  
+  int iter = 50;
   int qiter = 1000;
   int commitCount = ndocs/5 + 1;
   int maxval = ndocs*2;
@@ -45,37 +46,45 @@ public class TestSort extends AbstractSo
   static class MyDoc {
     int doc;
     String val;
+    String val2;
+
+    public String toString() {
+      return "{id=" +doc + " val1="+val + " val2="+val2 + "}";
+    }
   }
 
   public void testSort() throws Exception {
-    Directory dir = newDirectory();
-    Document smallDoc = new Document();
-    // Field id = new Field("id","0", Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS);
+    Directory dir = new RAMDirectory();
     Field f = new Field("f","0", Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS);
-    smallDoc.add(f);
-
-    Document emptyDoc = new Document();
+    Field f2 = new Field("f2","0", Field.Store.NO, Field.Index.NOT_ANALYZED_NO_NORMS);
 
     for (int iterCnt = 0; iterCnt<iter; iterCnt++) {
       IndexWriter iw = new IndexWriter(dir, new SimpleAnalyzer(), true, IndexWriter.MaxFieldLength.UNLIMITED);
       final MyDoc[] mydocs = new MyDoc[ndocs];
 
+      int v1EmptyPercent = 50;
+      int v2EmptyPercent = 50;
+
       int commitCountdown = commitCount;
       for (int i=0; i< ndocs; i++) {
-        Document doc;
         MyDoc mydoc = new MyDoc();
         mydoc.doc = i;
         mydocs[i] = mydoc;
 
-        if (r.nextInt(3)==0) {
-          doc = emptyDoc;
-          mydoc.val = null;
-        } else {
+        Document document = new Document();
+        if (r.nextInt(100) < v1EmptyPercent) {
           mydoc.val = Integer.toString(r.nextInt(maxval));
           f.setValue(mydoc.val);
-          doc = smallDoc;
+          document.add(f);
+        }
+        if (r.nextInt(100) < v2EmptyPercent) {
+          mydoc.val2 = Integer.toString(r.nextInt(maxval));
+          f2.setValue(mydoc.val2);
+          document.add(f2);
         }
-        iw.addDocument(doc);
+
+
+        iw.addDocument(document);
         if (--commitCountdown <= 0) {
           commitCountdown = commitCount;
           iw.commit();
@@ -83,17 +92,6 @@ public class TestSort extends AbstractSo
       }
       iw.close();
 
-      /***
-      Arrays.sort(mydocs, new Comparator<MyDoc>() {
-        public int compare(MyDoc o1, MyDoc o2) {
-          String v1 = o1.val==null ? "zzz" : o1.val;
-          String v2 = o2.val==null ? "zzz" : o2.val;
-          int cmp = v1.compareTo(v2);
-          cmp = cmp==0 ? o1.doc-o2.doc : cmp;
-          return cmp;
-        }
-      });
-      ***/
 
       IndexSearcher searcher = new IndexSearcher(dir, true);
       // System.out.println("segments="+searcher.getIndexReader().getSequentialSubReaders().length);
@@ -108,20 +106,30 @@ public class TestSort extends AbstractSo
         };
 
         int top = r.nextInt((ndocs>>3)+1)+1;
-        final boolean sortMissingLast = r.nextBoolean();
-        final boolean reverse = !sortMissingLast;
+        final boolean luceneSort = r.nextBoolean();
+        final boolean sortMissingLast = !luceneSort && r.nextBoolean();
+        final boolean sortMissingFirst = !luceneSort && !sortMissingLast;
+        final boolean reverse = r.nextBoolean();
         List<SortField> sfields = new ArrayList<SortField>();
 
+        final boolean secondary = r.nextBoolean();
+        final boolean luceneSort2 = r.nextBoolean();
+        final boolean sortMissingLast2 = !luceneSort2 && r.nextBoolean();
+        final boolean sortMissingFirst2 = !luceneSort2 && !sortMissingLast2;
+        final boolean reverse2 = r.nextBoolean();
+
         if (r.nextBoolean()) sfields.add( new SortField(null, SortField.SCORE));
         // hit both use-cases of sort-missing-last
-        sfields.add( Sorting.getStringSortField("f", reverse, sortMissingLast, !sortMissingLast) );
-        int sortIdx = sfields.size() - 1;
+        sfields.add( Sorting.getStringSortField("f", reverse, sortMissingLast, sortMissingFirst) );
+        if (secondary) {
+          sfields.add( Sorting.getStringSortField("f2", reverse2, sortMissingLast2, sortMissingFirst2) );
+        }
         if (r.nextBoolean()) sfields.add( new SortField(null, SortField.SCORE));
 
         Sort sort = new Sort(sfields.toArray(new SortField[sfields.size()]));
 
-        // final String nullRep = sortMissingLast ? "zzz" : "";
-        final String nullRep = "zzz";
+        final String nullRep = luceneSort || sortMissingFirst && !reverse || sortMissingLast && reverse ? "" : "zzz";
+        final String nullRep2 = luceneSort2 || sortMissingFirst2 && !reverse2 || sortMissingLast2 && reverse2 ? "" : "zzz";
 
         boolean trackScores = r.nextBoolean();
         boolean trackMaxScores = r.nextBoolean();
@@ -164,6 +172,15 @@ public class TestSort extends AbstractSo
             String v2 = o2.val==null ? nullRep : o2.val;
             int cmp = v1.compareTo(v2);
             if (reverse) cmp = -cmp;
+            if (cmp != 0) return cmp;
+
+            if (secondary) {
+               v1 = o1.val2==null ? nullRep2 : o1.val2;
+               v2 = o2.val2==null ? nullRep2 : o2.val2;
+               cmp = v1.compareTo(v2);
+               if (reverse2) cmp = -cmp;
+            }
+
             cmp = cmp==0 ? o1.doc-o2.doc : cmp;
             return cmp;
           }
@@ -174,9 +191,11 @@ public class TestSort extends AbstractSo
         ScoreDoc[] sdocs = topDocs.scoreDocs;
         for (int j=0; j<sdocs.length; j++) {
           int id = sdocs[j].doc;
-          String s = (String)((FieldDoc)sdocs[j]).fields[sortIdx];
           if (id != collectedDocs.get(j).doc) {
-            log.error("Error at pos " + j);
+            log.error("Error at pos " + j
+            + "\n\tsortMissingFirst=" + sortMissingFirst + " sortMissingLast=" + sortMissingLast + " reverse=" + reverse
+            + "\n\tEXPECTED=" + collectedDocs 
+            );
           }
           assertEquals(id, collectedDocs.get(j).doc);
         }