Skip to content

Commit 29ab7d7

Browse files
committed
add more tests
1 parent b18bf8e commit 29ab7d7

1 file changed

Lines changed: 69 additions & 0 deletions

File tree

src/lib.rs

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,6 +1003,75 @@ fn main() {
10031003
assert!(warning_names(prog).is_empty());
10041004
}
10051005

1006+
#[test]
1007+
fn shadowed_outer_variable_unused_warns() {
1008+
// Outer `x` is never referenced; inner `x` shadows it and is used.
1009+
// Only the outer binding should warn.
1010+
let prog = r#"fn main() {
1011+
let x: u8 = 1;
1012+
let y: u8 = {
1013+
let x: u8 = 2;
1014+
x
1015+
};
1016+
assert!(jet::eq_8(y, 2))
1017+
}"#;
1018+
let names = warning_names(prog);
1019+
assert_eq!(
1020+
names.len(),
1021+
1,
1022+
"Expected exactly one warning (outer x), got: {names:?}",
1023+
);
1024+
assert!(
1025+
matches!(&names[0], WarningName::UnusedVariable(id) if id.as_inner() == "x"),
1026+
"Expected UnusedVariable(x) for the outer binding, got: {:?}",
1027+
names,
1028+
);
1029+
}
1030+
1031+
#[test]
1032+
fn shadowed_inner_variable_unused_warns() {
1033+
// Outer `x` is used as the RHS of the inner binding.
1034+
// Inner `x` is never referenced after being bound, so it should warn.
1035+
let prog = r#"fn main() {
1036+
let x: u8 = 1;
1037+
let y: u8 = {
1038+
let x: u8 = x;
1039+
0
1040+
};
1041+
assert!(jet::eq_8(y, 0))
1042+
}"#;
1043+
let names = warning_names(prog);
1044+
assert_eq!(
1045+
names.len(),
1046+
1,
1047+
"Expected exactly one warning (inner x), got: {names:?}",
1048+
);
1049+
assert!(
1050+
matches!(&names[0], WarningName::UnusedVariable(id) if id.as_inner() == "x"),
1051+
"Expected UnusedVariable(x) for the inner binding, got: {:?}",
1052+
names,
1053+
);
1054+
}
1055+
1056+
#[test]
1057+
fn outer_variable_used_after_inner_scope_no_warning() {
1058+
// `x` is bound in the outer scope, referenced after an inner block
1059+
// that binds a different name. Neither binding should warn.
1060+
let prog = r#"fn main() {
1061+
let x: u8 = 1;
1062+
let y: u8 = {
1063+
let z: u8 = 2;
1064+
z
1065+
};
1066+
let (_, sum): (bool, u8) = jet::add_8(x, y);
1067+
assert!(jet::eq_8(sum, 3))
1068+
}"#;
1069+
assert!(
1070+
warning_names(prog).is_empty(),
1071+
"Expected no warnings when all variables are used",
1072+
);
1073+
}
1074+
10061075
#[test]
10071076
fn deny_warning_by_category_is_error() {
10081077
use crate::WarnCategory;

0 commit comments

Comments
 (0)