git.delta.rocks / jrsonnet / refs/commits / cfd533ff0e2c

difftreelog

source

crates/jrsonnet-evaluator/tests/builtin.rs1.7 KiBsourcehistory
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}