2019-06-21 02:43:50 -07:00
|
|
|
//! @brief Example Rust-based BPF program tests loop iteration
|
|
|
|
|
2020-10-23 17:22:10 -07:00
|
|
|
extern crate solana_program;
|
|
|
|
use solana_program::entrypoint::SUCCESS;
|
2019-06-21 02:43:50 -07:00
|
|
|
|
|
|
|
#[no_mangle]
|
2020-01-31 10:58:07 -08:00
|
|
|
pub extern "C" fn entrypoint(_input: *mut u8) -> u64 {
|
2019-06-21 02:43:50 -07:00
|
|
|
let x: u128 = 1;
|
|
|
|
let y = x.rotate_right(1);
|
|
|
|
assert_eq!(y, 170_141_183_460_469_231_731_687_303_715_884_105_728);
|
|
|
|
|
|
|
|
assert_eq!(
|
|
|
|
u128::max_value(),
|
|
|
|
340_282_366_920_938_463_463_374_607_431_768_211_455
|
|
|
|
);
|
|
|
|
|
|
|
|
let mut z = u128::max_value();
|
|
|
|
z -= 1;
|
|
|
|
assert_eq!(z, 340_282_366_920_938_463_463_374_607_431_768_211_454);
|
|
|
|
|
2019-08-28 17:19:40 -07:00
|
|
|
assert_eq!(u128::from(1u32.to_le()), 1);
|
|
|
|
assert_eq!(u128::from(1u32.to_be()), 0x1_000_000);
|
2019-08-26 13:31:06 -07:00
|
|
|
|
2019-08-28 17:19:40 -07:00
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::uadd(10, 20), 30u128);
|
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::usubtract(30, 20), 10u128);
|
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::umultiply(30, 20), 600u128);
|
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::udivide(20, 10), 2u128);
|
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::umodulo(20, 3), 2u128);
|
|
|
|
|
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::add(-10, -20), -30i128);
|
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::subtract(-30, -20), -10i128);
|
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::multiply(-30, -20), 600i128);
|
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::divide(-20, -10), 2i128);
|
|
|
|
assert_eq!(solana_bpf_rust_128bit_dep::modulo(-20, -3), -2i128);
|
2019-08-26 13:31:06 -07:00
|
|
|
|
2019-06-21 02:43:50 -07:00
|
|
|
let x = u64::max_value();
|
|
|
|
assert_eq!(u128::from(x) + u128::from(x), 36_893_488_147_419_103_230);
|
|
|
|
|
2019-08-28 17:19:40 -07:00
|
|
|
let x = solana_bpf_rust_128bit_dep::uadd(
|
2019-06-21 02:43:50 -07:00
|
|
|
u128::from(u64::max_value()),
|
|
|
|
u128::from(u64::max_value()),
|
|
|
|
);
|
|
|
|
assert_eq!(x.wrapping_shr(64) as u64, 1);
|
|
|
|
assert_eq!(
|
|
|
|
x.wrapping_shl(64).wrapping_shr(64) as u64,
|
|
|
|
0xffff_ffff_ffff_fffe
|
|
|
|
);
|
|
|
|
assert_eq!(x, 0x0001_ffff_ffff_ffff_fffe);
|
|
|
|
|
2019-09-06 16:05:01 -07:00
|
|
|
SUCCESS
|
2019-06-21 02:43:50 -07:00
|
|
|
}
|
2019-09-18 19:54:10 -07:00
|
|
|
|
|
|
|
#[cfg(test)]
|
|
|
|
mod test {
|
|
|
|
use super::*;
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
fn test_entrypoint() {
|
|
|
|
assert_eq!(SUCCESS, entrypoint(std::ptr::null_mut()));
|
|
|
|
}
|
|
|
|
}
|