Skip to content

Commit 661cd74

Browse files
authored
add nested invokation tests (#9)
1 parent 1354042 commit 661cd74

File tree

3 files changed

+71
-28
lines changed

3 files changed

+71
-28
lines changed

Cargo.toml

+2-3
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ name = "zips"
33
description = "Macros for wrapping up a bunch of Option<T>'s/Result<T, E>'s into a single Option<(T [, T...])>"
44
version = "0.1.5"
55
edition = "2021"
6-
author = "Carter Canedy"
7-
6+
authors = ["Carter Canedy <[email protected]>"]
87
repository = "https://github.com/cartercanedy/zips"
98
license = "MIT"
109

@@ -14,4 +13,4 @@ proc-macro = true
1413
[dependencies]
1514
proc-macro2 = "1.0.86"
1615
quote = "1.0.36"
17-
syn = { version = "2.0.71", features = ["parsing", "derive", "proc-macro", "printing"], default-features = false }
16+
syn = { version = "~2.0.77", features = ["parsing", "derive", "proc-macro", "printing"], default-features = false }

tests/test_option.rs

+38-24
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,6 @@
11
// Copyright (c) 2024 Carter Canedy <[email protected]>
22
use zips::zip;
33

4-
fn return_some() -> Option<()> {
5-
Some(())
6-
}
7-
8-
fn return_none() -> Option<()> {
9-
None
10-
}
11-
124
#[allow(unused_parens)]
135
#[test]
146
pub fn test_zip_1_option() -> () {
@@ -40,15 +32,15 @@ pub fn test_zip_3_options() -> () {
4032

4133
#[test]
4234
pub fn test_zip_1_option_none() -> () {
43-
let opt1 = return_none();
35+
let opt1 = Option::<()>::None;
4436
let zipped = zip!(opt1);
4537
assert_eq!(zipped, None);
4638
}
4739

4840
#[test]
4941
pub fn test_zip_2_options_mixed() -> () {
50-
let opt1 = return_none();
51-
let opt2 = return_some();
42+
let opt1 = Option::<()>::None;
43+
let opt2 = Option::<()>::None;
5244

5345
let zipped = zip!(opt1, opt2);
5446

@@ -57,9 +49,9 @@ pub fn test_zip_2_options_mixed() -> () {
5749

5850
#[test]
5951
pub fn test_zip_3_options_mixed() -> () {
60-
let opt1 = return_none();
61-
let opt2 = return_some();
62-
let opt3 = return_some();
52+
let opt1 = Option::<()>::None;
53+
let opt2 = Some(Option::<()>::None);
54+
let opt3 = Some(());
6355

6456
let zipped = zip!(opt1, opt2, opt3);
6557

@@ -69,23 +61,23 @@ pub fn test_zip_3_options_mixed() -> () {
6961
#[allow(unused_parens)]
7062
#[test]
7163
pub fn test_zip_some_unaliased_arg() -> () {
72-
let zipped = zip!(return_some());
73-
74-
assert_eq!(zipped, Some((())));
64+
let zipped = zip!(Some(()));
65+
66+
assert_eq!(zipped, Some(()));
7567
}
7668

7769
#[test]
7870
pub fn test_zip_none_unaliased_arg() -> () {
79-
let zipped = zip!(return_none());
80-
71+
let zipped = zip!(Option::<()>::None);
72+
8173
assert_eq!(zipped, None);
8274
}
8375

8476
#[test]
8577
pub fn test_zip_mixed_unaliased_args() -> () {
8678
let zipped = zip!(
87-
return_some(),
88-
return_none()
79+
Some(()),
80+
Option::<()>::None
8981
);
9082

9183
assert_eq!(zipped, None);
@@ -95,9 +87,31 @@ pub fn test_zip_mixed_unaliased_args() -> () {
9587
pub fn test_zip_some_unaliased_args() -> () {
9688
let zipped = zip!(
9789
Some(1u32),
98-
Some("2"),
90+
Some(()),
9991
Some(3usize)
10092
);
101-
102-
assert_eq!(zipped, Some((1u32, "2", 3usize)));
93+
94+
assert_eq!(zipped, Some((1u32, (), 3usize)));
95+
}
96+
97+
#[test]
98+
pub fn test_zip_some_nested_invokations() -> () {
99+
let a = Some(1i32);
100+
let b = Some(0usize);
101+
let c = Some(());
102+
103+
let zipped = zip!(zip!(a, b), c);
104+
105+
assert_eq!(zipped, Some(((1i32, 0usize), ())));
106+
}
107+
108+
#[test]
109+
pub fn test_zip_none_nested_invokations() -> () {
110+
let a = Some(1i32);
111+
let b = Some(0usize);
112+
let c = Option::<()>::None;
113+
114+
let zipped = zip!(a, zip!(b, c));
115+
116+
assert_eq!(zipped, None);
103117
}

tests/test_result.rs

+31-1
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ pub fn test_result_1_arg_err() -> () {
6666
pub fn test_result_2_args_mixed() -> () {
6767
let res1: Result<i32, ()> = Ok(1i32);
6868
let res2: Result<&'static str, ()> = Err(());
69-
69+
7070
let zipped = zip_result!(res1, res2);
7171

7272
assert_eq!(zipped, None);
@@ -82,3 +82,33 @@ pub fn test_result_3_args_mixed() -> () {
8282

8383
assert_eq!(zipped, None);
8484
}
85+
86+
#[test]
87+
pub fn test_result_ok_nested_invokations() -> () {
88+
type Res = Result<(), ()>;
89+
let a = Res::Ok(());
90+
let b = Res::Ok(());
91+
let c = Result::<i32, ()>::Ok(1i32);
92+
93+
let zipped = zip_result!(
94+
Result::<_, ()>::Ok(zip_result!(a, b).unwrap()),
95+
c
96+
);
97+
98+
assert_eq!(zipped, Some((((), ()), 1i32)));
99+
}
100+
101+
#[test]
102+
pub fn test_result_err_nested_invokations() -> () {
103+
type Res = Result<(), ()>;
104+
let a = Res::Ok(());
105+
let b = Res::Ok(());
106+
let c = Result::<(), i32>::Err(1i32);
107+
108+
let zipped = zip_result!(
109+
Result::<_, ()>::Ok(zip_result!(a, b).unwrap()),
110+
c
111+
);
112+
113+
assert_eq!(zipped, None);
114+
}

0 commit comments

Comments
 (0)