#leetcode #utility #proc-macro #api-bindings #cargo-toml

lcrt

一个简单的实用库,用于帮助在Rust中编写LeetCode解决方案。

3个版本

0.1.2 2023年2月13日
0.1.1 2023年2月10日
0.1.0 2023年2月8日

#356 in 过程宏

Apache-2.0

21KB
353

LCRT (LeetCode运行时)

Crates.io License: Apache 2.0

LCRT是一个非常简单的实用库,用于帮助在Rust中编写LeetCode解决方案。它利用Rust的过程宏来减少我们需要编写的样板代码。

如何使用

要使用此库,请在Cargo.toml文件中的依赖项中添加以下内容:

[dependencies]
lcrt-macro = "0.1"
lcrt = "0.1"

[dev-dependencies]
lcrt = { version = "0.1", features = ["testing"] }

注意: "testing" 功能启用测试支持的宏和实用函数。这些函数放置在此功能之后,以免干扰问题解决过程。

然后在您的本地库中,在lib.rs文件中,请添加以下宏使用:

#[macro_use]
extern crate lcrt_macro;

然后我们可以开始编写如下代码:

#[solution]
impl Solution {
    pub fn add_two_numbers(
        _l1: Option<Box<ListNode>>,
        _l2: Option<Box<ListNode>>,
    ) -> Option<Box<ListNode>> {
        None
    }
}

底层,它将代码交替如下:

mod p2_add_two_numbers {
    use lcrt::*;
    pub struct Solution {}
    impl Solution {
        pub fn add_two_numbers(
            l1: Option<Box<ListNode>>,
            l2: Option<Box<ListNode>>,
        ) -> Option<Box<ListNode>> {
        }
    }
}

单元测试支持

LCRT提供以下实用函数,用于编写本地测试。

  • lc_list!(1, 2, 3, ...):创建一个链表,类型为Option<Box<LinkedList>>。如果没有提供参数,它返回None。
  • lc_list_assert_eq(list, (1, 2, 3, ...)):断言两个链表相等。如果第二个参数是(),它将断言与None相等。
  • lc_tree!("1,null,2,3"):创建一个类型为Option<Rc<RefCell<TreeNode>>>的树。例如,这创建了一个树,其结构为1->(null, 2->(3, null))
  • lc_tree_assert_eq(t, "1,null,2,3"):断言两个树相等。如果第二个参数为"",则断言与None相等。
  • lc_tree_assert_list_eq(t, ("1,2", "1,null,2,3")):断言两个树列表相等,忽略顺序。例如,这检查的树列表为:1->(2), 1->(null, 2->(3, null))
  • lc_vecvec![[9], [3, 15], [20], [7]]:创建一个嵌套向量,其类型为Vec<Vec<i32>>

以下是一个示例,用于编写列表的测试

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_2() {
        lc_list_assert_eq!(Solution::add_two_numbers(lc_list!(), lc_list!()), ());
        lc_list_assert_eq!(Solution::add_two_numbers(lc_list!(1), lc_list!()), (1));
        lc_list_assert_eq!(Solution::add_two_numbers(lc_list!(1), lc_list!(1)), (2));

        lc_list_assert_eq!(
            Solution::add_two_numbers(lc_list!(2, 4, 3), lc_list!(5, 6, 4)),
            (7, 0, 8)
        );

        lc_list_assert_eq!(
            Solution::add_two_numbers(lc_list!(9, 9, 9, 9, 9, 9, 9), lc_list!(9, 9, 9, 9)),
            (8, 9, 9, 9, 0, 0, 0, 1)
        );
    }
}

许可证

Apache-2.0: https://www.apache.org/licenses/LICENSE-2.0

依赖项

~58KB