Straightened out TokenTuple equality and hash codes so token sets
authorjjenista <jjenista>
Thu, 26 Jun 2008 20:56:11 +0000 (20:56 +0000)
committerjjenista <jjenista>
Thu, 26 Jun 2008 20:56:11 +0000 (20:56 +0000)
work properly.

Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java
Robust/src/Analysis/OwnershipAnalysis/TokenTuple.java
Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java
Robust/src/Tests/OwnershipAnalysisTest/testTokens/Main.java [new file with mode: 0644]
Robust/src/Tests/OwnershipAnalysisTest/testTokens/makefile [new file with mode: 0644]

index 46c4c8f290e02c154d74a947454f0d96d747b4aa..45dd8407db4a242752288ad0587e4300cbb57046 100644 (file)
@@ -11,5 +11,5 @@ public class ReachabilitySet {
     public HashSet<TokenTupleSet> possibleReachabilities;
 
     
-
+    // this one has special union.
 }
\ No newline at end of file
index 2185f273f5aca9d44e37e19918f6a980548ac516..e9d3b400f1d2ba95d2b4c0bc4b039a5470d8ed9a 100644 (file)
@@ -41,9 +41,19 @@ public class TokenTuple
        }
     }
 
-    public boolean equals( TokenTuple tt ) {
+    public boolean equals( Object o ) {
+       if( !(o instanceof TokenTuple) ) {
+           return false;
+       }
+
+       TokenTuple tt = (TokenTuple) o;
+
        return token.equals( tt.getToken() ) &&
-              arity ==      tt.getArity();
+              arity ==      tt.getArity();
+    }
+
+    public int hashCode() {
+       return token.intValue();
     }
 
     public TokenTuple copy() {
@@ -51,4 +61,18 @@ public class TokenTuple
                               isNewSummary,
                               arity );
     }
+
+    public String toString() {
+       String s = "";
+       if( isNewSummary ) {
+           s = "sum";
+       }
+
+       String t = "1";
+       if( arity == ARITY_MANY ) {
+           t = "many";
+       }
+
+       return new String( "<"+token+s+", "+t+">" );
+    }
 }
index e07b615bd313b9305364d58514d9fbadae74cc06..3ff84e385a70942a8b792decdf6a74e2c9744599 100644 (file)
@@ -25,7 +25,16 @@ public class TokenTupleSet {
 
     public TokenTupleSet union( TokenTupleSet ttsIn ) {
        TokenTupleSet ttsOut = new TokenTupleSet( this );
-       ttsOut.tokenTuples.addAll( ttsIn.tokenTuples );
+       //ttsOut.tokenTuples.addAll( ttsIn.tokenTuples );
+       Iterator i = ttsIn.tokenTuples.iterator();
+       while( i.hasNext() ) {
+           ttsOut.tokenTuples.add( (TokenTuple) i.next() );
+       }
+
        return ttsOut;
     }
+
+    public String toString() {
+       return tokenTuples.toString();
+    }
 }
diff --git a/Robust/src/Tests/OwnershipAnalysisTest/testTokens/Main.java b/Robust/src/Tests/OwnershipAnalysisTest/testTokens/Main.java
new file mode 100644 (file)
index 0000000..b6a0508
--- /dev/null
@@ -0,0 +1,76 @@
+import IR.*;
+import IR.Flat.*;
+import Analysis.OwnershipAnalysis.*;
+import java.util.*;
+import java.io.*;
+
+
+public class Main {
+
+    protected static void test( String test,
+                               boolean expected,
+                               boolean result ) {
+
+       String outcome = "...\tFAILED";
+       if( expected == result ) {
+           outcome = "...\tpassed";
+       }
+       
+       System.out.println( test+" expected "+expected+outcome );
+    }
+
+    public static void main(String args[]) throws Exception {
+
+       // example test to know the testing routine is correct!
+       test( "4 == 5?", false, 4 == 5 );
+       test( "3 == 3?", true,  3 == 3 );
+
+
+       TokenTuple tt0 = new TokenTuple( new Integer( 1 ),
+                                        true,
+                                        TokenTuple.ARITY_ONE );
+
+       TokenTuple tt1 = tt0.copy();
+
+       TokenTuple tt2 = new TokenTuple( new Integer( 2 ),
+                                        true,
+                                        TokenTuple.ARITY_ONE );
+
+       TokenTuple tt3 = new TokenTuple( new Integer( 1 ),
+                                        true,
+                                        TokenTuple.ARITY_MANY );
+
+       test( "tt0 equals tt1?", true,  tt0.equals( tt1 ) );
+       test( "tt1 equals tt0?", true,  tt1.equals( tt0 ) );
+
+       test( "tt0 equals tt2?", false, tt0.equals( tt2 ) );
+       test( "tt2 equals tt0?", false, tt2.equals( tt0 ) );
+
+       test( "tt0 equals tt3?", false, tt0.equals( tt3 ) );
+       test( "tt3 equals tt0?", false, tt3.equals( tt0 ) );
+
+       test( "tt2 equals tt3?", false, tt2.equals( tt3 ) );
+       test( "tt3 equals tt2?", false, tt3.equals( tt2 ) );
+
+       tt1.increaseArity();
+
+       test( "tt1 equals tt2?", false, tt1.equals( tt2 ) );
+       test( "tt2 equals tt1?", false, tt2.equals( tt1 ) );
+
+       test( "tt1 equals tt3?", true,  tt1.equals( tt3 ) );
+       test( "tt3 equals tt1?", true,  tt3.equals( tt1 ) );
+       
+       
+       TokenTupleSet tts0 = new TokenTupleSet( tt0 );
+       TokenTupleSet tts1 = new TokenTupleSet( tt1 );
+       TokenTupleSet tts2 = new TokenTupleSet( tt2 );
+       TokenTupleSet tts3 = new TokenTupleSet( tt3 );
+       TokenTupleSet tts4 = tts1.union( tts3 );
+       TokenTupleSet tts5 = tts0.union( tts2 );
+       TokenTupleSet tts6 = tts1.union( tts1 );
+
+       System.out.println( "tts4 is "+tts4 );
+       System.out.println( "tts5 is "+tts5 );
+       System.out.println( "tts6 is "+tts6 );
+    }
+}
\ No newline at end of file
diff --git a/Robust/src/Tests/OwnershipAnalysisTest/testTokens/makefile b/Robust/src/Tests/OwnershipAnalysisTest/testTokens/makefile
new file mode 100644 (file)
index 0000000..a7b4901
--- /dev/null
@@ -0,0 +1,11 @@
+all: run
+
+Main.class: Main.java
+       javac -classpath ../../.. Main.java
+
+run: Main.class
+       java -classpath .:../../.. Main
+
+clean:
+       rm -f *~
+       rm -f *.class