And when you refactor _scorer.Score() to be in a different line it passes 100% of the time on all platforms? that doesn't sound right.
Also, not in front of VS now, but AreEquals should already be doing this epsilon thing no? -- Itamar Syn-Hershko http://code972.com | @synhershko <https://twitter.com/synhershko> Freelance Developer & Consultant Lucene.NET committer and PMC member On Sat, May 30, 2015 at 10:46 PM, Laimonas Simutis <[email protected]> wrote: > Itamar, > > These float comparison are killing me :) I am pretty sure all the remaining > failures in core tests are related to float issues. > > I am trying to use epsilon here by changing > > AreEqual(skipToScore, scorer_.Score(), MaxDiff) to > IsTrue(Math.Abs(skipToScore - scorer_.Score()) < MaxDiff). > > It is similar to the link you provided except I am not > handling infinite and values close to 0, which are not expected and do not > occur in this test. > > I can get this test to pass by taking out scorer_.Score() calculation and > calculating it separately and then comparing, like this: > > var secondScore = scorer_.Score(); > IsTrue(Math.Abs(skipToScore - secondScore) < MaxDiff). > > In this case, the scorer_.Score() is doing a bunch of float adds / > multiplies ( > > https://github.com/apache/lucenenet/blob/master/src/Lucene.Net.Core/Search/DisjunctionMaxScorer.cs#L58 > ) > so I can see where rounding error could come in but still cannot explain > how it consistently fails on some env and not the others. Also have no idea > how to proceed with this issue besides changing the order of calculations, > like I did with the above to get it to pass. Just don't feel confident that > there is no bigger issue somewhere else. > > > Laimis > > > > On Sat, May 30, 2015 at 2:56 PM, Itamar Syn-Hershko <[email protected]> > wrote: > > > Float comparison is not as trivial - you should probably use epsilon -- > see > > http://stackoverflow.com/a/3875619/135701 for example > > > > -- > > > > Itamar Syn-Hershko > > http://code972.com | @synhershko <https://twitter.com/synhershko> > > Freelance Developer & Consultant > > Lucene.NET committer and PMC member > > > > On Sat, May 30, 2015 at 9:50 PM, <[email protected]> wrote: > > > > > Repository: lucenenet > > > Updated Branches: > > > refs/heads/failingtests bdf2899a0 -> 6a81f8606 > > > > > > > > > use proper float comparison > > > > > > > > > Project: http://git-wip-us.apache.org/repos/asf/lucenenet/repo > > > Commit: > http://git-wip-us.apache.org/repos/asf/lucenenet/commit/6a81f860 > > > Tree: http://git-wip-us.apache.org/repos/asf/lucenenet/tree/6a81f860 > > > Diff: http://git-wip-us.apache.org/repos/asf/lucenenet/diff/6a81f860 > > > > > > Branch: refs/heads/failingtests > > > Commit: 6a81f860671ab98fb7cd595af317b3d8521acc21 > > > Parents: bdf2899 > > > Author: Laimonas Simutis <[email protected]> > > > Authored: Sat May 30 14:49:35 2015 -0400 > > > Committer: Laimonas Simutis <[email protected]> > > > Committed: Sat May 30 14:49:35 2015 -0400 > > > > > > ---------------------------------------------------------------------- > > > src/Lucene.Net.TestFramework/Search/QueryUtils.cs | 4 ++-- > > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > ---------------------------------------------------------------------- > > > > > > > > > > > > > > > http://git-wip-us.apache.org/repos/asf/lucenenet/blob/6a81f860/src/Lucene.Net.TestFramework/Search/QueryUtils.cs > > > ---------------------------------------------------------------------- > > > diff --git a/src/Lucene.Net.TestFramework/Search/QueryUtils.cs > > > b/src/Lucene.Net.TestFramework/Search/QueryUtils.cs > > > index 1156eee..6615d4c 100644 > > > --- a/src/Lucene.Net.TestFramework/Search/QueryUtils.cs > > > +++ b/src/Lucene.Net.TestFramework/Search/QueryUtils.cs > > > @@ -478,8 +478,8 @@ namespace Lucene.Net.Search > > > Assert.IsTrue(scorer_.Advance(i) != > > > DocIdSetIterator.NO_MORE_DOCS, "query collected " + doc + " but > skipTo(" > > + > > > i + ") says no more docs!"); > > > Assert.AreEqual(doc, scorer_.DocID(), "query > > > collected " + doc + " but skipTo(" + i + ") got to " + > scorer_.DocID()); > > > float skipToScore = scorer_.Score(); > > > - Assert.AreEqual(skipToScore, scorer_.Score(), > > > MaxDiff, "unstable skipTo(" + i + ") score!"); > > > - Assert.AreEqual(score, skipToScore, MaxDiff, > > > "query assigned doc " + doc + " a score of <" + score + "> but skipTo(" > > + i > > > + ") has <" + skipToScore + ">!"); > > > + Assert.IsTrue(Math.Abs(skipToScore - > > > scorer_.Score()) < MaxDiff, "unstable skipTo(" + i + ") score!"); > > > + Assert.AreEqual(Math.Abs(score - skipToScore) > < > > > MaxDiff, "query assigned doc " + doc + " a score of <" + score + "> but > > > skipTo(" + i + ") has <" + skipToScore + ">!"); > > > > > > // Hurry things along if they are going slow > (eg > > > // if you got SimpleText codec this will kick > > in): > > > > > > > > >
