package geniusweb.profile; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import java.io.IOException; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.junit.Before; import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; import geniusweb.issuevalue.Bid; import geniusweb.issuevalue.DiscreteValue; import geniusweb.issuevalue.DiscreteValueSet; import geniusweb.issuevalue.Domain; import geniusweb.issuevalue.ValueSet; import tudelft.utilities.junit.GeneralTests; public class DefaultPartialOrderingTest extends GeneralTests { private final String serialized = "{\"DefaultPartialOrdering\":{" + "\"name\":\"ordering1\"," + "\"domain\":{\"name\":\"dom1\",\"issuesValues\":{\"iss1\":{\"values\":[\"1\",\"2\",\"3\"]}}}," + "\"reservationBid\":{\"issuevalues\":{\"iss1\":\"1\"}}," + "\"bids\":[{\"issuevalues\":{\"iss1\":\"1\"}},{\"issuevalues\":{\"iss1\":\"3\"}},{\"issuevalues\":{\"iss1\":\"2\"}}]," + "\"better\":[[0,2],[1,2]]}}"; // we need real (not mock) values otherwise serializer crashes.. private String issue1 = "iss1"; private DefaultPartialOrdering ordering1, ordering1b, ordering2, ordering3, ordering4, ordering5; private Bid bid1, bid2, bid3; @Before public void before() { Map issues = new HashMap<>(); DiscreteValue val1 = new DiscreteValue("1"); DiscreteValue val2 = new DiscreteValue("2"); DiscreteValue val3 = new DiscreteValue("3"); issues.put(issue1, new DiscreteValueSet(new HashSet<>(Arrays.asList(val1, val2, val3)))); Domain domain1 = new Domain("dom1", issues); Domain domain2 = new Domain("dom2", issues); bid1 = new Bid(Collections.singletonMap(issue1, val1)); bid2 = new Bid(Collections.singletonMap(issue1, val2)); bid3 = new Bid(Collections.singletonMap(issue1, val3)); Map> map1 = new HashMap<>(); map1.put(bid1, new HashSet(Arrays.asList(bid2))); map1.put(bid3, new HashSet(Arrays.asList(bid2))); Map> map2 = new HashMap<>(); map2.put(bid1, new HashSet(Arrays.asList(bid2))); map2.put(bid3, new HashSet(Arrays.asList(bid1))); ordering1 = new DefaultPartialOrdering("ordering1", domain1, bid1, map1); ordering1b = new DefaultPartialOrdering("ordering1", domain1, bid1, map1); ordering2 = new DefaultPartialOrdering("ordering2", domain1, bid1, map1); ordering3 = new DefaultPartialOrdering("ordering1", domain2, bid1, map1); ordering4 = new DefaultPartialOrdering("ordering1", domain1, bid2, map1); ordering5 = new DefaultPartialOrdering("ordering1", domain1, bid1, map2); } @Override public List> getGeneralTestData() { return Arrays.asList(Arrays.asList(ordering1, ordering1b), Arrays.asList(ordering2), Arrays.asList(ordering3), Arrays.asList(ordering4), Arrays.asList(ordering5)); } @Override public List getGeneralTestStrings() { return Arrays.asList("DefaultPartialOrdering.*", "DefaultPartialOrdering.*", "DefaultPartialOrdering.*", "DefaultPartialOrdering.*", "DefaultPartialOrdering.*"); } @Test public void testSerialize() throws JsonProcessingException { ObjectMapper jackson = new ObjectMapper(); assertEquals(serialized, jackson.writeValueAsString(ordering1)); System.out.println(serialized); } @Test public void testDeserialize() throws IOException { ObjectMapper jackson = new ObjectMapper(); assertEquals(ordering1, jackson.readValue(serialized, Profile.class)); } @Test public void testIsBetter() { assertTrue(ordering1.isPreferredOrEqual(bid1, bid2)); assertFalse(ordering1.isPreferredOrEqual(bid1, bid3)); assertFalse(ordering1.isPreferredOrEqual(bid2, bid3)); } }