forked from Imagelibrary/littlefs
Changed RFrac equality in scripts
Now, fractions are considered equal if they have the same ratio: - 6/6 == 12/12 => True - 3/6 == 3/12 => False - 1/6 == 2/12 => True It's interesting to note this implementation is actually more numerically stable than float comparison, though that wasn't really the goal. The main reason for this is to allow other fields to take over when sorting multi-field fractional data: cov (lines + branches), testmarks (passed + time), etc. Before, sorting would usually stop after mismatched fraction fields, which wasn't all that useful.
This commit is contained in:
@@ -154,10 +154,18 @@ class RFrac(co.namedtuple('RFrac', 'a,b')):
|
||||
def __mul__(self, other):
|
||||
return self.__class__(self.a * other.a, self.b + other.b)
|
||||
|
||||
def __eq__(self, other):
|
||||
self_a, self_b = self if self.b.x else (RInt(1), RInt(1))
|
||||
other_a, other_b = other if other.b.x else (RInt(1), RInt(1))
|
||||
return self_a * other_b == other_a * self_b
|
||||
|
||||
def __ne__(self, other):
|
||||
return not self.__eq__(other)
|
||||
|
||||
def __lt__(self, other):
|
||||
self_t = self.a.x/self.b.x if self.b.x else 1.0
|
||||
other_t = other.a.x/other.b.x if other.b.x else 1.0
|
||||
return (self_t, self.a.x) < (other_t, other.a.x)
|
||||
self_a, self_b = self if self.b.x else (RInt(1), RInt(1))
|
||||
other_a, other_b = other if other.b.x else (RInt(1), RInt(1))
|
||||
return self_a * other_b < other_a * self_b
|
||||
|
||||
def __gt__(self, other):
|
||||
return self.__class__.__lt__(other, self)
|
||||
|
||||
Reference in New Issue
Block a user