modtype

Build Status codecov Crates.io

This crate provides modular arithmetic integer types.

Usage

[modtype::ModType]

```

[modtype::use_modtype]

type F = modtype::DefaultModType<1_000_000_007u64>;

asserteq!((F(1000000006) + F(2)).to_string(), "1"); ```

[modtype::thread_local::ModType]

```

[allow(nonsnakecase)]

modtype::threadlocal::DefaultModType::with(57u32, |Z| { asserteq!(Z(42) + Z(15), Z(0)); }); ```

[modtype::field_param::ModType]

``` use num::CheckedDiv as _;

[allow(nonsnakecase)]

let Z = modtype::field_param::DefaultModType::factory(1000u32);

asserteq!(Z(1).checkeddiv(&Z(777)), Some(Z(713))); // 777 × 713 ≡ 1 (mod 1000) ```

Customization

ModTypes can be customized via [modtype::Cartridge].

```

[modtype::use_modtype]

type F = modtype::ModType;

enum Cartridge {}

impl modtype::Cartridge for Cartridge { type Target = u64; type Features = modtype::DefaultFeatures;

// your implementation here

} ```