modtype 0.6.0

Macros that implement modular arithmetic integer types
Documentation

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>;

assert_eq!((F(1_000_000_006) + F(2)).to_string(), "1");

modtype::thread_local::ModType

#[allow(non_snake_case)]
modtype::thread_local::DefaultModType::with(57u32, |Z| {
    assert_eq!(Z(42) + Z(15), Z(0));
});

modtype::field_param::ModType

use num::CheckedDiv as _;

#[allow(non_snake_case)]
let Z = modtype::field_param::DefaultModType::factory(1000u32);

assert_eq!(Z(1).checked_div(&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<u64, Cartridge, 1_000_000_007u64>;

enum Cartridge {}

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

    // your implementation here
}