10个版本
0.4.0 | 2022年9月25日 |
---|---|
0.3.4 | 2022年8月27日 |
0.3.3 | 2021年8月26日 |
0.2.0 | 2021年8月21日 |
0.1.2 | 2021年8月20日 |
#562 in 数据结构
每月 23 次下载
79KB
2K SLoC
Rust中的纯函数数据结构
理由
纯函数数据结构具有持久性属性。数据结构是先前更新之上的delta更新的集合。它们是不可变的,因此非常适合用于分布式系统、并发系统和数据库等大量问题的解决方案。
包含内容
- 列表或栈
- 队列
- 平衡集
- 平衡映射
- 哈希集
- 哈希映射
- 树
不包括的内容
Map
/Set
/Queue
iter
尚未实现。但是它们在 List
/HashSet
/HashMap
/Tree
中可用。
示例
let mut numbers = Vec::new();
let mut n = HashSet::empty();
for _ in 0..1000000 {
let r = rand() % 100000;
n = n.insert(r);
numbers.push(r);
}
let mut sorted = numbers.clone();
sorted.sort();
sorted.dedup();
assert_eq!(n.len(), sorted.len());
for i in 0..numbers.len() {
assert_eq!(n.exist(numbers[i]), true);
}
let mut v = n.to_vec();
v.sort();
assert_eq!(v.len(), sorted.len());
for i in sorted {
n = n.remove(i);
assert_eq!(n.exist(i), false);
}
assert_eq!(n.len(), 0);
测试覆盖率
测试旨在达到100%的测试覆盖率。100%的覆盖率并不排除错误。事实上,它在覆盖率工具(tarpaulin)中发现了错误,因此请自行承担风险 ;) 另外,鉴于tarpaulin的脆弱状态,有很多误报:标记为未覆盖的代码实际上是已覆盖的。
致谢
Bot set.rs & map.rs 受F#编译器代码(FSharp.Core/set.fs)中的F#代码高度启发。该F#代码是当前最高性能的实现之一。
许可证
BSD-3-Clause许可证