/**
 * 
 */
package edu.neu.ccs.evergreen.ir;

import static org.junit.Assert.*;

import org.junit.Test;

/**
 * @author mohsen
 *
 */
public class RelationCoreOnesQTest {

    int maxRank = RelationCore.MaxRank;
    /**
     * Test method for {@link edu.neu.ccs.evergreen.ir.RelationCore#ones(int, int)}.
     */
    @Test
    public final void testOnes() {
        for(int rank=1;rank<maxRank;rank++){
            for (int i = 0; i <=(1<<rank); i++) {
                int r=0;
                for(int j=0;j<i;j++){
                    r|=(1<<j);
                }
                assertTrue(i==RelationCore.ones(r, rank));
            }
        }
    }

    /**
     * Test method for {@link edu.neu.ccs.evergreen.ir.RelationCore#q(int, int, int)}.
     */
    @Test
    public final void testQ() {
        for (int rank = 1; rank < maxRank; rank++) {
            for (int i = 0; i <= rank; i++) {
                int relationNumber = RelationNumberUtil.xTrueVars(rank, i);
                for(int j=0;j<=rank;j++){
                    int qs = RelationCore.q(relationNumber, rank, j);
                    if(i==j){
                        assertTrue(qs!=0);
                        assertTrue(qs==RelationCore.ones(relationNumber, rank));
                    }else{
                        assertTrue(qs==0);
                    }
                }
            }
        }
    }

}