source: profile/src/test/java/geniusweb/profile/utilityspace/NumberValueSetUtilTest.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: 6.7 KB
Line 
1package geniusweb.profile.utilityspace;
2
3import static org.junit.Assert.assertEquals;
4
5import java.io.IOException;
6import java.math.BigDecimal;
7import java.util.Arrays;
8import java.util.List;
9
10import org.junit.Test;
11
12import com.fasterxml.jackson.core.JsonParseException;
13import com.fasterxml.jackson.core.JsonProcessingException;
14import com.fasterxml.jackson.databind.JsonMappingException;
15import com.fasterxml.jackson.databind.ObjectMapper;
16
17import geniusweb.issuevalue.DiscreteValue;
18import geniusweb.issuevalue.DiscreteValueSet;
19import geniusweb.issuevalue.NumberValue;
20import geniusweb.issuevalue.NumberValueSet;
21import geniusweb.issuevalue.ValueSet;
22import tudelft.utilities.immutablelist.Range;
23import tudelft.utilities.junit.GeneralTests;
24
25public class NumberValueSetUtilTest
26 extends GeneralTests<NumberValueSetUtilities> {
27
28 private static final BigDecimal lowval1 = new BigDecimal("12.5");
29 private static final BigDecimal low1util = new BigDecimal("0.5");
30 private static final BigDecimal low1utilb = new BigDecimal("0.6");
31 private static final BigDecimal highval = new BigDecimal("18.5");
32 private static final BigDecimal highvalb = new BigDecimal("18.4");
33 private static final BigDecimal highutil = new BigDecimal("0.9");
34 private static final NumberValueSetUtilities valueset1 = new NumberValueSetUtilities(
35 lowval1, low1util, highval, highutil);
36 private static final NumberValueSetUtilities valueset1b = new NumberValueSetUtilities(
37 lowval1, low1util, highval, highutil);
38 private static final NumberValueSetUtilities valueset2 = new NumberValueSetUtilities(
39 lowval1, low1utilb, highval, highutil);
40 private static final NumberValueSetUtilities valueset3 = new NumberValueSetUtilities(
41 lowval1, low1util, highvalb, highutil);
42 private static final BigDecimal ZERO_1 = new BigDecimal("0.1");
43 private final String utilstring = "{\"NumberValueSetUtilities\":{\"lowValue\":12.5,\"lowUtility\":0.5,\"highValue\":18.5,\"highUtility\":0.9}}";
44
45 private static final ObjectMapper jackson = new ObjectMapper();
46
47 @Override
48 public List<List<NumberValueSetUtilities>> getGeneralTestData() {
49 return Arrays.asList(Arrays.asList(valueset1, valueset1b),
50 Arrays.asList(valueset2), Arrays.asList(valueset3));
51 }
52
53 @Override
54 public List<String> getGeneralTestStrings() {
55 return Arrays.asList("NumberValueSetUtilities\\(12.5->0.5,18.5->0.9\\)",
56 "NumberValueSetUtilities\\(12.5->0.6,18.5->0.9\\)",
57 "NumberValueSetUtilities\\(12.5->0.5,18.4->0.9\\)");
58 }
59
60 @Test
61 public void smoketest() {
62 NumberValueSetUtilities utils = valueset1;
63 }
64
65 @Test
66 public void utilAscentingTest() {
67 NumberValueSetUtilities utils = valueset1;
68 assertEquals(0,
69 low1util.compareTo(utils.getUtility(new NumberValue(lowval1))));
70 }
71
72 @Test
73 public void utilDescendingTest() {
74 NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
75 highutil, highval, low1util);
76 assertEquals(0,
77 highutil.compareTo(utils.getUtility(new NumberValue(lowval1))));
78 }
79
80 @Test(expected = IllegalArgumentException.class)
81 public void reverserangetest() {
82 NumberValueSetUtilities utils = new NumberValueSetUtilities(highval,
83 low1util, highval, highutil);
84 }
85
86 @Test(expected = NullPointerException.class)
87 public void testNullHigh() {
88 NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
89 low1util, null, highutil);
90 }
91
92 @Test(expected = NullPointerException.class)
93 public void testNullHighUtil() {
94 NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
95 low1util, highval, null);
96 }
97
98 @Test(expected = NullPointerException.class)
99 public void testNullLow() {
100 NumberValueSetUtilities utils = new NumberValueSetUtilities(null,
101 low1util, highval, highutil);
102 }
103
104 @Test(expected = NullPointerException.class)
105 public void testNullLowUtil() {
106 NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
107 null, highval, highutil);
108 }
109
110 @Test(expected = IllegalArgumentException.class)
111 public void testLowUtilNegative() {
112 NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
113 new BigDecimal("-0.2"), highval, highutil);
114 }
115
116 @Test(expected = IllegalArgumentException.class)
117 public void testHighUtilNegative() {
118 NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
119 low1util, highval, new BigDecimal("-0.000003"));
120 }
121
122 @Test
123 public void getUtilTest() {
124 NumberValueSetUtilities utils = new NumberValueSetUtilities(lowval1,
125 low1util, highval, highutil);
126 assertEquals(0,
127 highutil.compareTo(utils.getUtility(new NumberValue(highval))));
128 assertEquals(0,
129 low1util.compareTo(utils.getUtility(new NumberValue(lowval1))));
130 // linear interpolated , check center
131 BigDecimal middleutil = low1util.add(highutil)
132 .divide(new BigDecimal("2"));
133 NumberValue middleval = new NumberValue(
134 lowval1.add(highval).divide(new BigDecimal("2")));
135 assertEquals(0, middleutil.compareTo(utils.getUtility(middleval)));
136
137 }
138
139 @Test
140 public void testIsNotFittingRange() {
141 ValueSet valueset = new NumberValueSet(
142 new Range(low1util, highutil, new BigDecimal("0.02")));
143 ValueSetUtilities utilset = new NumberValueSetUtilities(lowval1,
144 low1util, highval, highutil);
145 assertEquals(
146 "the utilities are specified down to 12.5 but the valueset starts at 0.5",
147 utilset.isFitting(valueset));
148 }
149
150 @Test
151 public void testTopOfRangeTooLarge() {
152 ValueSet valueset = new NumberValueSet(
153 new Range(lowval1, highval.subtract(ZERO_1), ZERO_1));
154 ValueSetUtilities utilset = new NumberValueSetUtilities(lowval1,
155 low1util, highval, highutil);
156 assertEquals(
157 "the utilities are specified up to 18.5 but the valueset ends at 18.4",
158 utilset.isFitting(valueset));
159 }
160
161 @Test
162 public void testIsFitting() {
163 ValueSet valueset = new NumberValueSet(
164 new Range(lowval1, highval, BigDecimal.ONE));
165 ValueSetUtilities utilset = new NumberValueSetUtilities(lowval1,
166 low1util, highval, highutil);
167 assertEquals(null, utilset.isFitting(valueset));
168 }
169
170 @Test
171 public void testIsFittingWrongType() {
172 DiscreteValue vala = new DiscreteValue("a");
173 DiscreteValue valb = new DiscreteValue("b");
174 ValueSet valueset = new DiscreteValueSet(Arrays.asList(vala, valb));
175
176 NumberValueSetUtilities utilset = new NumberValueSetUtilities(lowval1,
177 low1util, highval, highutil);
178 assertEquals(
179 "The utilities are for a number valueset but the given values are DiscreteValueSet[\"a\", \"b\"]",
180 utilset.isFitting(valueset));
181
182 }
183
184 @Test
185 public void testSerialize() throws JsonProcessingException {
186
187 String json = jackson.writeValueAsString(valueset1);
188 System.out.println(json);
189 assertEquals(utilstring, json);
190 }
191
192 @Test
193 public void testDeserialize()
194 throws JsonParseException, JsonMappingException, IOException {
195 ValueSetUtilities valueutils = jackson.readValue(utilstring,
196 ValueSetUtilities.class);
197 assertEquals(valueset1, valueutils);
198
199 }
200
201}
Note: See TracBrowser for help on using the repository browser.