plum

#treesitter#compiler#wasm

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
Files changed (1) hide show
  1. plum-core/tests/traits_test.rs +18 -0
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
+ }