package org.mapdb.tuple;
import org.junit.Test;
import org.mapdb.DB;
import org.mapdb.DBMaker;
import java.util.Set;
import java.util.concurrent.ConcurrentNavigableMap;
import java.util.concurrent.ConcurrentSkipListMap;
import static org.junit.Assert.*;
import static org.mapdb.tuple.Tuple.*;
@SuppressWarnings({ "unchecked", "rawtypes" })
public class TupleTest {
public int compare(int[] o1, int[] o2) {
for(int i = 0;i<o1.length;i++){
if(o1[i]<o2[i]) return -1;
if(o1[i]>o2[i]) return 1;
}
return 0;
}
final Object[] vals = new Object[]{null, "A", "B", "C", HI};
@Test public void t2_equals(){
assertEquals(new Tuple2("A","B"), new Tuple2("A","B"));
assertEquals(new Tuple2("A",null), new Tuple2("A",null));
assertEquals(new Tuple2("A",HI), new Tuple2("A",HI));
assertEquals(new Tuple2(null,HI), new Tuple2(null,HI));
assertFalse(new Tuple2("A",HI).equals(new Tuple2("A", null)));
assertFalse(new Tuple2("A","B").equals(new Tuple2("A","C")));
}
@Test public void t2_compare(){
for(int a=0;a<vals.length;a++){
for(int b=0;b<vals.length;b++){
for(int c=0;c<vals.length;c++){
for(int d=0;d<vals.length;d++){
Tuple2 t1 = new Tuple2(vals[a], vals[b]);
Tuple2 t2 = new Tuple2(vals[c], vals[d]);
int i = t1.compareTo(t2);
//System.out.println(t1 + " - "+t2 + " - "+i);
if(a==b && c==d && a==c)
assertEquals(0, i);
if(a<c || (a==c && b<d))
assertTrue(i<0);
if(a>c || (a==c && b>d))
assertTrue(i>0);
}
}
}
}
}
@Test public void t3_compare(){
for(int a1=0;a1<vals.length;a1++){
for(int a2=0;a2<vals.length;a2++){
for(int a3=0;a3<vals.length;a3++){
for(int b1=0;b1<vals.length;b1++){
for(int b2=0;b2<vals.length;b2++){
for(int b3=0;b3<vals.length;b3++){
Tuple3 a = new Tuple3(vals[a1], vals[a2], vals[a3]);
Tuple3 b = new Tuple3(vals[b1], vals[b2], vals[b3]);
int i = a.compareTo(b);
int i0 = -b.compareTo(a);
//System.out.println(a + " - "+ b + " - "+i);
int i2 = compare(new int[]{a1,a2,a3}, new int[]{b1,b2,b3});
assertEquals(Math.signum(i), Math.signum(i2),1e-10);
assertEquals(Math.signum(i0), Math.signum(i2),1e-10);
}
}
}
}
}
}
}
@Test public void t4_compare(){
for(int a1=0;a1<vals.length;a1++){
for(int a2=0;a2<vals.length;a2++){
for(int a3=0;a3<vals.length;a3++){
for(int a4=0;a4<vals.length;a4++){
for(int b1=0;b1<vals.length;b1++){
for(int b2=0;b2<vals.length;b2++){
for(int b3=0;b3<vals.length;b3++){
for(int b4=0;b4<vals.length;b4++){
Tuple4 a = new Tuple4(vals[a1], vals[a2], vals[a3], vals[a4]);
Tuple4 b = new Tuple4(vals[b1], vals[b2], vals[b3], vals[b4]);
int i = a.compareTo(b);
int i0 = -b.compareTo(a);
//System.out.println(a + " - "+ b + " - "+i);
int i2 = compare(new int[]{a1,a2,a3,a4}, new int[]{b1,b2,b3,b4});
assertEquals(Math.signum(i), Math.signum(i2),1e-10);
assertEquals(Math.signum(i0), Math.signum(i2),1e-10);
}
}
}
}
}
}}
}
}
@Test public void t5_compare(){
for(int a1=0;a1<vals.length;a1++){
for(int a2=0;a2<vals.length;a2++){
for(int a3=0;a3<vals.length;a3++){
for(int a4=0;a4<vals.length;a4++){
for(int a5=0;a5<vals.length;a5++){
for(int b1=0;b1<vals.length;b1++){
for(int b2=0;b2<vals.length;b2++){
for(int b3=0;b3<vals.length;b3++){
for(int b4=0;b4<vals.length;b4++){
for(int b5=0;b5<vals.length;b5++){
Tuple5 a = new Tuple5(vals[a1], vals[a2], vals[a3], vals[a4], vals[a5]);
Tuple5 b = new Tuple5(vals[b1], vals[b2], vals[b3], vals[b4], vals[b5]);
int i = a.compareTo(b);
int i0 = -b.compareTo(a);
//System.out.println(a + " - "+ b + " - "+i);
int i2 = compare(new int[]{a1,a2,a3,a4,a5}, new int[]{b1,b2,b3,b4,b5});
assertEquals(Math.signum(i), Math.signum(i2),1e-10);
assertEquals(Math.signum(i0), Math.signum(i2),1e-10);
}
}
}
}
}
}
}
}
}
}
}
@Test public void t6_compare(){
for(int a1=0;a1<vals.length;a1++){
for(int a2=0;a2<vals.length;a2++){
for(int a3=0;a3<vals.length;a3++){
for(int a4=0;a4<vals.length;a4++){
for(int a5=0;a5<vals.length;a5++){
for(int a6=0;a6<vals.length;a6++){
for(int b1=0;b1<vals.length;b1++){
for(int b2=0;b2<vals.length;b2++){
for(int b3=0;b3<vals.length;b3++){
for(int b4=0;b4<vals.length;b4++){
for(int b5=0;b5<vals.length;b5++){
for(int b6=0;b6<vals.length;b6++){
Tuple6 a = new Tuple6(vals[a1], vals[a2], vals[a3], vals[a4], vals[a5], vals[a6]);
Tuple6 b = new Tuple6(vals[b1], vals[b2], vals[b3], vals[b4], vals[b5], vals[b6]);
int i = a.compareTo(b);
int i0 = -b.compareTo(a);
//System.out.println(a + " - "+ b + " - "+i);
int i2 = compare(new int[]{a1,a2,a3,a4,a5,a6}, new int[]{b1,b2,b3,b4,b5,b6});
assertEquals(Math.signum(i), Math.signum(i2),1e-10);
assertEquals(Math.signum(i0), Math.signum(i2),1e-10);
}
}
}
}
}
}
}
}
}
}
}
}
}
@Test public void lo_hi(){
assertTrue(t2("A",null).compareTo(t2("A",HI))<0);
assertTrue(t3("A", null, null).compareTo(t3("A", HI, null))<0);
assertTrue(t4("A", null, null, null).compareTo(t4("A", HI, null, null))<0);
assertTrue(t5("A", null, null, null, null).compareTo(t5("A", HI, null, null, null))<0);
assertTrue(t6("A", null, null, null, null, null).compareTo(t6("A", HI, null, null, null, null))<0);
}
@Test public void testSubMap(){
int nums[] = {1,2,3,4,5};
ConcurrentNavigableMap m = new ConcurrentSkipListMap();
for(int a:nums) for(int b:nums){
m.put(t2(a,b),"");
}
assertEquals(5, m.subMap(t2(3, null), t2(3,HI)).size());
assertEquals(3, m.subMap(t2(3, 3), t2(3,HI)).size());
assertEquals(10, m.headMap(t2(3, null)).size());
assertEquals(15, m.tailMap(t2(3, null)).size());
assertEquals(10, m.headMap(t2(2, HI)).size());
assertEquals(15, m.tailMap(t2(2, HI)).size());
}
@Test public void null_set(){
DB db = DBMaker.memoryDB().make();
Set set = (Set)db.treeSet("aa", new Tuple2Serializer()).create();
set.add(Tuple.t2("aa",11));
assertEquals(1, set.size());
}
}