package edu.neu.ccs.evergreen.ir;
import static org.junit.Assert.*;
import org.junit.Test;
public class RelationCoreNmapTest {
int maxRank = RelationCore.MaxRank;
@Test
public final void testNMap() {
for(int rank=1;rank<maxRank;rank++){
for(int variablePosition=0;variablePosition<rank;variablePosition++){
for(int value=0;value<=1;value++){
int relationNumber = RelationCore.getMagicNumber(rank, variablePosition, value);
int nMappedRelationNumber = RelationCore.nMap(relationNumber, rank, variablePosition);
int mask = RelationCore.getMask(rank);
assertTrue((mask-nMappedRelationNumber)==relationNumber);
}
}
}
for(int rank=1;rank<maxRank;rank++){
if(RelationCore.getMask(rank)>0){
for(int relationNumber=0;relationNumber<RelationCore.getMask(rank);relationNumber++){
for(int variablePosition=0;variablePosition<rank;variablePosition++){
int nMappedRelationNumber = RelationCore.nMap(relationNumber, rank, variablePosition);
int originalRelationNumber = RelationCore.nMap(nMappedRelationNumber, rank, variablePosition);
assertTrue(relationNumber==originalRelationNumber);
}
}
}else{
for(int relationNumber=0xFFFFFFFF;relationNumber<0x7FFFFFFE;relationNumber++){
for(int variablePosition=0;variablePosition<rank;variablePosition++){
int nMappedRelationNumber = RelationCore.nMap(relationNumber, rank, variablePosition);
int originalRelationNumber = RelationCore.nMap(nMappedRelationNumber, rank, variablePosition);
assertTrue(relationNumber==originalRelationNumber);
}
}
for(int variablePosition=0;variablePosition<rank;variablePosition++){
int relationNumber = 0x7FFFFFFF;
int nMappedRelationNumber = RelationCore.nMap(relationNumber, rank, variablePosition);
int originalRelationNumber = RelationCore.nMap(nMappedRelationNumber, rank, variablePosition);
assertTrue(relationNumber==originalRelationNumber);
}
}
}
}
}