@@ -4,8 +4,8 @@ use essential_constraint_vm as constraint_vm;
44use essential_state_read_vm as state_read_vm;
55use essential_types:: {
66 intent:: { Directive , Intent } ,
7- solution:: { Mutation , Mutations , Solution , SolutionData } ,
8- ContentAddress , IntentAddress ,
7+ solution:: { Mutation , Solution , SolutionData } ,
8+ ContentAddress , IntentAddress , Word ,
99} ;
1010use std:: sync:: Arc ;
1111use util:: { empty_solution, intent_addr, random_keypair, State } ;
@@ -23,13 +23,15 @@ fn test_solution_data() -> SolutionData {
2323 SolutionData {
2424 intent_to_solve : test_intent_addr ( ) ,
2525 decision_variables : vec ! [ ] ,
26+ state_mutations : vec ! [ ] ,
27+ transient_data : vec ! [ ] ,
2628 }
2729}
2830
29- fn test_state_mutation ( ) -> Mutations {
30- Mutations {
31- pathway : 0 ,
32- mutations : vec ! [ ] ,
31+ fn test_mutation ( salt : usize ) -> Mutation {
32+ Mutation {
33+ key : vec ! [ salt as Word ; 4 ] ,
34+ value : vec ! [ 42 ] ,
3335 }
3436}
3537
@@ -48,7 +50,6 @@ fn too_many_solution_data() {
4850 data : ( 0 ..solution:: MAX_SOLUTION_DATA + 1 )
4951 . map ( |_| test_solution_data ( ) )
5052 . collect ( ) ,
51- ..empty_solution ( )
5253 } ;
5354 assert ! ( matches!(
5455 solution:: check( & solution) . unwrap_err( ) ,
@@ -63,8 +64,9 @@ fn too_many_decision_variables() {
6364 data : vec ! [ SolutionData {
6465 intent_to_solve: test_intent_addr( ) ,
6566 decision_variables: vec![ 0 ; ( solution:: MAX_DECISION_VARIABLES + 1 ) as usize ] ,
67+ state_mutations: vec![ ] ,
68+ transient_data: vec![ ] ,
6669 } ] ,
67- ..empty_solution ( )
6870 } ;
6971 assert ! ( matches!(
7072 solution:: check( & solution) . unwrap_err( ) ,
@@ -76,9 +78,14 @@ fn too_many_decision_variables() {
7678#[ test]
7779fn too_many_state_mutations ( ) {
7880 let solution = Solution {
79- data : vec ! [ test_solution_data( ) ] ,
80- transient_data : vec ! [ ] ,
81- state_mutations : vec ! [ test_state_mutation( ) ; solution:: MAX_STATE_MUTATIONS + 1 ] ,
81+ data : vec ! [ SolutionData {
82+ intent_to_solve: test_intent_addr( ) ,
83+ decision_variables: vec![ ] ,
84+ state_mutations: ( 0 ..( solution:: MAX_STATE_MUTATIONS + 1 ) )
85+ . map( test_mutation)
86+ . collect( ) ,
87+ transient_data: vec![ ] ,
88+ } ] ,
8289 } ;
8390 assert ! ( matches!(
8491 solution:: check( & solution) . unwrap_err( ) ,
@@ -87,39 +94,20 @@ fn too_many_state_mutations() {
8794 ) ) ;
8895}
8996
90- #[ test]
91- fn state_mutation_pathways_must_have_associated_solution_data ( ) {
92- let solution = Solution {
93- state_mutations : vec ! [ Mutations {
94- // Note: pathway out of bounds of solution data to trigger error.
95- pathway: 1 ,
96- mutations: Default :: default ( ) ,
97- } ] ,
98- transient_data : vec ! [ ] ,
99- data : vec ! [ test_solution_data( ) ] ,
100- } ;
101- assert ! ( matches!(
102- solution:: check( & solution) . unwrap_err( ) ,
103- solution:: InvalidSolution :: StateMutations (
104- solution:: InvalidStateMutations :: PathwayOutOfRangeOfSolutionData ( 1 )
105- ) ,
106- ) ) ;
107- }
108-
10997#[ test]
11098fn multiple_mutations_for_slot ( ) {
11199 let solution = Solution {
112- data : vec ! [ test_solution_data( ) ] ,
113- transient_data : vec ! [ ] ,
114- state_mutations : vec ! [ Mutations {
115- pathway: 0 ,
116- mutations: vec![
100+ data : vec ! [ SolutionData {
101+ intent_to_solve: test_intent_addr( ) ,
102+ decision_variables: vec![ ] ,
103+ state_mutations: vec![
117104 Mutation {
118105 key: vec![ 0 ; 4 ] ,
119106 value: vec![ 42 ] ,
120107 } ;
121108 2
122109 ] ,
110+ transient_data: vec![ ] ,
123111 } ] ,
124112 } ;
125113 assert ! ( matches!(
@@ -132,9 +120,14 @@ fn multiple_mutations_for_slot() {
132120#[ test]
133121fn too_many_transient_data ( ) {
134122 let solution = Solution {
135- data : vec ! [ test_solution_data( ) ] ,
136- transient_data : vec ! [ test_state_mutation( ) ; solution:: MAX_TRANSIENT_DATA + 1 ] ,
137- state_mutations : vec ! [ ] ,
123+ data : vec ! [ SolutionData {
124+ intent_to_solve: test_intent_addr( ) ,
125+ decision_variables: vec![ ] ,
126+ state_mutations: vec![ ] ,
127+ transient_data: ( 0 ..( solution:: MAX_TRANSIENT_DATA + 1 ) )
128+ . map( test_mutation)
129+ . collect( ) ,
130+ } ] ,
138131 } ;
139132 assert ! ( matches!(
140133 solution:: check( & solution) . unwrap_err( ) ,
@@ -143,25 +136,6 @@ fn too_many_transient_data() {
143136 ) ) ;
144137}
145138
146- #[ test]
147- fn transient_data_pathways_must_have_associated_solution_data ( ) {
148- let solution = Solution {
149- state_mutations : vec ! [ ] ,
150- transient_data : vec ! [ Mutations {
151- // Note: pathway out of bounds of solution data to trigger error.
152- pathway: 1 ,
153- mutations: Default :: default ( ) ,
154- } ] ,
155- data : vec ! [ test_solution_data( ) ] ,
156- } ;
157- assert ! ( matches!(
158- solution:: check( & solution) . unwrap_err( ) ,
159- solution:: InvalidSolution :: TransientData (
160- solution:: InvalidTransientData :: PathwayOutOfRangeOfSolutionData ( 1 )
161- ) ,
162- ) ) ;
163- }
164-
165139// Tests an intent for setting slot 0 to 42 against its associated solution.
166140#[ tokio:: test]
167141async fn check_intent_42_with_solution ( ) {
@@ -296,11 +270,7 @@ async fn intent_with_multiple_state_reads_and_slots() {
296270 data : vec ! [ SolutionData {
297271 intent_to_solve: intent_addr,
298272 decision_variables: Default :: default ( ) ,
299- } ] ,
300- transient_data : vec ! [ ] ,
301- state_mutations : vec ! [ Mutations {
302- pathway: 0 ,
303- mutations: vec![
273+ state_mutations: vec![
304274 Mutation {
305275 key: vec![ 0 ] ,
306276 value: vec![ 0 , 1 , 2 , 3 , 4 ] ,
@@ -322,6 +292,7 @@ async fn intent_with_multiple_state_reads_and_slots() {
322292 value: vec![ 8 ] ,
323293 } ,
324294 ] ,
295+ transient_data: vec![ ] ,
325296 } ] ,
326297 } ;
327298
0 commit comments