plum
git clone https://git.pyrossh.dev/plum
A statically typed, imperative programming language inspired by rust, python
f50415c
— Peter John
2026-11-02T19:43:04+05:30
T2: trait lowering
plum-core/tests/traits_test.rs
CHANGED
|
@@ -182,3 +182,21 @@ fn loader_runs_lowerTraits() {
|
|
|
182
182
|
assert_eq!(enumOf(&s, "Hut").variants[0].field_names, vec!["nxt"]);
|
|
183
183
|
let _ = std::fs::remove_dir_all(&dir);
|
|
184
184
|
}
|
|
185
|
+
|
|
186
|
+
#[test]
|
|
187
|
+
fn struct_typed_field_accessors_and_two_traits() {
|
|
188
|
+
let mut s = parseRaw(
|
|
189
|
+
"struct Pt(x: Int)\ntrait Aa(p: Pt)\ntrait Bb(q: Int)\nrecord Rr(Aa, Bb, k: Int)\n",
|
|
190
|
+
);
|
|
191
|
+
assert!(lowerTraits(&mut s).is_empty());
|
|
192
|
+
assert_eq!(enumOf(&s, "Rr").variants[0].field_names, vec!["p", "q", "k"]);
|
|
193
|
+
let set = fnOf(&s, "Rr", &setter("p")).unwrap();
|
|
194
|
+
match &set.params[0].ty {
|
|
195
|
+
ParamType::Type(t) => assert_eq!(t.name, "Pt"),
|
|
196
|
+
_ => panic!("setter param type"),
|
|
197
|
+
}
|
|
198
|
+
assert_eq!(fnOf(&s, "Rr", &getter("p")).unwrap().returns.as_ref().unwrap().name, "Pt");
|
|
199
|
+
assert!(fnOf(&s, "Rr", &getter("q")).is_some());
|
|
200
|
+
assert_eq!(enumOf(&s, "Aa").variants.len(), 1);
|
|
201
|
+
assert_eq!(enumOf(&s, "Bb").variants[0].name, "Rr");
|
|
202
|
+
}
|