mirror of
https://github.com/RustPython/RustPython.git
synced 2026-06-09 22:49:57 +09:00
Merge pull request #422 from HomerMcMillan/range-reversed
Fix range reversed #421
This commit is contained in:
@@ -61,3 +61,4 @@ assert 'foo' not in range(10)
|
||||
# __reversed__
|
||||
assert list(reversed(range(5))) == [4, 3, 2, 1, 0]
|
||||
assert list(reversed(range(5, 0, -1))) == [1, 2, 3, 4, 5]
|
||||
assert list(reversed(range(1,10,5))) == [6, 1]
|
||||
|
||||
@@ -95,14 +95,23 @@ impl RangeType {
|
||||
|
||||
#[inline]
|
||||
pub fn reversed(&self) -> Self {
|
||||
// compute the last element that is actually contained within the range
|
||||
// this is the new start
|
||||
let remainder = ((&self.end - &self.start) % &self.step).abs();
|
||||
let start = if remainder.is_zero() {
|
||||
&self.end - &self.step
|
||||
} else {
|
||||
&self.end - &remainder
|
||||
};
|
||||
|
||||
match self.step.sign() {
|
||||
Sign::Plus => RangeType {
|
||||
start: &self.end - 1,
|
||||
start,
|
||||
end: &self.start - 1,
|
||||
step: -&self.step,
|
||||
},
|
||||
Sign::Minus => RangeType {
|
||||
start: &self.end + 1,
|
||||
start,
|
||||
end: &self.start + 1,
|
||||
step: -&self.step,
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user