【问题标题】:How do I fix my test function for swap method in rust?如何修复 rust 中交换方法的测试功能?
【发布时间】:2022-10-09 17:14:54
【问题描述】:

所以,我写了一个程序来交换 rust 中的两个数字,我把下面的代码和它的测试函数一起粘贴了。当我运行 cargo run 时,我的 swap() 和 main() 方法可以正常工作并正确交换程序中的值,但是当我运行 cargo test 时它不会编译,而且我不确定如何更正我的测试函数。谁能告诉我我的函数中缺少什么,或者我是否完全写错了?谢谢!


    fn swap(a: &mut u32, b: &mut u32) {
    let temp: u32 = *a;         // stores value of a in temp
    *a = *b;                    // assigns the value of b to a
    *b = temp;                  // assigns the value of temp (which is a) to b
                                // values are now swapped
}

fn main() {
    let mut a = 26;             // assigns value 26.0 to a
    let mut b = 10;             // assigns value 10.0 to b
    
    println!{"Before swap: "};
    println!("{}, {}", a, b);   // prints orginal values for a and b

    swap(&mut a, &mut b);       // calls swap funciton

    println!("After swap: ");
    println!("{}, {}", a, b);   // prints the swapped values for a and b (expecting "10, 26")
}

#[test]
fn test_swap() {
    assert!(swap(&mut 26, &mut 10) == 10u32, 26u32);
}

【问题讨论】:

  • swap 不返回任何内容。你不能将它的返回值与任何东西(但(),我猜)进行比较,因为没有。

标签: testing rust cargo


【解决方案1】:

您的 swap 函数需要几个可变引用,在那里工作并且不返回任何内容。

因此,当您制作 assert!(swap(...) == 10u32, 26u32) 您制作 assert!( () == 10u32, 26u32) 时,有 2 个错误。

第一部分您尝试将()() 的不同之处进行比较。

还有两个,但更根本的是,你写了一个糟糕的表达式,10u32、26u32 是两个不同的成员,就像你在写 if true == true, false if 10 == 26, 10 这样的东西。我的意思是这个表格if left == right, a_third_member_senseless

可能您的测试应该如下所示:

#[test]
fn test_swap() {
    let mut a = 10u32;
    let mut b = 26u32;

    swap(&mut a, &mut b);

    assert_eq!(a, 26u32);
    assert_eq!(b, 10u32);
}

您使用函数更改值,然后验证值的最终状态。

【讨论】:

  • 你可能打算写assert_eq!
猜你喜欢
  • 2020-03-13
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 2019-09-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多