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

Fuzzing 0 ^ -1 is sometimes +Infinity and sometimes -Infinity #215

Open
nunntom opened this issue Apr 26, 2023 · 2 comments
Open

Fuzzing 0 ^ -1 is sometimes +Infinity and sometimes -Infinity #215

nunntom opened this issue Apr 26, 2023 · 2 comments

Comments

@nunntom
Copy link

nunntom commented Apr 26, 2023

I've recently upgraded to elm-test 2 for one of my packages which passed all tests in the old version. The new fuzzers have thrown some interesting things into the mix.

A very contrived reproduction of a real problem I ran into:

SSCCE:

infinityWeirdnessTest : Test
infinityWeirdnessTest =
    Test.describe
        "Fuzzing 0 ^ -1 is sometimes +Infinity and sometimes -Infinity"
        [ Test.fuzz (Fuzz.pair (Fuzz.floatRange -1 1) (Fuzz.floatRange -1 1))
            "This test will fail Infinity /= -Infinity"
          <|
            \( f1, f2 ) ->
                if f1 == 0 && f2 == -1 then
                    Expect.within (Expect.Absolute 0) (f1 ^ f2) (0 ^ -1)

                else
                    Expect.within (Expect.Absolute 0) (f1 ^ f2) (f1 ^ f2)
        , Test.fuzz (Fuzz.pair (Fuzz.floatRange -1 1) (Fuzz.floatRange -1 1))
            "This test will fail -Infinity /= Infinity"
          <|
            \( f1, f2 ) ->
                if f1 == 0 && f2 == -1 then
                    Expect.within (Expect.Absolute 0) (f1 ^ f2) (-1 / 0)

                else
                    Expect.within (Expect.Absolute 0) (f1 ^ f2) (f1 ^ f2)
        ]

npx elm-test --fuzz 100 --seed 150514400077418

Output:

Compiling > Starting tests

elm-test 0.19.1-revision9
-------------------------

Running 2 tests. To reproduce these results, run: elm-test --fuzz 100 --seed 150514400077418

↓ Power
↓ Fuzzing 0 ^ -1 is sometimes +Infinity and sometimes -Infinity
✗ This test will fail Infinity /= -Infinity

Given (0,-1)

    Infinity
    ╷
    │ Expect.within Absolute 0
    ╵
    -Infinity


↓ Power
↓ Fuzzing 0 ^ -1 is sometimes +Infinity and sometimes -Infinity
✗ This test will fail -Infinity /= Infinity

Given (0,-1)

    -Infinity
    ╷
    │ Expect.within Absolute 0
    ╵
    Infinity



TEST RUN FAILED

Duration: 166 ms
Passed:   0
Failed:   2

Notice both failures are given (0, -1), but in the second one the -Infinity has switched places.

Any ideas what's going on?

@avh4
Copy link
Collaborator

avh4 commented Apr 26, 2023 via email

@nunntom
Copy link
Author

nunntom commented Apr 27, 2023

Interesting. Yes that does appear to be what's happening.

Seems that Fuzz.niceFloat and Fuzz.float never produce -0, but Fuzz.floatRange does.

Maybe it would be good to check for -0 and specifically print "-0" for the error?

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

No branches or pull requests

2 participants