lucenenet-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Laimonas Simutis <lai...@gmail.com>
Subject Re: lucenenet git commit: use proper float comparison
Date Sat, 30 May 2015 19:46:37 GMT
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 <itamar@code972.com>
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, <laimis@apache.org> 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 <laimis@gmail.com>
> > Authored: Sat May 30 14:49:35 2015 -0400
> > Committer: Laimonas Simutis <laimis@gmail.com>
> > 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):
> >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message