10个版本
使用旧Rust 2015
0.9.2 | 2020年3月2日 |
---|---|
0.9.1 | 2019年5月11日 |
0.9.0 | 2019年3月31日 |
0.7.1 | 2018年9月13日 |
0.5.0 | 2017年3月29日 |
在#abstract-algebra中排名9
每月下载2,585次
在 4 crate中使用
23KB
426 行
alga-derive − 为Rust自动推导抽象代数特性
alga-derive 允许自动推导 alga 提供的特质。
它支持推导以下 alga 特质
AbstractQuasigroup
AbstractMonoid
AbstractSemigroup
AbstractGroup
AbstractGroupAbelian
AbstractRing
AbstractRingCommutative
AbstractField
自定义Derive也可以用来生成 quickcheck 测试,检查目标类型是否满足由Derive推导出的代数属性。
lib.rs
:
alga-derive
针对 alga
特质的自定义Derive。
支持的特质
AbstractQuasigroup
AbstractMonoid
AbstractSemigroup
AbstractGroup
AbstractGroupAbelian
AbstractRing
AbstractRingCommutative
AbstractField
示例
extern crate alga;
#[macro_use]
extern crate alga_derive;
use alga::general::Additive;
#[derive(Alga)]
#[alga_traits(Group(Additive))]
struct Struct;
此Derive实现了带有 Additive
运算符的 AbstractGroup
标记特质,以及目标类型所需的代数群性质的所有标记特质(AbstractMonoid
、AbstractSemigroup
、AbstractLoop
和 AbstractQuasigroup
)。
这些标记特质所需的特质(Identity
、PartialEq
、TwoSidedInverse
和 AbstractMagma
)应手动实现。
如果为目标类型添加了 #[alga_quickcheck]
属性,则将生成 quickcheck
测试。这些测试将检查推导出的特质的代数属性是否为真。此属性需要为目标类型实现 quickcheck
的 Arbitrary
特质。
extern crate alga;
#[macro_use]
extern crate alga_derive;
use alga::general::{Additive, AbstractGroup};
#[derive(Alga)]
#[alga_traits(Group(Additive), Where = "T: AbstractGroup")]
#[alga_quickcheck(check(i32), check(i64))]
struct Struct<T>;
当目标类型具有泛型参数时,可以在 alga_quickcheck
属性中通过列出它们在 check
中指定为测试生成的具体类型参数。
如果需要为 alga
特质实现添加限制,则可以通过 Where = "A: Bound1. B: Bound2"
列出它们。
依赖关系
~2MB
~47K SLoC