sebb        2004/02/17 16:10:04

  Modified:    src/jorphan/org/apache/jorphan/collections HashTree.java
  Log:
  Added equals() and hashCode() tests;

  Fixed symmetry bug in equals () - did not detect extra keys in target Object

  Now uses Map.equals()
  
  Revision  Changes    Path
  1.12      +90 -35    
jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/HashTree.java
  
  Index: HashTree.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-jmeter/src/jorphan/org/apache/jorphan/collections/HashTree.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- HashTree.java     14 Feb 2004 20:01:33 -0000      1.11
  +++ HashTree.java     18 Feb 2004 00:10:04 -0000      1.12
  @@ -864,43 +864,49 @@
        * Compares all objects in the tree and verifies that the two trees contain
        * the same objects at the same tree levels.  Returns true if they do,
        * false otherwise.
  -     * 
  +     *
  +     * @param o Object to be compared against 
        * @see java.lang.Object#equals(Object)
        */
       public boolean equals(Object o)
       {
  -        boolean flag = true;
  -        if (o instanceof HashTree)
  -        {
  -            HashTree oo = (HashTree) o;
  -            Iterator it = data.keySet().iterator();
  -            while (it.hasNext())
  -            {
  -                if (!oo.containsKey(it.next()))
  -                {
  -                    flag = false;
  -                    break;
  -                }
  -            }
  -            if (flag)
  -            {
  -                it = data.keySet().iterator();
  -                while (it.hasNext())
  -                {
  -                    Object temp = it.next();
  -                    flag = get(temp).equals(oo.get(temp));
  -                    if (!flag)
  -                    {
  -                        break;
  -                    }
  -                }
  -            }
  -        }
  -        else
  -        {
  -            flag = false;
  -        }
  -        return flag;
  +       if (!(o instanceof HashTree)) return false;
  +       HashTree oo = (HashTree) o;
  +       if (oo.size() != this.size()) return false;
  +       return data.equals(oo.data);
  +
  +//        boolean flag = true;
  +//        if (o instanceof HashTree)
  +//        {
  +//            HashTree oo = (HashTree) o;
  +//            Iterator it = data.keySet().iterator();
  +//            while (it.hasNext())
  +//            {
  +//                if (!oo.containsKey(it.next()))
  +//                {
  +//                    flag = false;
  +//                    break;
  +//                }
  +//            }
  +//            if (flag)
  +//            {
  +//                it = data.keySet().iterator();
  +//                while (it.hasNext())
  +//                {
  +//                    Object temp = it.next();
  +//                    flag = get(temp).equals(oo.get(temp));
  +//                    if (!flag)
  +//                    {
  +//                        break;
  +//                    }
  +//                }
  +//            }
  +//        }
  +//        else
  +//        {
  +//            flag = false;
  +//        }
  +//        return flag;
       }
       
       /**
  @@ -1080,5 +1086,54 @@
               assertEquals(1, tree.list(treePath).size());
               assertEquals("value", tree.getArray(treePath)[0]);
           }
  +        
  +             public void testEqualsAndHashCode() throws Exception
  +             {
  +                     HashTree tree1 = new HashTree("abcd");
  +                     HashTree tree2 = new HashTree("abcd");
  +                     HashTree tree3 = new HashTree("abcde");
  +                     HashTree tree4 = new HashTree("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);
  +                     assertNotSame(tree1,tree4);
  +                     assertNotSame(tree2,tree3);
  +                     assertNotSame(tree2,tree4);
  +                     
  +                     assertFalse(tree1.equals(tree3));
  +                     assertFalse(tree1.equals(tree4));
  +                     assertFalse(tree2.equals(tree3));
  +                     assertFalse(tree2.equals(tree4));
  +                     
  +                     assertFalse(tree1.equals(null));
  +                     assertFalse(tree1.equals(null));
  +                     assertFalse(tree2.equals(null));
  +                     assertFalse(tree2.equals(null));
  +
  +                     tree1.add("abcd",tree3);
  +                     assertFalse(tree1.equals(tree2));
  +                     assertFalse(tree2.equals(tree1));// Check reflexive
  +                     if (tree1.hashCode()==tree2.hashCode())
  +                     {
  +                             // This is not a requirement
  +                             System.out.println("WARN: unequal HashTrees should not 
have equal hashCodes");
  +                     }
  +                     tree2.add("abcd",tree4);
  +                     assertTrue(tree1.equals(tree2));
  +                     assertTrue(tree2.equals(tree1));
  +                     assertTrue(tree1.hashCode()==tree2.hashCode());
  +         }
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to