vstd_extra/external/
cmp.rs1use vstd::{prelude::*, std_specs::cmp::OrdSpec};
4
5use core::cmp::Ordering;
6
7verus! {
8
9pub open spec fn spec_ord_min<T: Ord>(x: T, y: T) -> T {
11 match y.cmp_spec(&x) {
12 Ordering::Less => y,
13 Ordering::Equal => x,
14 Ordering::Greater => x,
15 }
16}
17
18pub open spec fn spec_ord_max<T: Ord>(x: T, y: T) -> T {
20 match y.cmp_spec(&x) {
21 Ordering::Less => x,
22 Ordering::Equal => y,
23 Ordering::Greater => y,
24 }
25}
26
27#[verifier::when_used_as_spec(spec_ord_min)]
30pub assume_specification<T: Ord>[ core::cmp::min ](x: T, y: T) -> (ret: T)
31 ensures
32 T::obeys_cmp_spec() ==> ret == spec_ord_min(x, y),
33;
34
35#[verifier::when_used_as_spec(spec_ord_max)]
38pub assume_specification<T: Ord>[ core::cmp::max ](x: T, y: T) -> (ret: T)
39 ensures
40 T::obeys_cmp_spec() ==> ret == spec_ord_max(x, y),
41;
42
43}