pub use miden_field::Felt;
#[cfg(all(target_family = "wasm", miden))]
unsafe extern "C" {
#[link_name = "intrinsics::felt::assert"]
fn extern_assert(a: Felt);
#[link_name = "intrinsics::felt::assertz"]
fn extern_assertz(a: Felt);
#[link_name = "intrinsics::felt::assert_eq"]
fn extern_assert_eq(a: Felt, b: Felt);
}
#[cfg(all(target_family = "wasm", miden))]
#[inline(always)]
pub fn assert(a: Felt) {
unsafe { extern_assert(a) }
}
#[cfg(all(target_family = "wasm", miden))]
#[inline(always)]
pub fn assertz(a: Felt) {
unsafe { extern_assertz(a) }
}
#[cfg(all(target_family = "wasm", miden))]
#[inline(always)]
pub fn assert_eq(a: Felt, b: Felt) {
unsafe { extern_assert_eq(a, b) }
}
#[cfg(not(all(target_family = "wasm", miden)))]
#[inline(always)]
pub fn assert(a: Felt) {
if a != Felt::new(1) {
panic!("assert: expected 1");
}
}
#[cfg(not(all(target_family = "wasm", miden)))]
#[inline(always)]
pub fn assertz(a: Felt) {
if a != Felt::new(0) {
panic!("assertz: expected 0");
}
}
#[cfg(not(all(target_family = "wasm", miden)))]
#[inline(always)]
pub fn assert_eq(a: Felt, b: Felt) {
if a != b {
panic!("assert_eq: values differ");
}
}
#[macro_export]
macro_rules! felt {
($value:literal) => {{
const VALUE: u64 = $value as u64;
$crate::Felt::new(VALUE)
}};
}