ethnum/
intrinsics.rs

1//! This module contains intrinsics used by the [`I256`](struct@crate::I256) and
2//! [`U256`](struct@crate::U256) implementations.
3//!
4//! # Stability
5//!
6//! Be careful when using these intrinsics directly. Semantic versioning API
7//! compatibility is **not guaranteed** for any of these intrinsics.
8
9#![allow(missing_docs)]
10
11#[macro_use]
12mod cast;
13
14#[cfg(feature = "llvm-intrinsics")]
15mod llvm;
16#[cfg(not(feature = "llvm-intrinsics"))]
17mod native;
18pub mod signed;
19
20#[cfg(feature = "llvm-intrinsics")]
21pub use self::llvm::*;
22#[cfg(not(feature = "llvm-intrinsics"))]
23pub use self::native::*;
24
25#[cfg(test)]
26mod tests {
27    use super::*;
28    use crate::uint::U256;
29    use core::mem::MaybeUninit;
30
31    #[test]
32    fn unchecked_addition() {
33        let mut res = MaybeUninit::uninit();
34        add3(&mut res, &U256([1, 2]), &U256([3, 0]));
35        assert_eq!(unsafe { res.assume_init() }, U256([4, 2]));
36    }
37}