Step::replace_one should put a one, not a zero (Issue #41492)
Turns out all six of these impls are incorrect.
This commit is contained in:
parent
252d3da8a6
commit
f8c6436173
@ -86,12 +86,12 @@ macro_rules! step_impl_unsigned {
|
||||
|
||||
#[inline]
|
||||
fn replace_one(&mut self) -> Self {
|
||||
mem::replace(self, 0)
|
||||
mem::replace(self, 1)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn replace_zero(&mut self) -> Self {
|
||||
mem::replace(self, 1)
|
||||
mem::replace(self, 0)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
@ -157,12 +157,12 @@ macro_rules! step_impl_signed {
|
||||
|
||||
#[inline]
|
||||
fn replace_one(&mut self) -> Self {
|
||||
mem::replace(self, 0)
|
||||
mem::replace(self, 1)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn replace_zero(&mut self) -> Self {
|
||||
mem::replace(self, 1)
|
||||
mem::replace(self, 0)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
@ -206,12 +206,12 @@ macro_rules! step_impl_no_between {
|
||||
|
||||
#[inline]
|
||||
fn replace_one(&mut self) -> Self {
|
||||
mem::replace(self, 0)
|
||||
mem::replace(self, 1)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
fn replace_zero(&mut self) -> Self {
|
||||
mem::replace(self, 1)
|
||||
mem::replace(self, 0)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
|
@ -1082,3 +1082,41 @@ fn test_chain_fold() {
|
||||
assert_eq!(&[2, 3, 1, 2, 0], &result[..]);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_step_replace_unsigned() {
|
||||
let mut x = 4u32;
|
||||
let y = x.replace_zero();
|
||||
assert_eq!(x, 0);
|
||||
assert_eq!(y, 4);
|
||||
|
||||
x = 5;
|
||||
let y = x.replace_one();
|
||||
assert_eq!(x, 1);
|
||||
assert_eq!(y, 5);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_step_replace_signed() {
|
||||
let mut x = 4i32;
|
||||
let y = x.replace_zero();
|
||||
assert_eq!(x, 0);
|
||||
assert_eq!(y, 4);
|
||||
|
||||
x = 5;
|
||||
let y = x.replace_one();
|
||||
assert_eq!(x, 1);
|
||||
assert_eq!(y, 5);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_step_replace_no_between() {
|
||||
let mut x = 4u128;
|
||||
let y = x.replace_zero();
|
||||
assert_eq!(x, 0);
|
||||
assert_eq!(y, 4);
|
||||
|
||||
x = 5;
|
||||
let y = x.replace_one();
|
||||
assert_eq!(x, 1);
|
||||
assert_eq!(y, 5);
|
||||
}
|
@ -20,6 +20,7 @@
|
||||
#![feature(fixed_size_array)]
|
||||
#![feature(flt2dec)]
|
||||
#![feature(fmt_internals)]
|
||||
#![feature(i128_type)]
|
||||
#![feature(iter_rfind)]
|
||||
#![feature(libc)]
|
||||
#![feature(nonzero)]
|
||||
@ -30,6 +31,7 @@
|
||||
#![feature(sort_internals)]
|
||||
#![feature(sort_unstable)]
|
||||
#![feature(step_by)]
|
||||
#![feature(step_trait)]
|
||||
#![feature(test)]
|
||||
#![feature(try_from)]
|
||||
#![feature(unicode)]
|
||||
|
Loading…
Reference in New Issue
Block a user