[Bioperl-l] evalues/floating point tests
Mark A. Jensen
maj at fortinbras.us
Mon Jan 19 00:22:26 UTC 2009
(I promise I won't prolong this any further than...)
Maybe is_float suffers from the same sematic issue as is_asfloat raised by
Chris. Note that in Sendu's example, deeply is an adverb, so it suggests doing
something, and float as a noun/adjective (in truth) suggests being something.
So, what about
float_is()
which suggests that this version of is() is described by float (float_is'ing
rather than string_is'ing)
(I'm perfectly content with is_float, though)
----- Original Message -----
From: "Chris Fields" <cjfields at illinois.edu>
To: "Sendu Bala" <bix at sendu.me.uk>
Cc: "BioPerl List" <bioperl-l at lists.open-bio.org>; "Mark A. Jensen"
<maj at fortinbras.us>
Sent: Sunday, January 18, 2009 5:51 PM
Subject: Re: [Bioperl-l] evalues/floating point tests
> On Jan 18, 2009, at 6:01 AM, Sendu Bala wrote:
>
>> Chris Fields wrote:
>>> is_float_eq()?
>>
>> The 'is' obviates the need for the 'eq'. On the other hand there's precedent
>> for this, since is() actually calls is_eq().
>
> Yes, that's partly why I suggested it. That's most descriptive of what we
> are doing with this method, 'is float $ev1 eq float $ev2'.
>
>>> On Jan 17, 2009, at 8:44 PM, Mark A. Jensen wrote:
>>>> how bout is_asfloat() ?
>>
>> This is better. However...
>
> Sorry, no disrespect to you or Mark but I don't agree. 'Is as float' doesn't
> come across to me as an equality test, it almost sounds like a role/interface
> check.
>
>>> I thought the same thing at first, but (at least to me) is_float
>>> sounds more like a boolean test on whether the scalar value passed is
>>> a float rather than a comparison checking whether two floats are
>>> equal.
>>
>> I understand that, but the naming convention is already like that.
>> is_deeply() doesn't test if both values are 'deep', it tests if they are
>> 'is' (are equal) in a deep way. is_float() would test if they are 'is' (are
>> equal) in a float way. Yeah, grammatically it is all a mess, but to me this
>> seems the most consistent.
>
> I see what you're saying in this case. We can go back to the simpler
> is_float() if everyone agrees. Just want to have something decided so we can
> move on.
>
>> The alternative, which may at the same time may be safer (the test writer
>> doesn't need to remember to use a special function) and more dangerous (the
>> regex matches something it shouldn't?), is to simply override is():
>>
>> my $e_num = '^\de-\d+$';
>> sub is {
>> my ($val1, $val2, @args) = @_;
>>
>> if ($val1 && $val2 && $val1 =~ /$e_num/ && $val2 =~ /$e_num/) {
>> $val1 = sprintf("%g", $val1);
>> $val2 = sprintf("%g", $val2);
>> }
>>
>> return SUPER::is($val1, $val2, @args);
>> }
>>
>> Or something like that. I didn't try it.
>
> I understand the sentiment about extending is() but I'm not convinced it
> makes sense for a specific case such as this. I agree with the second
> sentiment; extending is() may be more dangerous and prone to subtle issues,
> such as the regex above not matching '1.23e-12'. Yes, I know, you didn't test
> it. ;>
>
> And, if we ever change our minds it would be very easy to just delegate to
> is_float().
>
> $e_num = qr/something that matches just floats/;
> sub is {
> my ($val1, $val2, @args) = @_;
>
> if ($val1 && $val2 && $val1 =~ /$e_num/ && $val2 =~ /$e_num/) {
> return is_float($val1, $val2, @args);
> } else {
> return SUPER::is($val1, $val2, @args);
> }
> }
>
> chris
>
> _______________________________________________
> Bioperl-l mailing list
> Bioperl-l at lists.open-bio.org
> http://lists.open-bio.org/mailman/listinfo/bioperl-l
>
>
More information about the Bioperl-l
mailing list