source: profile/src/test/java/geniusweb/profile/utilityspace/DiscreteValueSetUtilitiesTest.java@ 52

Last change on this file since 52 was 52, checked in by ruud, 14 months ago

Fixed small issues in domaineditor.

File size: 7.7 KB
Line 
1package geniusweb.profile.utilityspace;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertFalse;
5import static org.junit.Assert.assertTrue;
6
7import java.io.IOException;
8import java.math.BigDecimal;
9import java.util.Arrays;
10import java.util.HashMap;
11import java.util.List;
12import java.util.Map;
13
14import org.junit.Test;
15
16import com.fasterxml.jackson.core.JsonParseException;
17import com.fasterxml.jackson.databind.JsonMappingException;
18import com.fasterxml.jackson.databind.ObjectMapper;
19
20import geniusweb.issuevalue.DiscreteValue;
21import geniusweb.issuevalue.DiscreteValueSet;
22import geniusweb.issuevalue.NumberValue;
23import geniusweb.issuevalue.NumberValueSet;
24import geniusweb.issuevalue.ValueSet;
25import tudelft.utilities.junit.GeneralTests;
26
27public class DiscreteValueSetUtilitiesTest
28 extends GeneralTests<DiscreteValueSetUtilities> {
29
30 private final static DiscreteValue vala = new DiscreteValue("a");
31 private final static DiscreteValue vala1 = new DiscreteValue("a");
32 private final static DiscreteValue valb = new DiscreteValue("b");
33 private final static NumberValue valn = new NumberValue("99");
34
35 private final static BigDecimal util = new BigDecimal("0.14");
36 private final static BigDecimal util1 = new BigDecimal("0.14");
37 private final static BigDecimal utilb = new BigDecimal("0.37");
38
39 private final static BigDecimal badutil = new BigDecimal("1.37");
40 private final static BigDecimal badutil2 = new BigDecimal("-0.37");
41
42 private final static DiscreteValueSetUtilities utils, utils1, utilsb,
43 utils1b, utilsc1, utilsc2;
44 private static final ObjectMapper jackson = new ObjectMapper();
45
46 static {
47 Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
48 Map<DiscreteValue, BigDecimal> valueUtils1 = new HashMap<>();
49 Map<DiscreteValue, BigDecimal> valueUtilsb = new HashMap<>();
50 Map<DiscreteValue, BigDecimal> valueUtils1b = new HashMap<>();
51
52 Map<DiscreteValue, BigDecimal> valueUtilsc1 = new HashMap<>();
53 Map<DiscreteValue, BigDecimal> valueUtilsc2 = new HashMap<>();
54
55 valueUtils.put(vala, util);
56 valueUtils1.put(vala1, util1); // same value and utility
57 valueUtilsb.put(valb, utilb); // different value and utility
58 valueUtils1b.put(vala, utilb); // same value, different utility.
59
60 valueUtilsc1.put(vala, util1);
61 valueUtilsc1.put(valb, utilb);
62
63 valueUtilsc1.put(valb, utilb);
64 valueUtilsc1.put(vala1, util1);
65
66 utils = new DiscreteValueSetUtilities(valueUtils);
67 utils1 = new DiscreteValueSetUtilities(valueUtils1);
68 utilsb = new DiscreteValueSetUtilities(valueUtilsb);
69 utils1b = new DiscreteValueSetUtilities(valueUtils1b);
70
71 utilsc1 = new DiscreteValueSetUtilities(valueUtilsc1);
72 utilsc2 = new DiscreteValueSetUtilities(valueUtilsc1);
73 }
74
75 @Override
76 public List<List<DiscreteValueSetUtilities>> getGeneralTestData() {
77 return Arrays.asList(Arrays.asList(utils, utils1),
78 Arrays.asList(utilsb), Arrays.asList(utils1b),
79 Arrays.asList(utilsc1, utilsc2));
80 }
81
82 @Override
83 public List<String> getGeneralTestStrings() {
84 return Arrays.asList("DiscreteValueSetUtilities\\{\"a\"=0.14\\}",
85 "DiscreteValueSetUtilities\\{\"b\"=0.37\\}",
86 "DiscreteValueSetUtilities\\{\"a\"=0.37\\}",
87 "DiscreteValueSetUtilities\\{\"a\"=0.14, \"b\"=0.37\\}");
88 }
89
90 @SuppressWarnings("unused")
91 @Test
92 public void smokeTest() {
93 Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
94 new DiscreteValueSetUtilities(valueUtils);
95 }
96
97 @SuppressWarnings("unused")
98 @Test(expected = IllegalArgumentException.class)
99 public void testTooLargeUtility() {
100 Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
101 valueUtils.put(vala, util);
102 valueUtils.put(valb, badutil);
103 new DiscreteValueSetUtilities(valueUtils);
104 }
105
106 @SuppressWarnings("unused")
107 @Test(expected = IllegalArgumentException.class)
108 public void testNegativeUtility() {
109 Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
110 valueUtils.put(vala, util);
111 valueUtils.put(valb, badutil2);
112 new DiscreteValueSetUtilities(valueUtils);
113 }
114
115 @SuppressWarnings("unused")
116 @Test(expected = IllegalArgumentException.class)
117 public void testNullUtility() {
118 Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
119 valueUtils.put(vala, null);
120 valueUtils.put(valb, util);
121 new DiscreteValueSetUtilities(valueUtils);
122 }
123
124 @SuppressWarnings("unused")
125 @Test(expected = NullPointerException.class)
126 public void testNullValueUtils() {
127 new DiscreteValueSetUtilities(null);
128
129 }
130
131 @SuppressWarnings("unused")
132 @Test(expected = NullPointerException.class)
133 public void testNullIssue() {
134 Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
135 valueUtils.put(vala, util);
136 valueUtils.put(null, utilb);
137 new DiscreteValueSetUtilities(valueUtils);
138 }
139
140 @Test
141 public void testGetUtility() {
142 Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
143 valueUtils.put(vala, util);
144 valueUtils.put(valb, utilb);
145 DiscreteValueSetUtilities utilset = new DiscreteValueSetUtilities(
146 valueUtils);
147 assertEquals(util, utilset.getUtility(vala));
148 assertEquals(utilb, utilset.getUtility(valb));
149 assertEquals(BigDecimal.ZERO,
150 utilset.getUtility(new DiscreteValue("unknownIssue")));
151
152 }
153
154 @Test
155 public void testIsFitting() {
156 ValueSet valueset = new DiscreteValueSet(Arrays.asList(vala, valb));
157
158 Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
159 valueUtils.put(vala, util);
160 DiscreteValueSetUtilities utilset = new DiscreteValueSetUtilities(
161 valueUtils);
162
163 assertEquals(
164 "The values in the set DiscreteValueSet[\"a\", \"b\"] do not match the values mapped to utilities [\"a\"]",
165 utilset.isFitting(valueset));
166
167 valueUtils.put(valb, utilb);
168 utilset = new DiscreteValueSetUtilities(valueUtils);
169 assertEquals(null, utilset.isFitting(valueset));
170
171 valueUtils.put(new DiscreteValue("unknownIssue"), util1);
172 utilset = new DiscreteValueSetUtilities(valueUtils);
173 assertEquals(
174 "The values in the set DiscreteValueSet[\"a\", \"b\"] do not match the values mapped to utilities [\"a\", \"b\", \"unknownIssue\"]",
175 utilset.isFitting(valueset));
176
177 }
178
179 @Test
180 public void testIsFittingWrongType() {
181 ValueSet valueset = new NumberValueSet(BigDecimal.ZERO, BigDecimal.ONE,
182 new BigDecimal("0.3"));
183
184 Map<DiscreteValue, BigDecimal> valueUtils = new HashMap<>();
185 valueUtils.put(vala, util);
186 valueUtils.put(valb, utilb);
187 DiscreteValueSetUtilities utilset = new DiscreteValueSetUtilities(
188 valueUtils);
189
190 assertEquals(
191 "The utilities are for a discrete valueset but the given values are numberValueSet[0,1,0.3]",
192 utilset.isFitting(valueset));
193
194 }
195
196 @Test
197 public void testIsFittingWrongIssues()
198 throws JsonParseException, JsonMappingException, IOException {
199 // Notice, party tent has extra single quote in the valuesstr.
200 String valuesstr = "{\"values\": [\"Party Tent'\",\"Your Dorm\", \"Party Room\", \"Ballroom\" ]}";
201 String utilstring = "{\"DiscreteValueSetUtilities\": {\"valueUtilities\": {\"Party Tent\": 0.52,\"Your Dorm\": 0.23,\"Party Room\": 0.99,\"Ballroom\": 0.77}}}";
202 ValueSetUtilities valueutils = jackson.readValue(utilstring,
203 ValueSetUtilities.class);
204 ValueSet values = jackson.readValue(valuesstr, ValueSet.class);
205 System.out.println(valueutils.isFitting(values));
206 assertFalse(valueutils.isFitting(values).isEmpty());
207
208 }
209
210 @Test
211 public void testDeserializeAsDiscrete()
212 throws JsonParseException, JsonMappingException, IOException {
213 // Check that DiscreteValueSetUtilities properly deserializes
214 // discreteutils.
215 String utilstring = "{\"DiscreteValueSetUtilities\": {\"valueUtilities\": {\"Party Tent\": 0.52,\"Your Dorm\": 0.23,\"Party Room\": 0.99,\"Ballroom\": 0.77}}}";
216 DiscreteValueSetUtilities valueutils = jackson.readValue(utilstring,
217 DiscreteValueSetUtilities.class);
218 assertTrue(new BigDecimal("0.23").compareTo(
219 valueutils.getUtility(new DiscreteValue("Your Dorm"))) == 0);
220
221 }
222
223}
Note: See TracBrowser for help on using the repository browser.