#algebra #monoid #abstract-algebra

alga_derive

用于从algacrate实现代数特性的Derive属性

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

Download history 556/week @ 2024-03-13 893/week @ 2024-03-20 811/week @ 2024-03-27 709/week @ 2024-04-03 672/week @ 2024-04-10 793/week @ 2024-04-17 788/week @ 2024-04-24 719/week @ 2024-05-01 693/week @ 2024-05-08 691/week @ 2024-05-15 744/week @ 2024-05-22 842/week @ 2024-05-29 650/week @ 2024-06-05 531/week @ 2024-06-12 660/week @ 2024-06-19 621/week @ 2024-06-26

每月下载2,585
4 crate中使用

Apache-2.0

23KB
426

Build status

文档

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 标记特质,以及目标类型所需的代数群性质的所有标记特质(AbstractMonoidAbstractSemigroupAbstractLoopAbstractQuasigroup)。

这些标记特质所需的特质(IdentityPartialEqTwoSidedInverseAbstractMagma)应手动实现。

如果为目标类型添加了 #[alga_quickcheck] 属性,则将生成 quickcheck 测试。这些测试将检查推导出的特质的代数属性是否为真。此属性需要为目标类型实现 quickcheckArbitrary 特质。

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