You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jmeter-dev@jakarta.apache.org by se...@apache.org on 2004/02/18 01:26:59 UTC

cvs commit: jakarta-jmeter/src/jorphan/org/apache/jorphan/collections ListedHashTree.java

sebb        2004/02/17 16:26:59

  Modified:    src/jorphan/org/apache/jorphan/collections
                        ListedHashTree.java
  Log:
  Fix hashCode to take note of order; simplify equals()
  
  Revision  Changes    Path
  1.7       +103 -35   jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/ListedHashTree.java
  
  Index: ListedHashTree.java
  ===================================================================
  RCS file: /home/cvs/jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/ListedHashTree.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- ListedHashTree.java	11 Feb 2004 23:46:32 -0000	1.6
  +++ ListedHashTree.java	18 Feb 2004 00:26:58 -0000	1.7
  @@ -173,45 +173,53 @@
           return order.toArray();
       }
   
  +    // Make sure the hashCode depends on the order as well
       public int hashCode()
       {
  -        return data.hashCode() * 7 + 3;
  +    	int hc = 17;
  +		hc = hc * 37 + (order == null ? 0 : order.hashCode());
  +		hc = hc * 37 + super.hashCode();
  +        return hc;
       }
   
       public boolean equals(Object o)
       {
  -        boolean flag = true;
  -        if (o instanceof ListedHashTree)
  -        {
  -            ListedHashTree oo = (ListedHashTree) o;
  -            Iterator it = order.iterator();
  -            Iterator it2 = oo.order.iterator();
  -            if (size() != oo.size())
  -            {
  -                flag = false;
  -            }
  -            while (it.hasNext() && it2.hasNext() && flag)
  -            {
  -                if (!it.next().equals(it2.next()))
  -                {
  -                    flag = false;
  -                }
  -            }
  -            if (flag)
  -            {
  -                it = order.iterator();
  -                while (it.hasNext() && flag)
  -                {
  -                    Object temp = it.next();
  -                    flag = get(temp).equals(oo.get(temp));
  -                }
  -            }
  -        }
  -        else
  -        {
  -            flag = false;
  -        }
  -        return flag;
  +		if (!(o instanceof ListedHashTree)) return false;
  +		ListedHashTree lht = (ListedHashTree) o;
  +    	return (super.equals(lht) && order.equals(lht.order));
  +    	
  +//        boolean flag = true;
  +//        if (o instanceof ListedHashTree)
  +//        {
  +//            ListedHashTree oo = (ListedHashTree) o;
  +//            Iterator it = order.iterator();
  +//            Iterator it2 = oo.order.iterator();
  +//            if (size() != oo.size())
  +//            {
  +//                flag = false;
  +//            }
  +//            while (it.hasNext() && it2.hasNext() && flag)
  +//            {
  +//                if (!it.next().equals(it2.next()))
  +//                {
  +//                    flag = false;
  +//                }
  +//            }
  +//            if (flag)
  +//            {
  +//                it = order.iterator();
  +//                while (it.hasNext() && flag)
  +//                {
  +//                    Object temp = it.next();
  +//                    flag = get(temp).equals(oo.get(temp));
  +//                }
  +//            }
  +//        }
  +//        else
  +//        {
  +//            flag = false;
  +//        }
  +//        return flag;
       }
   
       public Set keySet()
  @@ -254,5 +262,65 @@
               assertEquals(tree.getTree("key").getArray()[0], "value");
               assertNotNull(tree.getTree("key").get("value"));
           }
  +        
  +		public void testEqualsAndHashCode() throws Exception
  +		{
  +			ListedHashTree tree1 = new ListedHashTree("abcd");
  +			ListedHashTree tree2 = new ListedHashTree("abcd");
  +			ListedHashTree tree3 = new ListedHashTree("abcde");
  +			ListedHashTree tree4 = new ListedHashTree("abcde");
  +			
  +			assertTrue(tree1.equals(tree1));
  +			assertTrue(tree1.equals(tree2));
  +			assertTrue(tree2.equals(tree1));
  +			assertTrue(tree2.equals(tree2));
  +			assertTrue(tree1.hashCode()==tree2.hashCode());
  +
  +			assertTrue(tree3.equals(tree3));
  +			assertTrue(tree3.equals(tree4));
  +			assertTrue(tree4.equals(tree3));
  +			assertTrue(tree4.equals(tree4));
  +			assertTrue(tree3.hashCode()==tree4.hashCode());
  +
  +			assertNotSame(tree1,tree2);
  +			assertNotSame(tree1,tree3);
  +			assertFalse(tree1.equals(tree3));
  +			assertFalse(tree3.equals(tree1));
  +			assertFalse(tree1.equals(tree4));
  +			assertFalse(tree4.equals(tree1));
  +
  +			assertFalse(tree2.equals(tree3));
  +			assertFalse(tree3.equals(tree2));
  +			assertFalse(tree2.equals(tree4));
  +			assertFalse(tree4.equals(tree2));
  +			
  +			tree1.add("abcd",tree3);
  +			assertFalse(tree1.equals(tree2));
  +			assertFalse(tree2.equals(tree1));
  +			
  +			tree2.add("abcd",tree4);
  +			assertTrue(tree1.equals(tree2));
  +			assertTrue(tree2.equals(tree1));
  +			assertTrue(tree1.hashCode()==tree2.hashCode());
  +			
  +			tree1.add("a1");
  +			tree1.add("a2");
  +			//tree1.add("a3");
  +			tree2.add("a2");
  +			tree2.add("a1");
  +
  +			assertFalse(tree1.equals(tree2));
  +			assertFalse(tree2.equals(tree1));
  +			if (tree1.hashCode()==tree2.hashCode())
  +			{
  +				//This is not a requirement
  +				System.out.println("WARN: unequal ListedHashTrees should not have equal hashcodes");
  +
  +			}
  +
  +			tree4.add("abcdef");
  +			assertFalse(tree3.equals(tree4));
  +			assertFalse(tree4.equals(tree3));
  +		}
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: jmeter-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: jmeter-dev-help@jakarta.apache.org