@@ -6,6 +6,7 @@ mod common;
6
6
use common:: { ExecuteValidateLoggerDatabase , LogDatabase } ;
7
7
use expect_test:: expect;
8
8
use salsa:: { CycleRecoveryAction , Database as Db , DatabaseImpl as DbImpl , Durability , Setter } ;
9
+ #[ cfg( not( miri) ) ]
9
10
use test_log:: test;
10
11
11
12
#[ derive( Clone , Copy , Debug , PartialEq , Eq , salsa:: Update ) ]
@@ -31,12 +32,13 @@ impl Value {
31
32
/// `max_iterate`, `min_panic`, `max_panic`) for testing cycle behaviors.
32
33
#[ salsa:: input]
33
34
struct Inputs {
35
+ #[ return_ref]
34
36
inputs : Vec < Input > ,
35
37
}
36
38
37
39
impl Inputs {
38
40
fn values ( self , db : & dyn Db ) -> impl Iterator < Item = Value > + ' _ {
39
- self . inputs ( db) . into_iter ( ) . map ( |input| input. eval ( db) )
41
+ self . inputs ( db) . iter ( ) . map ( |input| input. eval ( db) )
40
42
}
41
43
}
42
44
@@ -69,8 +71,8 @@ enum Input {
69
71
}
70
72
71
73
impl Input {
72
- fn eval ( self , db : & dyn Db ) -> Value {
73
- match self {
74
+ fn eval ( & self , db : & dyn Db ) -> Value {
75
+ match * self {
74
76
Self :: Value ( value) => value,
75
77
Self :: UntrackedRead ( value) => {
76
78
db. report_untracked_read ( ) ;
@@ -80,30 +82,30 @@ impl Input {
80
82
Self :: MaxIterate ( inputs) => max_iterate ( db, inputs) ,
81
83
Self :: MinPanic ( inputs) => min_panic ( db, inputs) ,
82
84
Self :: MaxPanic ( inputs) => max_panic ( db, inputs) ,
83
- Self :: Successor ( input) => match input. eval ( db) {
85
+ Self :: Successor ( ref input) => match input. eval ( db) {
84
86
Value :: N ( num) => Value :: N ( num + 1 ) ,
85
87
other => other,
86
88
} ,
87
- Self :: SuccessorOrZero ( input) => match input. eval ( db) {
89
+ Self :: SuccessorOrZero ( ref input) => match input. eval ( db) {
88
90
Value :: N ( num) => Value :: N ( num + 1 ) ,
89
91
_ => Value :: N ( 0 ) ,
90
92
} ,
91
93
}
92
94
}
93
95
94
- fn assert ( self , db : & dyn Db , expected : Value ) {
96
+ fn assert ( & self , db : & dyn Db , expected : Value ) {
95
97
assert_eq ! ( self . eval( db) , expected)
96
98
}
97
99
98
- fn assert_value ( self , db : & dyn Db , expected : u8 ) {
100
+ fn assert_value ( & self , db : & dyn Db , expected : u8 ) {
99
101
self . assert ( db, Value :: N ( expected) )
100
102
}
101
103
102
- fn assert_bounds ( self , db : & dyn Db ) {
104
+ fn assert_bounds ( & self , db : & dyn Db ) {
103
105
self . assert ( db, Value :: OutOfBounds )
104
106
}
105
107
106
- fn assert_count ( self , db : & dyn Db ) {
108
+ fn assert_count ( & self , db : & dyn Db ) {
107
109
self . assert ( db, Value :: TooManyIterations )
108
110
}
109
111
}
@@ -734,7 +736,7 @@ fn cycle_becomes_non_cycle() {
734
736
a_in. set_inputs ( & mut db) . to ( vec ! [ b] ) ;
735
737
b_in. set_inputs ( & mut db) . to ( vec ! [ a. clone( ) ] ) ;
736
738
737
- a. clone ( ) . assert_value ( & db, 255 ) ;
739
+ a. assert_value ( & db, 255 ) ;
738
740
739
741
b_in. set_inputs ( & mut db) . to ( vec ! [ value( 30 ) ] ) ;
740
742
@@ -758,7 +760,7 @@ fn non_cycle_becomes_cycle() {
758
760
a_in. set_inputs ( & mut db) . to ( vec ! [ b] ) ;
759
761
b_in. set_inputs ( & mut db) . to ( vec ! [ value( 30 ) ] ) ;
760
762
761
- a. clone ( ) . assert_value ( & db, 30 ) ;
763
+ a. assert_value ( & db, 30 ) ;
762
764
763
765
b_in. set_inputs ( & mut db) . to ( vec ! [ a. clone( ) ] ) ;
764
766
@@ -790,7 +792,7 @@ fn nested_double_multiple_revisions() {
790
792
Input :: Successor ( Box :: new( b. clone( ) ) ) ,
791
793
] ) ;
792
794
793
- a. clone ( ) . assert_count ( & db) ;
795
+ a. assert_count ( & db) ;
794
796
795
797
// next revision, we hit max value instead
796
798
c_in. set_inputs ( & mut db) . to ( vec ! [
@@ -799,13 +801,13 @@ fn nested_double_multiple_revisions() {
799
801
Input :: Successor ( Box :: new( b. clone( ) ) ) ,
800
802
] ) ;
801
803
802
- a. clone ( ) . assert_bounds ( & db) ;
804
+ a. assert_bounds ( & db) ;
803
805
804
806
// and next revision, we converge
805
807
c_in. set_inputs ( & mut db)
806
808
. to ( vec ! [ value( 240 ) , a. clone( ) , b. clone( ) ] ) ;
807
809
808
- a. clone ( ) . assert_value ( & db, 240 ) ;
810
+ a. assert_value ( & db, 240 ) ;
809
811
810
812
// one more revision, without relevant changes
811
813
a_in. set_inputs ( & mut db) . to ( vec ! [ b] ) ;
@@ -838,7 +840,7 @@ fn cycle_durability() {
838
840
. with_durability ( Durability :: HIGH )
839
841
. to ( vec ! [ a. clone( ) ] ) ;
840
842
841
- a. clone ( ) . assert_value ( & db, 255 ) ;
843
+ a. assert_value ( & db, 255 ) ;
842
844
843
845
// next revision, we converge instead
844
846
a_in. set_inputs ( & mut db)
@@ -866,8 +868,8 @@ fn cycle_unchanged() {
866
868
b_in. set_inputs ( & mut db) . to ( vec ! [ value( 60 ) , c] ) ;
867
869
c_in. set_inputs ( & mut db) . to ( vec ! [ b. clone( ) ] ) ;
868
870
869
- a. clone ( ) . assert_value ( & db, 59 ) ;
870
- b. clone ( ) . assert_value ( & db, 60 ) ;
871
+ a. assert_value ( & db, 59 ) ;
872
+ b. assert_value ( & db, 60 ) ;
871
873
872
874
db. assert_logs_len ( 4 ) ;
873
875
@@ -912,8 +914,8 @@ fn cycle_unchanged_nested() {
912
914
. to ( vec ! [ value( 61 ) , b. clone( ) , e. clone( ) ] ) ;
913
915
e_in. set_inputs ( & mut db) . to ( vec ! [ d. clone( ) ] ) ;
914
916
915
- a. clone ( ) . assert_value ( & db, 59 ) ;
916
- b. clone ( ) . assert_value ( & db, 60 ) ;
917
+ a. assert_value ( & db, 59 ) ;
918
+ b. assert_value ( & db, 60 ) ;
917
919
918
920
db. assert_logs_len ( 10 ) ;
919
921
@@ -965,8 +967,8 @@ fn cycle_unchanged_nested_intertwined() {
965
967
. to ( vec ! [ value( 61 ) , b. clone( ) , e. clone( ) ] ) ;
966
968
e_in. set_inputs ( & mut db) . to ( vec ! [ d. clone( ) ] ) ;
967
969
968
- a. clone ( ) . assert_value ( & db, 59 ) ;
969
- b. clone ( ) . assert_value ( & db, 60 ) ;
970
+ a. assert_value ( & db, 59 ) ;
971
+ b. assert_value ( & db, 60 ) ;
970
972
971
973
// First time we run this test, don't fetch c/d/e here; this means they won't get marked
972
974
// `verified_final` in R6 (this revision), which will leave us in the next revision (R7)
@@ -977,9 +979,9 @@ fn cycle_unchanged_nested_intertwined() {
977
979
// Second time we run this test, fetch everything in R6, to check the behavior of
978
980
// `maybe_changed_after` with all validated-final memos.
979
981
if i == 1 {
980
- c. clone ( ) . assert_value ( & db, 60 ) ;
981
- d. clone ( ) . assert_value ( & db, 60 ) ;
982
- e. clone ( ) . assert_value ( & db, 60 ) ;
982
+ c. assert_value ( & db, 60 ) ;
983
+ d. assert_value ( & db, 60 ) ;
984
+ e. assert_value ( & db, 60 ) ;
983
985
}
984
986
985
987
db. assert_logs_len ( 16 + i) ;
0 commit comments