intuicio_frontend_simpleton/
lib.rs

1pub mod library;
2pub mod nodes;
3pub mod parser;
4pub mod script;
5
6pub mod prelude {
7    pub use crate::{library::*, script::*, *};
8}
9
10use intuicio_core::{crate_version, IntuicioVersion};
11
12pub use intuicio_framework_dynamic::{
13    Array, Boolean, Function, Integer, Map, Real, Reference, Text, Transferable, Transferred, Type,
14};
15
16pub fn frontend_simpleton_version() -> IntuicioVersion {
17    crate_version!()
18}
19
20#[cfg(test)]
21mod tests {
22    use crate::{
23        library::{jobs::Jobs, ObjectBuilder},
24        script::{SimpletonContentParser, SimpletonPackage, SimpletonScriptExpression},
25        Integer, Real, Reference,
26    };
27    use intuicio_backend_vm::prelude::*;
28    use intuicio_core::prelude::*;
29
30    #[test]
31    fn test_simpleton_script() {
32        let mut content_provider = FileContentProvider::new("simp", SimpletonContentParser);
33        let package =
34            SimpletonPackage::new("../../resources/package.simp", &mut content_provider).unwrap();
35        let host_producer = HostProducer::new(move || {
36            let mut registry = Registry::default();
37            crate::library::install(&mut registry);
38            package
39                .compile()
40                .install::<VmScope<SimpletonScriptExpression>>(
41                    &mut registry,
42                    None,
43                    // Some(
44                    //     PrintDebugger::full()
45                    //         .basic_printables()
46                    //         .stack_bytes(false)
47                    //         .registers_bytes(false)
48                    //         .into_handle(),
49                    // ),
50                );
51            let context = Context::new(10240, 10240);
52            Host::new(context, registry.into())
53        });
54        let mut vm = host_producer.produce();
55        vm.context()
56            .set_custom(Jobs::HOST_PRODUCER_CUSTOM, host_producer);
57
58        let adder = Reference::new_raw(
59            ObjectBuilder::new("Adder", "adder")
60                .field("a", Reference::new_integer(40, vm.registry()))
61                .field("b", Reference::new_integer(2, vm.registry()))
62                .build(vm.registry()),
63        );
64        let (result,) = vm
65            .call_function::<(Reference,), _>("add", "adder", None)
66            .unwrap()
67            .run((adder,));
68        assert_eq!(vm.context().stack().position(), 0);
69        assert_eq!(*result.read::<Integer>().unwrap(), 42);
70
71        let (result,) = vm
72            .call_function::<(Reference,), _>("main", "test", None)
73            .unwrap()
74            .run(());
75        assert_eq!(vm.context().stack().position(), 0);
76        assert_eq!(*result.read::<Real>().unwrap(), 42.0);
77    }
78}