13
13
14
14
import org .tensorics .core .analysis .expression .AssertionExpression ;
15
15
16
- import com .google .common .collect .ImmutableList ;
16
+ import com .google .common .collect .ImmutableMap ;
17
17
18
18
public class AnalysisResult implements Serializable {
19
19
20
20
private static final long serialVersionUID = 1L ;
21
21
22
- private final List <AssertionResult > assertionResults ;
22
+ /* We on purpose we use a guava immutable map here, because it preserves insertion order */
23
+ private final ImmutableMap <AssertionExpression , AssertionResult > assertionResults ;
23
24
private final AssertionStatus overallStatus ;
24
25
25
26
public AnalysisResult (Builder builder ) {
@@ -34,15 +35,17 @@ public static final Builder builder(AssertionStatus overallStatus) {
34
35
public static final class Builder {
35
36
36
37
private final AssertionStatus overallStatus ;
37
- private final ImmutableList .Builder <AssertionResult > resultsBuilder = ImmutableList .builder ();
38
+ private final ImmutableMap .Builder <AssertionExpression , AssertionResult > resultsBuilder = ImmutableMap
39
+ .builder ();
38
40
39
41
Builder (AssertionStatus overallStatus ) {
40
42
this .overallStatus = requireNonNull (overallStatus , "overallStatus must not be null." );
41
43
}
42
44
43
- public Builder add (AssertionResult result ) {
45
+ public Builder put (AssertionExpression expression , AssertionResult result ) {
46
+ requireNonNull (expression , "expression to add must not be null." );
44
47
requireNonNull (result , "result to add must not be null." );
45
- resultsBuilder .add ( result );
48
+ resultsBuilder .put ( expression , result );
46
49
return this ;
47
50
}
48
51
@@ -90,21 +93,20 @@ public boolean equals(Object obj) {
90
93
return true ;
91
94
}
92
95
93
- public List <AssertionResult > assertionResults () {
94
- return this .assertionResults ;
95
- }
96
-
97
96
public List <AssertionExpression > assertions () {
98
- return this .assertionResults .stream ().map ( a -> a . assertion () ).collect (Collectors .toList ());
97
+ return this .assertionResults .keySet ().stream ( ).collect (Collectors .toList ());
99
98
}
100
99
101
100
public AssertionStatus statusFor (AssertionExpression assertion ) {
102
- for (AssertionResult assertionResult : this .assertionResults ) {
103
- if (assertion .equals (assertionResult .assertion ())) {
104
- return assertionResult .status ();
105
- }
101
+ return resultFor (assertion ).status ();
102
+
103
+ }
104
+
105
+ public AssertionResult resultFor (AssertionExpression assertion ) {
106
+ if (!assertionResults .containsKey (assertion )) {
107
+ throw new NoSuchElementException ("No result available for assertion'" + assertion + "'." );
106
108
}
107
- throw new NoSuchElementException ( "No result available for assertion'" + assertion + "'." );
109
+ return assertionResults . get ( assertion );
108
110
}
109
111
110
112
public AssertionStatus overallStatus () {
0 commit comments