git.delta.rocks / jrsonnet / refs/commits / 11643ec5f009

difftreelog

source

crates/jrsonnet-evaluator/tests/builtin.rs1.8 KiBsourcehistory
1mod common;23use std::path::PathBuf;45use gcmodule::Cc;6use jrsonnet_evaluator::{7	error::Result,8	function::{builtin, Builtin, CallLocation},9	gc::TraceBox,10	typed::Typed,11	val::FuncVal,12	State, Val,13};1415#[builtin]16fn a() -> Result<u32> {17	Ok(1)18}1920#[test]21fn basic_function() -> Result<()> {22	let s = State::default();23	let a: a = a {};24	let v = u32::from_untyped(25		a.call(26			s.clone(),27			s.create_default_context(),28			CallLocation::native(),29			&[],30		)?,31		s.clone(),32	)?;3334	ensure_eq!(v, 1);35	Ok(())36}3738#[builtin]39fn native_add(a: u32, b: u32) -> Result<u32> {40	Ok(a + b)41}4243#[test]44fn call_from_code() -> Result<()> {45	let s = State::default();46	s.with_stdlib();47	s.settings_mut().globals.insert(48		"nativeAdd".into(),49		Val::Func(FuncVal::StaticBuiltin(native_add::INST)),50	);5152	let v = s.evaluate_snippet_raw(53		PathBuf::new().into(),54		"55            assert nativeAdd(1, 2) == 3;56            assert nativeAdd(100, 200) == 300;57            null58        "59		.into(),60	)?;61	ensure_val_eq!(s.clone(), v, Val::Null);62	Ok(())63}6465#[builtin(fields(66    a: u3267))]68fn curried_add(this: &curried_add, b: u32) -> Result<u32> {69	Ok(this.a + b)70}7172#[builtin]73fn curry_add(a: u32) -> Result<FuncVal> {74	Ok(FuncVal::Builtin(Cc::new(TraceBox(Box::new(curried_add {75		a,76	})))))77}7879#[test]80fn nonstatic_builtin() -> Result<()> {81	let s = State::default();82	s.with_stdlib();83	s.settings_mut().globals.insert(84		"curryAdd".into(),85		Val::Func(FuncVal::StaticBuiltin(curry_add::INST)),86	);8788	let v = s.evaluate_snippet_raw(89		PathBuf::new().into(),90		"91            local a = curryAdd(1);92            local b = curryAdd(4);9394            assert a(2) == 3;95            assert a(200) == 201;9697            assert b(2) == 6;98            assert b(200) == 204;99            null100        "101		.into(),102	)?;103	ensure_val_eq!(s.clone(), v, Val::Null);104	Ok(())105}