intuicio_frontend_simpleton/
lib.rs1pub 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 );
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}