1 | package geniusweb.bidspace;
|
---|
2 |
|
---|
3 | import static org.junit.Assert.assertEquals;
|
---|
4 | import static org.mockito.Matchers.any;
|
---|
5 | import static org.mockito.Mockito.mock;
|
---|
6 | import static org.mockito.Mockito.when;
|
---|
7 |
|
---|
8 | import java.io.IOException;
|
---|
9 | import java.math.BigDecimal;
|
---|
10 | import java.math.BigInteger;
|
---|
11 | import java.nio.file.Files;
|
---|
12 | import java.nio.file.Paths;
|
---|
13 | import java.util.Collection;
|
---|
14 | import java.util.HashMap;
|
---|
15 | import java.util.LinkedList;
|
---|
16 | import java.util.Map;
|
---|
17 |
|
---|
18 | import org.junit.Before;
|
---|
19 | import org.junit.Test;
|
---|
20 |
|
---|
21 | import com.fasterxml.jackson.databind.ObjectMapper;
|
---|
22 |
|
---|
23 | import geniusweb.issuevalue.Bid;
|
---|
24 | import geniusweb.issuevalue.DiscreteValue;
|
---|
25 | import geniusweb.issuevalue.DiscreteValueSet;
|
---|
26 | import geniusweb.issuevalue.Domain;
|
---|
27 | import geniusweb.issuevalue.NumberValue;
|
---|
28 | import geniusweb.issuevalue.NumberValueSet;
|
---|
29 | import geniusweb.issuevalue.ValueSet;
|
---|
30 | import geniusweb.profile.Profile;
|
---|
31 | import geniusweb.profile.utilityspace.LinearAdditiveUtilitySpace;
|
---|
32 |
|
---|
33 | public class BidsWithUtilityTest {
|
---|
34 | private static final DiscreteValue I1V2 = new DiscreteValue("i1v2");
|
---|
35 | private static final DiscreteValue I1V1 = new DiscreteValue("i1v1");
|
---|
36 | private static final NumberValue I2V1 = new NumberValue("2.00");
|
---|
37 | private static final NumberValue I2V2 = new NumberValue("2.45");
|
---|
38 | private static final NumberValue I2V3 = new NumberValue("2.90");
|
---|
39 | private static final String DOMAINNAME = "testdomain";
|
---|
40 | private static final String ISSUE1 = "issue1";
|
---|
41 | private static final String ISSUE2 = "issue2";
|
---|
42 | private static final Map<String, ValueSet> issues = new HashMap<>();
|
---|
43 |
|
---|
44 | private static ValueSet values1;
|
---|
45 | private static ValueSet values2;
|
---|
46 | private static final BigDecimal TWO = new BigDecimal("2");
|
---|
47 | private static final BigDecimal THREE = new BigDecimal("3");
|
---|
48 | private final static BigDecimal ZERO_1 = new BigDecimal("0.1"), ZERO_2 = new BigDecimal("0.2"),
|
---|
49 | ZERO_3 = new BigDecimal("0.3");
|
---|
50 |
|
---|
51 | private static Domain domain;
|
---|
52 | private final static ObjectMapper jackson = new ObjectMapper();
|
---|
53 |
|
---|
54 | @Before
|
---|
55 | public void before() {
|
---|
56 | Collection<DiscreteValue> discretevalues1 = new LinkedList<>();
|
---|
57 | discretevalues1.add(I1V1);
|
---|
58 | discretevalues1.add(I1V2);
|
---|
59 | values1 = new DiscreteValueSet(discretevalues1);
|
---|
60 | issues.put(ISSUE1, values1);
|
---|
61 |
|
---|
62 | values2 = new NumberValueSet(TWO, THREE, new BigDecimal("0.45"));
|
---|
63 | issues.put(ISSUE2, values2);
|
---|
64 |
|
---|
65 | domain = new Domain(DOMAINNAME, issues);
|
---|
66 |
|
---|
67 | }
|
---|
68 |
|
---|
69 | @Test
|
---|
70 | public void smokeTest() {
|
---|
71 | LinearAdditiveUtilitySpace space = mock(LinearAdditiveUtilitySpace.class);
|
---|
72 | when(space.getDomain()).thenReturn(domain);
|
---|
73 | when(space.getUtility(any(Bid.class))).thenReturn(ZERO_2);
|
---|
74 | new BidsWithUtility(space, new BigDecimal("0.1"), new BigDecimal("0.3"));
|
---|
75 | }
|
---|
76 |
|
---|
77 | @Test
|
---|
78 | public void testSelection() {
|
---|
79 | LinearAdditiveUtilitySpace space = mock(LinearAdditiveUtilitySpace.class);
|
---|
80 |
|
---|
81 | when(space.getDomain()).thenReturn(domain);
|
---|
82 | when(space.getUtility(any(Bid.class))).thenReturn(ZERO_2);
|
---|
83 | BidsWithUtility selected = new BidsWithUtility(space, new BigDecimal("0.1"), new BigDecimal("0.3"));
|
---|
84 | assertEquals(new BigInteger("6"), selected.size());
|
---|
85 | }
|
---|
86 |
|
---|
87 | @Test
|
---|
88 | public void testRealSpace() throws IOException {
|
---|
89 | String file1 = new String(Files.readAllBytes(Paths.get("src/test/resources/jobs/jobs1.json")));
|
---|
90 | LinearAdditiveUtilitySpace profile = (LinearAdditiveUtilitySpace) jackson.readValue(file1, Profile.class);
|
---|
91 | BidsWithUtility selected = new BidsWithUtility(profile, ZERO_1, ZERO_3);
|
---|
92 |
|
---|
93 | assertEquals(new BigInteger("56"), selected.size());
|
---|
94 | for (Bid bid : selected) {
|
---|
95 | assertEquals(1, profile.getUtility(bid).compareTo(ZERO_1));
|
---|
96 | assertEquals(-1, profile.getUtility(bid).compareTo(ZERO_3));
|
---|
97 | }
|
---|
98 | }
|
---|
99 |
|
---|
100 | }
|
---|