Skip to content

Commit

Permalink
Add derive macros for enums (#287)
Browse files Browse the repository at this point in the history
* add derive macros for enums

* set up derive macro

* fix build

* more options

* fix build

* fix redox build

* more improvements

* lead with double colon
  • Loading branch information
mattwparas authored Nov 7, 2024
1 parent 26612b9 commit 36962a3
Show file tree
Hide file tree
Showing 2 changed files with 479 additions and 9 deletions.
62 changes: 62 additions & 0 deletions crates/steel-core/src/steel_vm/engine.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2317,3 +2317,65 @@ mod engine_sandbox_tests {
.is_err());
}
}

#[cfg(test)]
mod derive_macro_tests {
use super::*;

#[derive(steel_derive::_Steel, PartialEq, Debug)]
#[steel(equality, getters, constructors)]
enum TestEnumVariants {
Foo,
Bar,
Baz(usize, usize),
Bazinga {
foo: usize,
bananas: usize,
},
#[steel(ignore)]
Ignored(SteelString),
}

fn test() {
let mut module = BuiltInModule::new("foo");
TestEnumVariants::register_enum_variants(&mut module);
}

enum Foo {
Bananas(usize, usize, usize, usize),
Bananas2(usize, usize, usize, usize),
}

#[test]
fn test_primitives_are_registered() {
let mut engine = Engine::new();
let mut module = BuiltInModule::new("foo");

TestEnumVariants::register_enum_variants(&mut module);
engine.register_module(module);

engine
.run(
r#"
(require-builtin foo)
(assert! (TestEnumVariants-Foo? (TestEnumVariants-Foo)))
(assert! (TestEnumVariants-Bar? (TestEnumVariants-Bar)))
(assert! (TestEnumVariants-Baz? (TestEnumVariants-Baz 10 20)))
(assert! (TestEnumVariants-Bazinga? (TestEnumVariants-Bazinga 100 200)))
(assert! (equal? (TestEnumVariants-Bazinga-foo (TestEnumVariants-Bazinga 100 200)) 100))
(assert! (equal? (TestEnumVariants-Bazinga-bananas (TestEnumVariants-Bazinga 100 200)) 200))
(assert! (equal? (TestEnumVariants-Baz-0 (TestEnumVariants-Baz 100 200)) 100))
(assert! (equal? (TestEnumVariants-Baz-1 (TestEnumVariants-Baz 100 200)) 200))
(assert! (not (equal? 100 (TestEnumVariants-Foo))))
"#,
)
.unwrap();

assert!(engine
.run(r#"(TestEnumVariants-Ignored "Hello world")"#)
.is_err())
}
}
Loading

0 comments on commit 36962a3

Please sign in to comment.