@@ -25,6 +25,9 @@ fn prop_store_ops_match_model() {
25
25
enum StoreOp {
26
26
Save { key : String , value : V } ,
27
27
Delete { key : String } ,
28
+ AlterId { key : String } ,
29
+ AlterConst { key : String , replacement : Option < V > } ,
30
+ AlterUpdate { key : String , new_value : V } ,
28
31
}
29
32
use StoreOp :: * ;
30
33
impl StoreOp {
@@ -39,6 +42,22 @@ fn prop_store_ops_match_model() {
39
42
store. delete ( key) ?;
40
43
assert_eq ! ( store. load( key) ?, None ) ;
41
44
}
45
+ AlterId { key } => {
46
+ let previous = store. load ( key) ?;
47
+ store. alter ( key, |loaded| loaded) ?;
48
+ assert_eq ! ( store. load( key) ?, previous) ;
49
+ }
50
+ AlterConst { key, replacement } => {
51
+ store. alter ( key, |_| replacement. clone ( ) ) ?;
52
+ assert_eq ! ( store. load( key) ?. as_ref( ) , replacement. as_ref( ) ) ;
53
+ }
54
+ AlterUpdate { key, new_value } => {
55
+ let previous = store. load ( key) ?;
56
+ store. alter ( key, |existing : Option < V > | {
57
+ existing. map ( |_| new_value. clone ( ) )
58
+ } ) ?;
59
+ assert_eq ! ( store. load( key) ?. as_ref( ) , previous. map( |_| new_value) ) ;
60
+ }
42
61
} ;
43
62
Ok ( ( ) )
44
63
}
@@ -51,6 +70,9 @@ fn prop_store_ops_match_model() {
51
70
let half_ops = prop_oneof ! (
52
71
( Just ( "Save" ) , values. clone( ) . prop_map( Some ) ) ,
53
72
( Just ( "Delete" ) , Just ( None ) ) ,
73
+ ( Just ( "AlterId" ) , Just ( None ) ) ,
74
+ ( Just ( "AlterConst" ) , proptest:: option:: of( values. clone( ) ) ) ,
75
+ ( Just ( "AlterUpdate" ) , values. clone( ) . prop_map( Some ) ) ,
54
76
) ;
55
77
56
78
// This strategy will generate key / value pairs with multiple values per key,
@@ -64,6 +86,9 @@ fn prop_store_ops_match_model() {
64
86
match half_op {
65
87
( "Save" , Some ( value) ) => Save { key, value } ,
66
88
( "Delete" , None ) => Delete { key } ,
89
+ ( "AlterId" , None ) => AlterId { key } ,
90
+ ( "AlterConst" , replacement) => AlterConst { key, replacement } ,
91
+ ( "AlterUpdate" , Some ( new_value) ) => AlterUpdate { key, new_value } ,
67
92
unexpected => panic ! ( "unexpected: {:?}" , unexpected) ,
68
93
}
69
94
} )
0 commit comments