plum
git clone https://git.pyrossh.dev/plum
A statically typed, imperative programming language inspired by rust, python
4b9435d
— Peter John
2026-11-01T17:37:29+05:30
T1: core syntax + lowering
plum-core/tests/parser_test.rs
CHANGED
|
@@ -837,3 +837,22 @@ fn value_enum_rejected() {
|
|
|
837
837
|
fn struct_generic_rejected() {
|
|
838
838
|
assert!(hasParseError("struct Pp[T](a: T)"));
|
|
839
839
|
}
|
|
840
|
+
|
|
841
|
+
#[test]
|
|
842
|
+
fn review_struct_bodyless_comment_then_items() {
|
|
843
|
+
let s = parse("struct Aa(x: Int)\n# note\nstruct Bb(a: Aa)\n# c2\nrecord Pp[T](a: T)\n# c3\nfun f() -> Int = 1\n");
|
|
844
|
+
assert_eq!(s.items.len(), 4);
|
|
845
|
+
}
|
|
846
|
+
|
|
847
|
+
#[test]
|
|
848
|
+
fn review_struct_comment_after_eq_consts_nested_record() {
|
|
849
|
+
let s = parse(
|
|
850
|
+
"struct Vec2(x: Float, y: Float) =\n # c\n ZERO = Vec2(x: 0.0, y: 0.0)\n fun len(self) -> Float = self.x\nrecord Rr(v: Vec2) =\n fun g(self) -> Float = self.v.x\n",
|
|
851
|
+
);
|
|
852
|
+
let consts = s.items.iter().filter(|i| matches!(i, Item::Const(_))).count();
|
|
853
|
+
assert_eq!(consts, 1);
|
|
854
|
+
let fns: Vec<_> = s.items.iter().filter_map(|i| if let Item::Fn(f) = i { Some(f) } else { None }).collect();
|
|
855
|
+
assert_eq!(fns.len(), 2);
|
|
856
|
+
assert_eq!(fns[0].type_param.as_deref(), Some("Vec2"));
|
|
857
|
+
assert_eq!(fns[1].type_param.as_deref(), Some("Rr"));
|
|
858
|
+
}
|