1mod common;23use jrsonnet_evaluator::{4 error::Result,5 function::{builtin, builtin::Builtin, CallLocation, FuncVal},6 tb,7 typed::Typed,8 State, Val,9};10use jrsonnet_gcmodule::Cc;1112#[builtin]13fn a() -> Result<u32> {14 Ok(1)15}1617#[test]18fn basic_function() -> Result<()> {19 let s = State::default();20 let a: a = a {};21 let v = u32::from_untyped(22 a.call(23 s.clone(),24 s.create_default_context(),25 CallLocation::native(),26 &(),27 )?,28 s,29 )?;3031 ensure_eq!(v, 1);32 Ok(())33}3435#[builtin]36fn native_add(a: u32, b: u32) -> Result<u32> {37 Ok(a + b)38}3940#[test]41fn call_from_code() -> Result<()> {42 let s = State::default();43 s.with_stdlib();44 s.settings_mut().globals.insert(45 "nativeAdd".into(),46 Val::Func(FuncVal::StaticBuiltin(native_add::INST)),47 );4849 let v = s.evaluate_snippet(50 "snip".to_owned(),51 "52 assert nativeAdd(1, 2) == 3;53 assert nativeAdd(100, 200) == 300;54 null55 "56 .into(),57 )?;58 ensure_val_eq!(s, v, Val::Null);59 Ok(())60}6162#[builtin(fields(63 a: u3264))]65fn curried_add(this: &curried_add, b: u32) -> Result<u32> {66 Ok(this.a + b)67}6869#[builtin]70fn curry_add(a: u32) -> Result<FuncVal> {71 Ok(FuncVal::Builtin(Cc::new(tb!(curried_add { a }))))72}7374#[test]75fn nonstatic_builtin() -> Result<()> {76 let s = State::default();77 s.with_stdlib();78 s.settings_mut().globals.insert(79 "curryAdd".into(),80 Val::Func(FuncVal::StaticBuiltin(curry_add::INST)),81 );8283 let v = s.evaluate_snippet(84 "snip".to_owned(),85 "86 local a = curryAdd(1);87 local b = curryAdd(4);8889 assert a(2) == 3;90 assert a(200) == 201;9192 assert b(2) == 6;93 assert b(200) == 204;94 null95 "96 .into(),97 )?;98 ensure_val_eq!(s, v, Val::Null);99 Ok(())100}