creusot_contracts/std/
range.rs1use crate::prelude::*;
2#[cfg(creusot)]
3use std::range::{Range, RangeFrom, RangeInclusive, legacy};
4
5extern_spec! {
6 impl<T> From<Range<T>> for legacy::Range<T> {
7 #[erasure]
8 #[ensures(result == legacy::Range { start: value.start, end: value.end })]
9 fn from(value: Range<T>) -> Self {
10 legacy::Range { start: value.start, end: value.end }
11 }
12 }
13
14 impl<T> From<legacy::Range<T>> for Range<T> {
15 #[erasure]
16 #[ensures(result == Range { start: value.start, end: value.end })]
17 fn from(value: legacy::Range<T>) -> Self {
18 Range { start: value.start, end: value.end }
19 }
20 }
21
22 impl<T> From<RangeFrom<T>> for legacy::RangeFrom<T> {
23 #[erasure]
24 #[ensures(result == legacy::RangeFrom { start: value.start })]
25 fn from(value: RangeFrom<T>) -> Self {
26 legacy::RangeFrom { start: value.start }
27 }
28 }
29
30 impl<T> From<legacy::RangeFrom<T>> for RangeFrom<T> {
31 #[erasure]
32 #[ensures(result == RangeFrom { start: value.start })]
33 fn from(value: legacy::RangeFrom<T>) -> Self {
34 RangeFrom { start: value.start }
35 }
36 }
37
38 impl<T> From<RangeInclusive<T>> for legacy::RangeInclusive<T> {
39 #[erasure]
40 #[ensures(result.start_log() == value.start)]
41 #[ensures(result.end_log() == value.last)]
42 #[ensures(value.start.deep_model() <= value.last.deep_model() ==> !result.is_empty_log())]
43 fn from(value: RangeInclusive<T>) -> Self where T: DeepModel<DeepModelTy: OrdLogic> {
44 legacy::RangeInclusive::new(value.start, value.last)
45 }
46 }
47
48 }