package com.linkedin.thirdeye.api;
import org.testng.Assert;
import org.testng.annotations.Test;
public class DimensionMapTest {
@Test
public void testCreate() {
DimensionMap dimensionOrg = new DimensionMap();
dimensionOrg.put("K1", "V1");
dimensionOrg.put("K2", "V2");
String jsonString = dimensionOrg.toString();
DimensionMap dimensionClone1 = new DimensionMap(jsonString);
Assert.assertEquals(dimensionClone1, dimensionOrg);
DimensionMap dimensionClone2 = new DimensionMap("{K1=V1,K2=V2}");
Assert.assertEquals(dimensionClone2, dimensionOrg);
}
@Test
public void testComparison() {
DimensionMap d1;
DimensionMap d2;
// Case 1: a={}, b={"K"="V"} --> a="", b="KV" --> a < b
d1 = new DimensionMap();
d2 = new DimensionMap();
d2.put("K", "V");
Assert.assertEquals(d1.compareTo(d2) < 0, "".compareTo("KV") < 0);
Assert.assertEquals(d2.compareTo(d1) > 0, "KV".compareTo("") > 0);
// Case 2: a={"K"="V"}, b={"K"="V"} --> a="KV", b="KV" --> a = b
d1 = new DimensionMap();
d2 = new DimensionMap();
d1.put("K", "V");
d2.put("K", "V");
Assert.assertEquals(d1.compareTo(d2) == 0, "KV".compareTo("KV") == 0);
Assert.assertEquals(d2.compareTo(d1) == 0, "KV".compareTo("KV") == 0);
// Case 3: a={"K2"="V1"}, b={"K1"="V1","K2"="V2"} --> a="K2V1", b="K1V1K2V2" --> a > b
d1 = new DimensionMap();
d2 = new DimensionMap();
d1.put("K2", "V1");
d2.put("K1", "V1");
d2.put("K2", "V2");
Assert.assertEquals(d1.compareTo(d2) > 0, "K2V1".compareTo("K1V1K2V2") > 0);
Assert.assertEquals(d2.compareTo(d1) < 0, "K1V1K2V2".compareTo("K2V1") < 0);
// Case 4: a={"K1"="V1"}, b={"K1"="V1","K2"="V2"} --> a="K1V1", b="K1V1K2V2" --> a < b
d1 = new DimensionMap();
d2 = new DimensionMap();
d1.put("K1", "V1");
d2.put("K1", "V1");
d2.put("K2", "V2");
Assert.assertEquals(d1.compareTo(d2) < 0, "K1V1".compareTo("K1V1K2V2") < 0);
Assert.assertEquals(d2.compareTo(d1) > 0, "K1V1K2V2".compareTo("K1V1") > 0);
}
@Test
public void testEqualsOrIsChild() {
DimensionMap d1;
DimensionMap d2;
// Case 1: a={}, b={"K"="V"} --> a is parent of b
d1 = new DimensionMap();
d2 = new DimensionMap();
d2.put("K", "V");
Assert.assertFalse(d1.equalsOrChildOf(d2));
Assert.assertTrue(d2.equalsOrChildOf(d1));
// Case 2: a={"K"="V"}, b={"K"="V"} --> a and b are sibling or self
d1 = new DimensionMap();
d2 = new DimensionMap();
d1.put("K", "V1");
d2.put("K", "V2");
Assert.assertFalse(d1.equalsOrChildOf(d2));
Assert.assertFalse(d2.equalsOrChildOf(d1));
// Case 3: a={"K2"="V1"}, b={"K1"="V1","K2"="V2"} --> a and b does not have any relation
d1 = new DimensionMap();
d2 = new DimensionMap();
d1.put("K2", "V1");
d2.put("K1", "V1");
d2.put("K2", "V2");
Assert.assertFalse(d1.equalsOrChildOf(d2));
Assert.assertFalse(d2.equalsOrChildOf(d1));
// Case 4: a=null, b={"K"="V"} --> a is universal parent
d2 = new DimensionMap();
Assert.assertTrue(d2.equalsOrChildOf(null));
}
}