[mocha-developer] Fwd: [ mocha-Bugs-7834 ] infinte_range.rb makes incorrect assumption about to_f

James Mead jamesmead44 at gmail.com
Fri Feb 2 08:12:04 EST 2007


Thanks for reporting the bug below.

You're absolutely right. Renamed Range#to_s implementation to #mocha_inspect
and checked first and last respond_to?(:to_f) as you suggested.

Sorry for the delay - I wasn't monitoring the rubyforge trackers. I am now!

Should be fixed in revision 99 of trunk.

-- 
James.
http://blog.floehopper.org

---------- Forwarded message ----------
From: noreply at rubyforge.org <noreply at rubyforge.org>
Date: 02-Feb-2007 13:07
Subject: [ mocha-Bugs-7834 ] infinte_range.rb makes incorrect assumption
about to_f
To: noreply at rubyforge.org

Bugs item #7834, was opened at 2007-01-15 04:21
You can respond by visiting:
http://rubyforge.org/tracker/?func=detail&atid=7477&aid=7834&group_id=1917

Category: None
Group: None
>Status: Closed
Resolution: None
Priority: 3
Submitted By: James Moore (banshee)
Assigned to: Nobody (None)
Summary: infinte_range.rb makes incorrect assumption about to_f

Initial Comment:
infinite_range.rb assumes that first and last elements of a Range respond to
to_f:



def to_s

    if first.to_f.infinite? then

      return "at most #{last}"

    elsif last.to_f.infinite? then

      return "at least #{first}"

    else

      __to_s__

    end

  end





This is incorrect - Ranges can include any objects that implement <=> and
succ; converting objects to float values isn't a safe assumption.  (I hit
this with  a range of Date objects)



The simple fix is to see if the object responds to to_f:



  def to_s

    if first.respond_to?(:to_f) && first.to_f.infinite?

      return "at most #{last}"

    elsif last.respond_to?(:to_f) && last.to_f.infinite?

      return "at least #{first}"

    else

      __to_s__

    end

  end



But it's suprising to me that mocha would do something like change the
behavior of to_s for a widely-used class like Range.  My real fix would be
to remove to_s completely.

----------------------------------------------------------------------

>Comment By: James Mead (jamesmead)
Date: 2007-02-02 13:07

Message:
You're absolutely right. Renamed Range#to_s implementation to #mocha_inspect
and checked first and last respond_to?(:to_f) as you suggested.



Sorry for the delay - I wasn't monitoring these trackers.



Should be fixed in revision 99 of trunk.

----------------------------------------------------------------------

You can respond by visiting:
http://rubyforge.org/tracker/?func=detail&atid=7477&aid=7834&group_id=1917


More information about the mocha-developer mailing list