From 955b5ef7e31126873b8d08cadccfc0e356b77394 Mon Sep 17 00:00:00 2001 From: jjenista Date: Thu, 26 Jun 2008 20:56:11 +0000 Subject: [PATCH] Straightened out TokenTuple equality and hash codes so token sets work properly. --- .../OwnershipAnalysis/ReachabilitySet.java | 2 +- .../OwnershipAnalysis/TokenTuple.java | 28 ++++++- .../OwnershipAnalysis/TokenTupleSet.java | 11 ++- .../testTokens/Main.java | 76 +++++++++++++++++++ .../OwnershipAnalysisTest/testTokens/makefile | 11 +++ 5 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 Robust/src/Tests/OwnershipAnalysisTest/testTokens/Main.java create mode 100644 Robust/src/Tests/OwnershipAnalysisTest/testTokens/makefile diff --git a/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java b/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java index 46c4c8f2..45dd8407 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java +++ b/Robust/src/Analysis/OwnershipAnalysis/ReachabilitySet.java @@ -11,5 +11,5 @@ public class ReachabilitySet { public HashSet possibleReachabilities; - + // this one has special union. } \ No newline at end of file diff --git a/Robust/src/Analysis/OwnershipAnalysis/TokenTuple.java b/Robust/src/Analysis/OwnershipAnalysis/TokenTuple.java index 2185f273..e9d3b400 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/TokenTuple.java +++ b/Robust/src/Analysis/OwnershipAnalysis/TokenTuple.java @@ -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+">" ); + } } diff --git a/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java b/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java index e07b615b..3ff84e38 100644 --- a/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java +++ b/Robust/src/Analysis/OwnershipAnalysis/TokenTupleSet.java @@ -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 index 00000000..b6a05089 --- /dev/null +++ b/Robust/src/Tests/OwnershipAnalysisTest/testTokens/Main.java @@ -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 index 00000000..a7b49017 --- /dev/null +++ b/Robust/src/Tests/OwnershipAnalysisTest/testTokens/makefile @@ -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 -- 2.34.1