3个版本
0.1.2 | 2023年2月13日 |
---|---|
0.1.1 | 2023年2月10日 |
0.1.0 | 2023年2月8日 |
#356 in 过程宏
21KB
353 行
LCRT (LeetCode运行时)
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