source: profile/src/test/java/geniusweb/profile/utilityspace/LinearAdditiveSerializationTest.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.4 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.HashMap;
9import java.util.Map;
10
11import org.junit.Before;
12import org.junit.Test;
13
14import com.fasterxml.jackson.core.JsonProcessingException;
15import com.fasterxml.jackson.databind.ObjectMapper;
16import com.fasterxml.jackson.databind.exc.ValueInstantiationException;
17
18import geniusweb.issuevalue.Bid;
19import geniusweb.issuevalue.DiscreteValue;
20import geniusweb.issuevalue.DiscreteValueSet;
21import geniusweb.issuevalue.Domain;
22import geniusweb.issuevalue.NumberValue;
23import geniusweb.issuevalue.NumberValueSet;
24import geniusweb.issuevalue.Value;
25import geniusweb.issuevalue.ValueSet;
26import geniusweb.profile.Profile;
27
28public class LinearAdditiveSerializationTest {
29
30 private static final BigDecimal VAL2 = new BigDecimal("0.2");
31 private static final BigDecimal VAL3 = new BigDecimal("0.3");
32 private static final BigDecimal VAL4 = new BigDecimal("0.4");
33 private static final BigDecimal VAL6 = new BigDecimal("0.6");
34 private Map<String, ValueSetUtilities> utils = new HashMap<>();
35 private Map<String, BigDecimal> weights = new HashMap<>();
36 private static final String ISS1 = "issue1";
37 private static final String ISS2 = "issue2";
38 private DiscreteValue i1v1 = new DiscreteValue("issue1value1");
39 private DiscreteValue i1v2 = new DiscreteValue("issue1value2");
40 private NumberValue i2v1 = new NumberValue("15");
41 private NumberValue i2v2 = new NumberValue("16");
42 private Domain domain;
43
44 private Map<DiscreteValue, BigDecimal> value1UtilsMap = new HashMap<>();
45 private DiscreteValueSetUtilities value;
46 private BigDecimal TWELVE = new BigDecimal("12");
47 private BigDecimal EIGHTEEN = new BigDecimal("18");
48 private static final ObjectMapper jackson = new ObjectMapper();
49
50 private LinearAdditiveUtilitySpace space;
51
52 private String serialized = "{\"LinearAdditiveUtilitySpace\":{\"domain\":{\"name\":\"test\",\"issuesValues\":{\"issue2\":{\"range\":{\"low\":12,\"high\":18,\"step\":1}},\"issue1\":{\"values\":[\"issue1value1\",\"issue1value2\"]}}},\"name\":\"testprofile\",\"issueUtilities\":{\"issue2\":{\"NumberValueSetUtilities\":{\"lowValue\":12,\"lowUtility\":0.3,\"highValue\":18,\"highUtility\":0.6}},\"issue1\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"issue1value1\":0.2,\"issue1value2\":0.3}}}},\"issueWeights\":{\"issue2\":0.4,\"issue1\":0.6},\"reservationBid\":{\"issuevalues\":{\"issue2\":15,\"issue1\":\"issue1value2\"}}}}";
53
54 private String jobsjson = "{\"LinearAdditiveUtilitySpace\":{\"issueUtilities\":{"
55 + "\"lease car\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"no\":0,\"yes\":1}}},"
56 + "\"permanent contract\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"no\":0,\"yes\":1}}},"
57 + "\"career development opportunities\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"high\":1,\"low\":0,\"medium\":0.5}}},"
58 + "\"fte\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"1.0\":0.75,\"0.6\":0.25,\"0.8\":0.5}}},"
59 + "\"salary\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"4000\":1.0,\"2500\":0.25,\"3500\":0.75,\"2000\":0,\"3000\":0.3}}},"
60 + "\"work from home\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"1\":0.5,\"2\":0.666666666666,\"0\":0.333333333}}}},"
61 + "\"issueWeights\":{\"lease car\":0.06,\"permanent contract\":0.16,"
62 + "\"career development opportunities\":0.04,\"fte\":0.32,\"salary\":0.24,\"work from home\":0.18},"
63 + "\"domain\":{\"name\":\"jobs\",\"issuesValues\":{\"lease car\":{\"values\":[\"yes\",\"no\"]},\"permanent contract\":{\"values\":[\"yes\",\"no\"]},\"career development opportunities\":{\"values\":[\"low\",\"medium\",\"high\"]},\"fte\":{\"values\":[\"0.6\",\"0.8\",\"1.0\"]},\"salary\":{\"values\":[\"2000\",\"2500\",\"3000\",\"3500\",\"4000\"]},\"work from home\":{\"values\":[\"0\",\"1\",\"2\"]}}},\"name\":\"jobs1\"}}";
64 /**
65 * this domain has issues3 instead of issue2 in the domain description, but
66 * the profile is unchanged. Therefore the domain and profile don't match
67 */
68 private String serializedWrongIssues = "{\"LinearAdditiveUtilitySpace\":{"
69 + "\"domain\":{\"name\":\"test\","
70 + "\"issuesValues\":{\"issue2\":{\"values\":[\"issue2value1\",\"issue2value2\"]},"
71 + "\"issue3\":{\"values\":[\"issue1value1\",\"issue1value2\"]}}},"
72 + "\"name\":\"testprofile\"," + "\"issueUtilities\":"
73 + "{\"issue2\":{\"NumberValueSetUtilities\":{\"lowValue\":12,\"lowUtility\":0.3,\"highValue\":18,\"highUtility\":0.6}},"
74 + "\"issue1\":{\"DiscreteValueSetUtilities\":{\"valueUtilities\":{\"issue1value1\":0.2,\"issue1value2\":0.3}}}},"
75 + "\"issueWeights\":{\"issue2\":0.4,\"issue1\":0.6},"
76 + "\"reservationBid\":{\"issuevalues\":{\"issue2\":\"issue2value1\",\"issue1\":\"issue1value2\"}}"
77 + "}" + "}";
78
79 @Before
80 public void before() {
81 value1UtilsMap.put(i1v1, VAL2);
82 value1UtilsMap.put(i1v2, VAL3);
83 DiscreteValueSetUtilities val1utils = new DiscreteValueSetUtilities(
84 value1UtilsMap);
85 NumberValueSetUtilities val2utils = new NumberValueSetUtilities(TWELVE,
86 VAL3, EIGHTEEN, VAL6);
87
88 Map<String, ValueSet> values = new HashMap<>();
89 values.put(ISS1, new DiscreteValueSet(Arrays.asList(i1v1, i1v2)));
90 values.put(ISS2, new NumberValueSet(TWELVE, EIGHTEEN, BigDecimal.ONE));
91 domain = new Domain("test", values);
92
93 utils.put(ISS1, val1utils);
94 utils.put(ISS2, val2utils);
95 weights.put(ISS1, VAL6);
96 weights.put(ISS2, VAL4);
97
98 Map<String, Value> issuevalues = new HashMap<>();
99 issuevalues.put(ISS1, i1v2);
100 issuevalues.put(ISS2, i2v1);
101 Bid reservationBid = new Bid(issuevalues);
102
103 space = new LinearAdditiveUtilitySpace(domain, "testprofile", utils,
104 weights, reservationBid);
105 }
106
107 @Test
108 public void testSerialize() throws JsonProcessingException {
109 String string = jackson.writeValueAsString(space);
110 System.out.println(string);
111 assertEquals(serialized, string);
112 }
113
114 @Test
115 public void testDeserialize() throws IOException {
116 assertEquals(space, jackson.readValue(serialized, Profile.class));
117 }
118
119 @Test(expected = ValueInstantiationException.class)
120 public void testDeserializeWrongIssues() throws IOException {
121 jackson.readValue(serializedWrongIssues, Profile.class);
122 }
123
124 @Test
125 public void testDeserializeFromValue() throws IOException {
126 assertEquals(space, jackson.readValue(serialized, Profile.class));
127 }
128
129 @Test
130 public void testDeserializeJobs() throws IOException {
131 Profile jobs = jackson.readValue(jobsjson, Profile.class);
132 }
133
134}
Note: See TracBrowser for help on using the repository browser.