1- use willow_25:: { Area , Entry , NamespaceId25 , Path , PayloadDigest25 , Range , SubspaceId25 } ;
2- use willow_data_model:: grouping:: AreaSubspace ;
1+ use willow25:: prelude:: * ;
32
43fn main ( ) {
5- // Ranges
6- let open_range = Range :: new_open ( 10 ) ;
7- let closed_range = Range :: new_closed ( 15 , 20 ) . unwrap ( ) ;
8- let closed_range2 = Range :: new_closed ( 5 , 15 ) . unwrap ( ) ;
9-
10- println ! ( "open_range includes 5: {:?}" , open_range. includes( & 5 ) ) ;
11- println ! ( "open_range includes 15: {:?}" , open_range. includes( & 10 ) ) ;
12-
13- println ! (
14- "open range includes closed_range: {:?}" ,
15- open_range. includes_range( & closed_range)
16- ) ;
17-
18- println ! (
19- "open range includes closed_range2: {:?}" ,
20- open_range. includes_range( & closed_range2)
21- ) ;
22-
23- let intersection = open_range. intersection ( & closed_range2) ;
24-
25- match intersection {
26- Some ( new_range) => {
27- println ! ( "The intersection of open_range and closed_range2 is:" ) ;
28- println ! ( "{:#?}" , new_range) ;
29- }
30- None => panic ! ( "There is no intersection between open_range and closed_range2?!" ) ,
31- }
32-
33- // Areas
34-
35- let ( alfie_subspace, _key) = SubspaceId25 :: new ( ) ;
36- let ( betty_subspace, _key) = SubspaceId25 :: new ( ) ;
37- let blog_path = Path :: from_slices ( & [ "blog" ] ) . unwrap ( ) ;
38-
39- let late_time_range = Range :: new_closed ( 500 , 1000 ) . unwrap ( ) ;
40-
41- let any_late_blog_area = Area :: new ( AreaSubspace :: Any , blog_path, late_time_range) ;
42-
43- let alfie_early_blog_entry = Entry :: new (
44- NamespaceId25 :: new_communal ( ) ,
45- alfie_subspace. clone ( ) ,
46- Path :: from_slices ( & [ "blog" , "breakfast" ] ) . unwrap ( ) ,
47- 100 ,
48- 0 ,
49- PayloadDigest25 :: default ( ) ,
50- ) ;
51-
52- let betty_late_blog_entry = Entry :: new (
53- NamespaceId25 :: new_communal ( ) ,
54- betty_subspace. clone ( ) ,
55- Path :: from_slices ( & [ "blog" , "dinner" ] ) . unwrap ( ) ,
56- 800 ,
57- 0 ,
58- PayloadDigest25 :: default ( ) ,
59- ) ;
60-
61- println ! (
62- "any_late_blog_area includes alfie_early_blog_entry: {:?}" ,
63- any_late_blog_area. includes_entry( & alfie_early_blog_entry)
64- ) ;
65-
66- println ! (
67- "any_late_blog_area includes betty_late_blog_entry: {:?}" ,
68- any_late_blog_area. includes_entry( & betty_late_blog_entry)
69- ) ;
70-
71- let alfie_everything_area = Area :: new (
72- AreaSubspace :: Id ( alfie_subspace) ,
73- Path :: new_empty ( ) ,
74- Range :: new_open ( 0 ) ,
75- ) ;
76-
77- println ! (
78- "alfie_everything_area includes alfie_early_blog_entry: {:?}" ,
79- alfie_everything_area. includes_entry( & alfie_early_blog_entry)
80- ) ;
81-
82- println ! (
83- "alfie_everything_area includes betty_late_blog_entry: {:?}" ,
84- alfie_everything_area. includes_entry( & betty_late_blog_entry)
85- ) ;
86- }
4+ let namespace_id = NamespaceId :: from ( [ 0 ; NAMESPACE_ID_WIDTH ] ) ;
5+ let subspace_id = SubspaceId :: from ( [ 1 ; SUBSPACE_ID_WIDTH ] ) ;
6+
7+ // Create an entry for comparisons, with a timestamp of 17.
8+ let entry = Entry :: builder ( )
9+ . namespace_id ( namespace_id. clone ( ) )
10+ . subspace_id ( subspace_id)
11+ . path ( path ! ( "/" ) )
12+ . timestamp ( 17 )
13+ . payload ( b"bla" )
14+ . build ( )
15+ . unwrap ( ) ;
16+
17+ // Can create TimeRanges from arbitrary rust ranges of Timestamps.
18+ assert ! ( entry. is_in( & TimeRange :: from( 5 . into( ) ..19 . into( ) ) ) ) ;
19+ assert ! ( entry. is_in( & TimeRange :: from( 5 . into( ) ..) ) ) ;
20+ assert ! ( entry. is_in( & TimeRange :: from( ..19 . into( ) ) ) ) ;
21+ assert ! ( entry. is_in( & TimeRange :: from( 5 . into( ) ..=17 . into( ) ) ) ) ;
22+ assert ! ( entry. is_in( & TimeRange :: from( ..) ) ) ;
23+ assert ! ( !entry. is_in( & TimeRange :: from( 33 . into( ) ..) ) ) ;
24+
25+ let intersection = TimeRange :: from ( ..19 . into ( ) )
26+ . intersection ( & TimeRange :: from ( 5 . into ( ) ..) ) ;
27+ assert_eq ! ( intersection, TimeRange :: from( 5 . into( ) ..19 . into( ) ) ) ;
28+ assert ! ( entry. is_in( & intersection) ) ;
29+ assert ! ( entry. is_in_intersection(
30+ & TimeRange :: from( ..19 . into( ) ) ,
31+ & TimeRange :: from( 5 . into( ) ..) ,
32+ ) ) ;
33+
34+ // Area
35+ let alfie_subspace = SubspaceId :: from ( [ 17 ; SUBSPACE_ID_WIDTH ] ) ;
36+ let betty_subspace = SubspaceId :: from ( [ 64 ; SUBSPACE_ID_WIDTH ] ) ;
37+
38+ let alfie_early_blog_entry = Entry :: builder ( )
39+ . namespace_id ( namespace_id. clone ( ) )
40+ . subspace_id ( alfie_subspace. clone ( ) )
41+ . path ( path ! ( "/blog/breakfast" ) )
42+ . timestamp ( 100 )
43+ . payload ( b"I made the most delicious pancakes today." )
44+ . build ( )
45+ . unwrap ( ) ;
46+
47+ let betty_late_blog_entry = Entry :: builder ( )
48+ . namespace_id ( namespace_id. clone ( ) )
49+ . subspace_id ( betty_subspace. clone ( ) )
50+ . path ( path ! ( "/blog/dinner" ) )
51+ . timestamp ( 800 )
52+ . payload ( b"Salmon is great when you're low on time." )
53+ . build ( )
54+ . unwrap ( ) ;
55+
56+ let late_time_range = TimeRange :: from ( 500 . into ( ) ..1000 . into ( ) ) ;
57+ let any_late_blog_area = Area :: new ( None , path ! ( "/blog" ) , late_time_range) ;
58+
59+ assert ! ( betty_late_blog_entry. is_in( & any_late_blog_area) ) ;
60+ assert ! ( !alfie_early_blog_entry. is_in( & any_late_blog_area) ) ;
61+
62+ let alfie_all_area = Area :: new ( Some ( alfie_subspace) , path ! ( "/blog" ) , TimeRange :: full ( ) ) ;
63+
64+ assert ! ( !betty_late_blog_entry. is_in( & alfie_all_area) ) ;
65+ assert ! ( alfie_early_blog_entry. is_in( & alfie_all_area) ) ;
66+ }
0 commit comments