This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 8ad75e6d9c4ad8d5424967d86351ad7190d9d86f
Author: David Smiley <[email protected]>
AuthorDate: Thu Feb 13 12:14:15 2025 -0500

    Fix DockMakerTest maxCardinality (#3171)
    
    and add comments to StringsDSL
    
    (cherry picked from commit 5b24d3bd645dac6791d69e833d56278dcf3a2194)
---
 .../apache/solr/bench/generators/StringsDSL.java   |  4 ++
 .../test/org/apache/solr/bench/DockMakerTest.java  | 50 +++++++---------------
 2 files changed, 19 insertions(+), 35 deletions(-)

diff --git 
a/solr/benchmark/src/java/org/apache/solr/bench/generators/StringsDSL.java 
b/solr/benchmark/src/java/org/apache/solr/bench/generators/StringsDSL.java
index df296727aa0..6449308f78f 100644
--- a/solr/benchmark/src/java/org/apache/solr/bench/generators/StringsDSL.java
+++ b/solr/benchmark/src/java/org/apache/solr/bench/generators/StringsDSL.java
@@ -379,6 +379,7 @@ public class StringsDSL {
                 new SolrGen<>() {
                   @Override
                   public String generate(SolrRandomnessSource in) {
+                    // TODO DWS: What does it even mean for the cardinality to 
vary (be generated)?
                     Integer maxCard = maxCardinality.generate(in);
 
                     if (cardinalityStart == null) {
@@ -386,9 +387,12 @@ public class StringsDSL {
                           SolrGenerate.range(0, Integer.MAX_VALUE - maxCard - 
1).generate(in);
                     }
 
+                    // pick from maxCardinality seeds
                     long seed =
                         SolrGenerate.range(cardinalityStart, cardinalityStart 
+ maxCard - 1)
                             .generate(in);
+                    // given the seed, generate a string.
+                    //   Final cardinality could be less!  Small strings have 
limited possibilities.
                     return strings.generate(
                         (RandomnessSource) new SplittableRandomSource(new 
SplittableRandom(seed)));
                   }
diff --git a/solr/benchmark/src/test/org/apache/solr/bench/DockMakerTest.java 
b/solr/benchmark/src/test/org/apache/solr/bench/DockMakerTest.java
index 4f106241db6..7c2ef27d312 100644
--- a/solr/benchmark/src/test/org/apache/solr/bench/DockMakerTest.java
+++ b/solr/benchmark/src/test/org/apache/solr/bench/DockMakerTest.java
@@ -17,13 +17,11 @@
 package org.apache.solr.bench;
 
 import static org.apache.solr.bench.Docs.docs;
-import static org.apache.solr.bench.generators.SourceDSL.booleans;
 import static org.apache.solr.bench.generators.SourceDSL.integers;
 import static org.apache.solr.bench.generators.SourceDSL.strings;
 
 import java.lang.invoke.MethodHandles;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.Set;
 import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.bench.generators.Distribution;
@@ -55,9 +53,10 @@ public class DockMakerTest extends SolrTestCaseJ4 {
 
     Docs docs = docs();
 
-    int cardinality = 2;
+    int maxCardinality = 2;
 
-    docs.field("AlphaCard3", 
strings().alpha().maxCardinality(cardinality).ofLengthBetween(1, 6));
+    docs.field(
+        "AlphaCard3", 
strings().alpha().maxCardinality(maxCardinality).ofLengthBetween(1, 6));
 
     Set<String> values = new HashSet<>();
     for (int i = 0; i < 10; i++) {
@@ -66,18 +65,19 @@ public class DockMakerTest extends SolrTestCaseJ4 {
       values.add(field.getValue().toString());
     }
 
-    assertEquals(values.toString(), cardinality, values.size());
+    // the cardinality we see is <= maxCardinality specified, albeit almost 
always equal to
+    assertTrue(values.toString(), values.size() <= maxCardinality);
   }
 
   @Test
   public void testBasicCardinalityUnicode() throws Exception {
     Docs docs = docs();
-    int cardinality = 4;
+    int maxCardinality = 4;
     docs.field(
         "UnicodeCard3",
         strings()
             .basicMultilingualPlaneAlphabet()
-            .maxCardinality(cardinality)
+            .maxCardinality(maxCardinality)
             .ofLengthBetween(1, 6));
 
     HashSet<Object> values = new HashSet<>();
@@ -88,15 +88,16 @@ public class DockMakerTest extends SolrTestCaseJ4 {
       values.add(field.getValue().toString());
     }
 
-    assertEquals(values.toString(), cardinality, values.size());
+    // the cardinality we see is <= maxCardinality specified, albeit almost 
always equal to
+    assertTrue(values.toString(), values.size() <= maxCardinality);
   }
 
   @Test
   public void testBasicCardinalityInteger() throws Exception {
     Docs docs = docs();
-    int cardinality = 3;
+    int maxCardinality = 3;
 
-    docs.field("IntCard2", integers().allWithMaxCardinality(cardinality));
+    docs.field("IntCard2", integers().allWithMaxCardinality(maxCardinality));
 
     HashSet<Object> values = new HashSet<>();
     for (int i = 0; i < 30; i++) {
@@ -104,7 +105,9 @@ public class DockMakerTest extends SolrTestCaseJ4 {
       SolrInputField field = doc.getField("IntCard2");
       values.add(field.getValue().toString());
     }
-    assertEquals(values.toString(), cardinality, values.size());
+
+    // the cardinality we see is <= maxCardinality specified, albeit almost 
always equal to
+    assertTrue(values.toString(), values.size() <= maxCardinality);
 
     if (log.isInfoEnabled()) {
       log.info(values.toString());
@@ -144,9 +147,7 @@ public class DockMakerTest extends SolrTestCaseJ4 {
     }
 
     Integer lastVal = null;
-    Iterator<Integer> it = values.iterator();
-    while (it.hasNext()) {
-      Integer val = it.next();
+    for (Integer val : values) {
       if (lastVal != null) {
         assertTrue(val > lastVal);
       }
@@ -200,25 +201,4 @@ public class DockMakerTest extends SolrTestCaseJ4 {
 
     assertNotNull(field.getValue().toString());
   }
-
-  @Test
-  public void testGenDoc() {
-    Docs docMaker =
-        docs()
-            .field("id", integers().incrementing())
-            .field(
-                "facet_s",
-                strings()
-                    .basicMultilingualPlaneAlphabet()
-                    .maxCardinality(integers().between(5, 16))
-                    .ofLengthBetween(1, 128))
-            .field(booleans().all());
-
-    for (int i = 0; i < 10; i++) {
-      SolrInputDocument doc = docMaker.inputDocument();
-      if (log.isInfoEnabled()) {
-        log.info("doc:\n{}", doc);
-      }
-    }
-  }
 }

Reply via email to