beberlei / assert

Thin assertion library for use in libraries and business-model
Other
2.41k stars 188 forks source link

issues with NAN #298

Open Levivb opened 4 years ago

Levivb commented 4 years ago

Hey,

Thanks for this handy package.

PHP has some weird constructs regarding NAN Note this repl output:

>>> Assert::that(NAN)->integer() // expected behaviour
Assert/InvalidArgumentException with message 'Value "NAN" is not an integer.'
>>> Assert::that(NAN)->between(1,3) // expected InvalidArgumentException. Returns chain
=> Assert\AssertionChain {#4203}
>>> NAN > 0
=> false
>>> NAN > -999
=> false
>>> NAN < 999
=> false
>>> NAN < -999
=> false
>>> is_float(NAN)
=> true
>>> is_numeric(NAN)
=> true
>>> is_integer(NAN)
=> false
>>> is_integer(INF)
=> false
>>> is_float(INF)
=> true

We're dealing with code like this:

public function __construct(float $longitude, float $latitude, string $city)
{
        Assert::that($longitude)->between(-180, 180);

Even php itself issues no Exception when passing NAN into this constructor with float typehint. Would it be feasible to add a isNotNan check and/or update existing assertions to take this (inconsistency?) into account?

githoober commented 4 years ago

This library seems abandoned.

Levivb commented 4 years ago

probably. we're going to step over to https://github.com/webmozart/assert anyway

rquadling commented 4 years ago

It's not abandoned ... just not got much time at the moment.