Work toward improving solidity. Add a few more unit tests, and some toString()
[cfb.git] / prod / net / jaekl / cfb / util / Util.java
index 30f4c90c64bc40f63fc9afc7b5d312edd54b8c35..d1e79bdaa0742c45bb763c302d7404aaa6d44216 100644 (file)
@@ -4,12 +4,68 @@ package net.jaekl.cfb.util;
 
 import java.io.PrintWriter;
 import java.io.StringWriter;
+import java.util.Iterator;
+import java.util.List;
 
 public class Util {
-       public static String stringify(Throwable thr) {
+       // Returns true iff. a and b contain equal items in the same order
+       public static boolean listsAreEqual(List<?> a, List<?> b)
+       {
+               if ((null == a) || (null == b)) {
+                       return (a == b);
+               }
+               
+               if (0 == a.size()) {
+                       return (0 == b.size());
+               }
+               
+               if (a.size() != b.size()) {
+                       return false;
+               }
+               
+               Iterator<?> iterA = a.iterator();
+               Iterator<?> iterB = b.iterator();
+               
+               while (iterA.hasNext()) {
+                       Object elemA = iterA.next();
+                       Object elemB = iterB.next();
+                       
+                       if (! objsAreEqual(elemA, elemB)) {
+                               return false;
+                       }
+               }
+               
+               return true;
+       }
+       
+       // Test for equality, while taking care to avoid 
+       // dereferencing a null pointer.
+       // Note that two null pointers are considered equal.
+       public static boolean objsAreEqual(Object a, Object b) 
+       {
+               if ((null == a) || (null == b)) {
+                       return (a == b);
+               }
+               
+               return a.equals(b);
+       }
+       
+       // Return 1 if obj is null, or obj.hashCode() otherwise
+       public static int objHashCode(Object obj)
+       {
+               if (null == obj) {
+                       return 1;
+               }
+               return obj.hashCode();
+       }
+       
+       // Convert a Throwable to the string representation 
+       // that is generated by printStackTrace().
+       public static String stringify(Throwable thr) 
+       {
                StringWriter sw = new StringWriter();
                PrintWriter pw = new PrintWriter(sw);
                thr.printStackTrace(pw);
                return sw.toString();
-       }
+       }       
 }