Skip to content

Commit 7067002

Browse files
authored
Rollup merge of rust-lang#41493 - scottmcm:fix-step-replace, r=sfackler
Step::replace_one should put a one, not a zero (Issue rust-lang#41492) Turns out all six of the replace_* impls were backwards.
2 parents 64eebc9 + f8c6436 commit 7067002

File tree

3 files changed

+46
-6
lines changed

3 files changed

+46
-6
lines changed

src/libcore/iter/range.rs

+6-6
Original file line numberDiff line numberDiff line change
@@ -86,12 +86,12 @@ macro_rules! step_impl_unsigned {
8686

8787
#[inline]
8888
fn replace_one(&mut self) -> Self {
89-
mem::replace(self, 0)
89+
mem::replace(self, 1)
9090
}
9191

9292
#[inline]
9393
fn replace_zero(&mut self) -> Self {
94-
mem::replace(self, 1)
94+
mem::replace(self, 0)
9595
}
9696

9797
#[inline]
@@ -157,12 +157,12 @@ macro_rules! step_impl_signed {
157157

158158
#[inline]
159159
fn replace_one(&mut self) -> Self {
160-
mem::replace(self, 0)
160+
mem::replace(self, 1)
161161
}
162162

163163
#[inline]
164164
fn replace_zero(&mut self) -> Self {
165-
mem::replace(self, 1)
165+
mem::replace(self, 0)
166166
}
167167

168168
#[inline]
@@ -206,12 +206,12 @@ macro_rules! step_impl_no_between {
206206

207207
#[inline]
208208
fn replace_one(&mut self) -> Self {
209-
mem::replace(self, 0)
209+
mem::replace(self, 1)
210210
}
211211

212212
#[inline]
213213
fn replace_zero(&mut self) -> Self {
214-
mem::replace(self, 1)
214+
mem::replace(self, 0)
215215
}
216216

217217
#[inline]

src/libcore/tests/iter.rs

+38
Original file line numberDiff line numberDiff line change
@@ -1082,3 +1082,41 @@ fn test_chain_fold() {
10821082
assert_eq!(&[2, 3, 1, 2, 0], &result[..]);
10831083
}
10841084

1085+
#[test]
1086+
fn test_step_replace_unsigned() {
1087+
let mut x = 4u32;
1088+
let y = x.replace_zero();
1089+
assert_eq!(x, 0);
1090+
assert_eq!(y, 4);
1091+
1092+
x = 5;
1093+
let y = x.replace_one();
1094+
assert_eq!(x, 1);
1095+
assert_eq!(y, 5);
1096+
}
1097+
1098+
#[test]
1099+
fn test_step_replace_signed() {
1100+
let mut x = 4i32;
1101+
let y = x.replace_zero();
1102+
assert_eq!(x, 0);
1103+
assert_eq!(y, 4);
1104+
1105+
x = 5;
1106+
let y = x.replace_one();
1107+
assert_eq!(x, 1);
1108+
assert_eq!(y, 5);
1109+
}
1110+
1111+
#[test]
1112+
fn test_step_replace_no_between() {
1113+
let mut x = 4u128;
1114+
let y = x.replace_zero();
1115+
assert_eq!(x, 0);
1116+
assert_eq!(y, 4);
1117+
1118+
x = 5;
1119+
let y = x.replace_one();
1120+
assert_eq!(x, 1);
1121+
assert_eq!(y, 5);
1122+
}

src/libcore/tests/lib.rs

+2
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#![feature(fixed_size_array)]
2121
#![feature(flt2dec)]
2222
#![feature(fmt_internals)]
23+
#![feature(i128_type)]
2324
#![feature(iter_rfind)]
2425
#![feature(libc)]
2526
#![feature(nonzero)]
@@ -30,6 +31,7 @@
3031
#![feature(sort_internals)]
3132
#![feature(sort_unstable)]
3233
#![feature(step_by)]
34+
#![feature(step_trait)]
3335
#![feature(test)]
3436
#![feature(try_from)]
3537
#![feature(unicode)]

0 commit comments

Comments
 (0)