Struct arithmetic_eval::fns::Assert
source · pub struct Assert;
Expand description
Assertion function.
§Type
(using arithmetic-typing
notation)
(Bool) -> ()
§Examples
let program = "
assert(1 + 2 != 5); // this assertion is fine
assert(3^2 > 10); // this one will fail
";
let module = Untyped::<F32Grammar>::parse_statements(program)?;
let module = ExecutableModule::new("test_assert", &module)?;
let mut env = Environment::new();
env.insert_native_fn("assert", fns::Assert);
let err = module.with_env(&env)?.run().unwrap_err();
assert_eq!(
err.source().location().in_module().span(&program),
"assert(3^2 > 10)"
);
assert_matches!(
err.source().kind(),
ErrorKind::NativeCall(msg) if msg == "Assertion failed"
);
Trait Implementations§
source§impl<T> NativeFn<T> for Assert
impl<T> NativeFn<T> for Assert
source§fn evaluate<'a>(
&self,
args: Vec<SpannedValue<T>>,
ctx: &mut CallContext<'_, T>,
) -> EvalResult<T>
fn evaluate<'a>( &self, args: Vec<SpannedValue<T>>, ctx: &mut CallContext<'_, T>, ) -> EvalResult<T>
Executes the function on the specified arguments.
impl Copy for Assert
Auto Trait Implementations§
impl Freeze for Assert
impl RefUnwindSafe for Assert
impl Send for Assert
impl Sync for Assert
impl Unpin for Assert
impl UnwindSafe for Assert
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)