Skip to content

Random.float lacks sanitization of input and emits invalid numbers when bounds are swapped #21

Description

@SiriusStarr

Random.int contains a sanitization step at:

random/src/Random.elm

Lines 81 to 85 in c1c9da4

( lo, hi ) =
if a < b then
( a, b )
else
( b, a )

As such, Random.int 100 -100 produces values in the range [-100, 100]

Random.float contains no such step, and Random.float 100 -100 produces values in the range [100, 300] due to this, which assumes the bounds were passed in the correct order:

random/src/Random.elm

Lines 180 to 182 in c1c9da4

-- Scale it into our range
range =
abs (b - a)
There is no information in the documentation warning of this (otherwise silent) error, and it violates the principle of least surprise.

Either the same sanitization step should be added to Random.float or at the very least a prominent warning should be added to the documentation.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions