I ran this code in test
pub fn squared(numbers: &mut [i32]) -> Vec<i32> {
numbers.iter().map(|x| x * x).collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn empty() {
let mut s = vec![];
squared(&mut s);
assert_eq!(s, vec![]);
}
#[test]
fn one() {
let mut s = [2];
squared(&mut s);
assert_eq!(s, [4]);
}
#[test]
fn multiple() {
let mut s = vec![2, 4];
squared(&mut s);
assert_eq!(s, vec![4, 16]);
}
}
And got an assert_eq
failure, saying this:
thread 'tests::multiple' panicked at src/lib.rs:27:9:
assertion `left == right` failed
left: [2, 4]
right: [4, 16]
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
---- tests::one stdout ----
thread 'tests::one' panicked at src/lib.rs:20:9:
assertion `left == right` failed
left: [2]
right: [4]
failures:
tests::multiple
tests::one
But when I ran this (quite similar) code in dev
:
// same function!
pub fn squared(numbers: &mut [i32]) -> Vec<i32> {
numbers.iter().map(|x| x * x).collect()
}
fn main() {
println!("{:?}", squared(&mut [2]));
println!("{:?}", squared(&mut [2, 4]));
}
it gives this:
[4]
[4, 16]
Why is there different behavior?