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