package edu.neu.ccs.evergreen.ir;
import static org.junit.Assert.*;
import org.junit.Test;
public class RelationCoreMagicNumbersTest {
int maxRank = RelationCore.MaxRank;
@Test
public void testGetMagicNumber() {
for(int rank=1; rank <= maxRank; rank++){
int allOnes = RelationCore.getMask(rank);
for(int variablePosition=0; variablePosition<rank; variablePosition++){
int m0 = RelationCore.getMagicNumber(rank, variablePosition, 0);
int m1 = RelationCore.getMagicNumber(rank, variablePosition, 1);
int sum = m0+m1;
System.out.println("rank:"+rank+" vPos:"+variablePosition+" m0:"+m0+" m1:"+m1+" sum:"+sum+" AllOnes"+allOnes);
assertTrue(allOnes==sum);
}
System.out.println("================");
}
assertTrue(RelationCore.getMagicNumber(1, 0, 0)==0x1);
assertTrue(RelationCore.getMagicNumber(1, 0, 1)==0x2);
assertTrue(RelationCore.getMagicNumber(2, 0, 0)==0x5);
assertTrue(RelationCore.getMagicNumber(2, 0, 1)==0xA);
assertTrue(RelationCore.getMagicNumber(2, 1, 0)==0x3);
assertTrue(RelationCore.getMagicNumber(2, 1, 1)==0xC);
assertTrue(RelationCore.getMagicNumber(3, 0, 0)==0x55);
assertTrue(RelationCore.getMagicNumber(3, 0, 1)==0xAA);
assertTrue(RelationCore.getMagicNumber(3, 1, 0)==0x33);
assertTrue(RelationCore.getMagicNumber(3, 1, 1)==0xCC);
assertTrue(RelationCore.getMagicNumber(3, 2, 0)==0x0F);
assertTrue(RelationCore.getMagicNumber(3, 2, 1)==0xF0);
assertTrue(RelationCore.getMagicNumber(3, 0, 0)==85);
assertTrue(RelationCore.getMagicNumber(3, 0, 1)==170);
assertTrue(RelationCore.getMagicNumber(3, 1, 0)==51);
assertTrue(RelationCore.getMagicNumber(3, 1, 1)==204);
assertTrue(RelationCore.getMagicNumber(3, 2, 0)==15);
assertTrue(RelationCore.getMagicNumber(3, 2, 1)==240);
assertTrue(RelationCore.getMagicNumber(4, 0, 0)==0x5555);
assertTrue(RelationCore.getMagicNumber(4, 0, 1)==0xAAAA);
assertTrue(RelationCore.getMagicNumber(4, 1, 0)==0x3333);
assertTrue(RelationCore.getMagicNumber(4, 1, 1)==0xCCCC);
assertTrue(RelationCore.getMagicNumber(4, 2, 0)==0x0F0F);
assertTrue(RelationCore.getMagicNumber(4, 2, 1)==0xF0F0);
assertTrue(RelationCore.getMagicNumber(4, 3, 0)==0x00FF);
assertTrue(RelationCore.getMagicNumber(4, 3, 1)==0xFF00);
assertTrue(RelationCore.getMagicNumber(5, 0, 0)==0x55555555);
assertTrue(RelationCore.getMagicNumber(5, 0, 1)==0xAAAAAAAA);
assertTrue(RelationCore.getMagicNumber(5, 1, 0)==0x33333333);
assertTrue(RelationCore.getMagicNumber(5, 1, 1)==0xCCCCCCCC);
assertTrue(RelationCore.getMagicNumber(5, 2, 0)==0x0F0F0F0F);
assertTrue(RelationCore.getMagicNumber(5, 2, 1)==0xF0F0F0F0);
assertTrue(RelationCore.getMagicNumber(5, 3, 0)==0x00FF00FF);
assertTrue(RelationCore.getMagicNumber(5, 3, 1)==0xFF00FF00);
assertTrue(RelationCore.getMagicNumber(5, 4, 0)==0x0000FFFF);
assertTrue(RelationCore.getMagicNumber(5, 4, 1)==0xFFFF0000);
}
}