Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

TestTaxonomyFacetValueSource.testRandom fails #13191

Open
benwtrent opened this issue Mar 18, 2024 · 2 comments · May be fixed by #13198 or #13287
Open

TestTaxonomyFacetValueSource.testRandom fails #13191

benwtrent opened this issue Mar 18, 2024 · 2 comments · May be fixed by #13198 or #13287

Comments

@benwtrent
Copy link
Member

Description

org.apache.lucene.facet.taxonomy.TestTaxonomyFacetValueSource > testRandom FAILED
    java.lang.AssertionError: expected:<10> but was:<9>
        at __randomizedtesting.SeedInfo.seed([66414B5A2A3B48F9:140D6E559B5BFE8A]:0)
        at [email protected]/org.junit.Assert.fail(Assert.java:89)
        at [email protected]/org.junit.Assert.failNotEquals(Assert.java:835)
        at [email protected]/org.junit.Assert.assertEquals(Assert.java:647)
        at [email protected]/org.junit.Assert.assertEquals(Assert.java:633)
        at org.apache.lucene.facet.FacetTestCase.assertFloatValuesEquals(FacetTestCase.java:256)
        at org.apache.lucene.facet.FacetTestCase.assertFloatValuesEquals(FacetTestCase.java:249)
        at org.apache.lucene.facet.taxonomy.TestTaxonomyFacetValueSource.checkResults(TestTaxonomyFacetValueSource.java:734)
        at org.apache.lucene.facet.taxonomy.TestTaxonomyFacetValueSource.testRandom(TestTaxonomyFacetValueSource.java:634)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at [email protected]/com.carrotsearch.randomizedtesting.RandomizedRunner.invoke(RandomizedRunner.java:1758)
        at [email protected]/com.carrotsearch.randomizedtesting.RandomizedRunner$8.evaluate(RandomizedRunner.java:946)
        at [email protected]/com.carrotsearch.randomizedtesting.RandomizedRunner$9.evaluate(RandomizedRunner.java:982)
        at [email protected]/com.carrotsearch.randomizedtesting.RandomizedRunner$10.evaluate(RandomizedRunner.java:996)
        at [email protected]/org.apache.lucene.tests.util.TestRuleSetupTeardownChained$1.evaluate(TestRuleSetupTeardownChained.java:48)
        at [email protected]/org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43)
        at [email protected]/org.apache.lucene.tests.util.TestRuleThreadAndTestName$1.evaluate(TestRuleThreadAndTestName.java:45)
        at [email protected]/org.apache.lucene.tests.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60)
        at [email protected]/org.apache.lucene.tests.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44)
        at [email protected]/org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at [email protected]/com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
        at [email protected]/com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:390)
        at [email protected]/com.carrotsearch.randomizedtesting.ThreadLeakControl.forkTimeoutingTask(ThreadLeakControl.java:843)
        at [email protected]/com.carrotsearch.randomizedtesting.ThreadLeakControl$3.evaluate(ThreadLeakControl.java:490)
        at [email protected]/com.carrotsearch.randomizedtesting.RandomizedRunner.runSingleTest(RandomizedRunner.java:955)
        at [email protected]/com.carrotsearch.randomizedtesting.RandomizedRunner$5.evaluate(RandomizedRunner.java:840)
        at [email protected]/com.carrotsearch.randomizedtesting.RandomizedRunner$6.evaluate(RandomizedRunner.java:891)
        at [email protected]/com.carrotsearch.randomizedtesting.RandomizedRunner$7.evaluate(RandomizedRunner.java:902)
        at [email protected]/org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43)
        at [email protected]/com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
        at [email protected]/org.apache.lucene.tests.util.TestRuleStoreClassName$1.evaluate(TestRuleStoreClassName.java:38)
        at [email protected]/com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40)
        at [email protected]/com.carrotsearch.randomizedtesting.rules.NoShadowingOrOverridesOnMethodsRule$1.evaluate(NoShadowingOrOverridesOnMethodsRule.java:40)
        at [email protected]/com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
        at [email protected]/com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
        at [email protected]/org.apache.lucene.tests.util.TestRuleAssertionsRequired$1.evaluate(TestRuleAssertionsRequired.java:53)
        at [email protected]/org.apache.lucene.tests.util.AbstractBeforeAfterRule$1.evaluate(AbstractBeforeAfterRule.java:43)
        at [email protected]/org.apache.lucene.tests.util.TestRuleMarkFailure$1.evaluate(TestRuleMarkFailure.java:44)
        at [email protected]/org.apache.lucene.tests.util.TestRuleIgnoreAfterMaxFailures$1.evaluate(TestRuleIgnoreAfterMaxFailures.java:60)
        at [email protected]/org.apache.lucene.tests.util.TestRuleIgnoreTestSuites$1.evaluate(TestRuleIgnoreTestSuites.java:47)
        at [email protected]/org.junit.rules.RunRules.evaluate(RunRules.java:20)
        at [email protected]/com.carrotsearch.randomizedtesting.rules.StatementAdapter.evaluate(StatementAdapter.java:36)
        at [email protected]/com.carrotsearch.randomizedtesting.ThreadLeakControl$StatementRunner.run(ThreadLeakControl.java:390)
        at [email protected]/com.carrotsearch.randomizedtesting.ThreadLeakControl.lambda$forkTimeoutingTask$0(ThreadLeakControl.java:850)
        at java.base/java.lang.Thread.run(Thread.java:1583)

Gradle command to reproduce

./gradlew test --tests TestTaxonomyFacetValueSource.testRandom -Dtests.seed=66414B5A2A3B48F9 -Dtests.locale=lo -Dtests.timezone=Africa/Juba -Dtests.asserts=true -Dtests.file.encoding=UTF-8
@benwtrent
Copy link
Member Author

git-bisect says its this commit: b5795db

@iamsanjay
Copy link
Contributor

FloatTaxonomyFacets.getTopChildrenForPath methods counts the children and apply the aggregate function for all the child nodes, only IF the child value is greater than 0.

while (ord != TaxonomyReader.INVALID_ORDINAL) {
float value = values[ord];
if (value > 0) {
aggregatedValue = aggregationFunction.aggregate(aggregatedValue, value);
childCount++;
if (value > bottomValue || (value == bottomValue && ord < bottomOrd)) {
if (reuse == null) {
reuse = new TopOrdAndFloatQueue.OrdAndValue();
}
reuse.ord = ord;
reuse.value = value;

On the test side, we have method which would prepare the expected result of aggregation, however, this time we don't filter child.

List<FacetResult> expected = new ArrayList<>();
for (int i = 0; i < numDims; i++) {
List<LabelAndValue> labelValues = new ArrayList<>();
float aggregatedValue = 0;
for (Map.Entry<String, Float> ent : expectedValues[i].entrySet()) {
labelValues.add(new LabelAndValue(ent.getKey(), ent.getValue()));
aggregatedValue = aggregationFunction.aggregate(aggregatedValue, ent.getValue());
}
sortLabelValues(labelValues);
if (aggregatedValue > 0) {

Therefore, there is inconsistency between the number of child generated actual vs expected.

Below can be a possible fix at the test level, assuming that the functionality of FloatTaxonomyFacets.getTopChildrenForPath behaves as intended.

List<FacetResult> expected = new ArrayList<>();
    for (int i = 0; i < numDims; i++) {
      List<LabelAndValue> labelValues = new ArrayList<>();
      float aggregatedValue = 0;
      for (Map.Entry<String, Float> ent : expectedValues[i].entrySet()) {
        if(ent.getValue() > 0) {
          labelValues.add(new LabelAndValue(ent.getKey(), ent.getValue()));
          aggregatedValue = aggregationFunction.aggregate(aggregatedValue, ent.getValue());
        }
      }

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
2 participants