import edu.neu.ccs.evergreen.ir.Relation; /** * Displays tables of information generated from the relation class. */ public class RelationDisplay { /** * Entry point for program. * @param args Ignored */ public static void main(String args[]) { reduce(); rank(); counts(); forced(); example(); } /** * Display reductions for all relations. */ public static void reduce() { System.out.println("Rel:\tX2=0\tX2=1\tX1=0\tX1=1\tX0=0\tX0=1"); for (int relationNumber = 0; relationNumber < 256; relationNumber++) { System.out.print("" + relationNumber + ":"); for (int variablePosition = 2; variablePosition >= 0; variablePosition--) { for (int value = 0; value <= 1; value++) { int newR = Relation.reduce(relationNumber, variablePosition, value); System.out.print("\t" + newR); } } System.out.println(""); } } /** * Display rank information for all relations. */ public static void rank() { int[] ranks = new int[4]; for (int relationNumber = 0; relationNumber < 256; relationNumber++) { ranks[Relation.variableCount(relationNumber)]++; } for (int rank = 0; rank <= 3; rank++) { System.out.println("There are " + ranks[rank] + " Relations of Rank " + rank); } } /** * Display true row counts for all relations. */ public static void counts() { System.out.println("ones in R: q0 q1 q2 q3"); for (int relationNumber = 0; relationNumber < 256; relationNumber++) { int q0 = Relation.containsRowCount(relationNumber, 0); int q1 = Relation.containsRowCount(relationNumber, 1); int q2 = Relation.containsRowCount(relationNumber, 2); int q3 = Relation.containsRowCount(relationNumber, 3); System.out.println("ones in " + relationNumber + "= " + q0 + " " + q1 + " " + q2 + " " + q3); } } /** * Display forced values for all relations. */ public static void forced() { int forced0 = 0; int forced1 = 0; for (int relationNumber = 0; relationNumber < 256; relationNumber++) { System.out.println("Relation # " + relationNumber + " of Rank " + Relation.variableCount(relationNumber) + " with " + Relation.satisfyingRowCount(relationNumber) + " Ones"); for (int variablePosition = 0; variablePosition < 3; variablePosition++) { int forced = Relation.forcedValue(relationNumber, variablePosition); if (((forced == 0) || (forced == 1))) { System.out.println("\t Variable Number " + variablePosition + " is forced to " + forced); if (forced == 0) { forced0++; } else { forced1++; } } } } System.out.println("There are " + forced0 + " Variables forced to 0"); System.out.println("There are " + forced1 + " Variables forced to 1"); } /** * Display a sample reduction. */ public static void example() { int relationNumber = 22; int value = 1; for (int variablePosition = 0; variablePosition < 3; variablePosition++) { int reducedRelationNumber = Relation.reduce(relationNumber, variablePosition, value); System.out.println("Reducing relation # " + relationNumber + " Variable position " + variablePosition + " to value: " + value + " We get: " + reducedRelationNumber); for (int reducedVariablePosition = 0; reducedVariablePosition < 3; reducedVariablePosition++) { if (reducedVariablePosition != variablePosition) { int forcedValue = Relation.forcedValue( reducedRelationNumber, reducedVariablePosition); if (forcedValue != -1) { System.out.println("Variable position " + reducedVariablePosition + " Becomes forced to: " + forcedValue); } } } } } }