You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by py...@apache.org on 2006/08/21 05:27:07 UTC

svn commit: r433135 - in /incubator/harmony/enhanced/classlib/trunk/modules/luni/src: main/java/java/util/EnumSet.java main/java/java/util/MiniEnumSet.java test/java/tests/api/java/util/EnumSetTest.java

Author: pyang
Date: Sun Aug 20 20:27:05 2006
New Revision: 433135

URL: http://svn.apache.org/viewvc?rev=433135&view=rev
Log:
Patch applied for HARMONY-1219 ([classlib][luni] new method(s) java.util.EnumSet.add(E) - inherited from java.util.AbstractCollection, java.util.EnumSet.clear, java.util.EnumSet.size)

Modified:
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/EnumSet.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MiniEnumSet.java
    incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/EnumSetTest.java

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/EnumSet.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/EnumSet.java?rev=433135&r1=433134&r2=433135&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/EnumSet.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/EnumSet.java Sun Aug 20 20:27:05 2006
@@ -250,4 +250,8 @@
     public EnumSet<E> clone() {
         throw new NotYetImplementedException();
     }
+    
+    boolean isValidType(Class cls) {
+        return cls == elementClass || cls.getSuperclass() == elementClass;
+    }
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MiniEnumSet.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MiniEnumSet.java?rev=433135&r1=433134&r2=433135&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MiniEnumSet.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/main/java/java/util/MiniEnumSet.java Sun Aug 20 20:27:05 2006
@@ -22,8 +22,13 @@
  * with less than or equal to 64 elements.
  * 
  */
+@SuppressWarnings("serial")
 final class MiniEnumSet<E extends Enum<E>> extends EnumSet<E> {
     
+    private int size = 0;
+    
+    private long bits = 0;
+    
     MiniEnumSet(Class<E> elementType) {
         super(elementType);
     }
@@ -35,6 +40,27 @@
 
     @Override
     public int size() {
-        throw new NotYetImplementedException();
+        return size;
+    }
+    
+    @Override
+    public void clear() {
+        bits = 0;
+        size = 0;
+    }
+    
+    @Override
+    public boolean add(E element) {
+        if (!isValidType(element.getDeclaringClass())) {
+            throw new ClassCastException();
+        }
+        int mask = 1 << element.ordinal();
+        if ((bits & mask) == mask) {
+            return false;
+        }
+        bits |= mask;
+
+        size = Long.bitCount(bits);
+        return true;
     }
 }

Modified: incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/EnumSetTest.java
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/EnumSetTest.java?rev=433135&r1=433134&r2=433135&view=diff
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/EnumSetTest.java (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/luni/src/test/java/tests/api/java/util/EnumSetTest.java Sun Aug 20 20:27:05 2006
@@ -16,15 +16,25 @@
 package tests.api.java.util;
 
 import java.util.EnumSet;
+import java.util.Set;
 
 import junit.framework.TestCase;
 
 public class EnumSetTest extends TestCase {
+    
+    static enum EnumWithInnerClass {
+        a, b, c, d, e, f {
+        },
+    }
 
     enum EnumWithAllInnerClass {
         a {},
         b {},
     }
+    
+    static enum EnumFoo {
+        a, b,
+    }
 
     /**
      * @tests java.util.EnumSet#noneOf(java.lang.Class)
@@ -57,5 +67,87 @@
         EnumSet<EnumWithAllInnerClass> setWithInnerClass = EnumSet
                 .noneOf(EnumWithAllInnerClass.class);
         assertNotNull(setWithInnerClass);
+    }
+    
+    /**
+     * @tests java.util.EnumSet#add(E)
+     */
+    @SuppressWarnings("unchecked")
+    public void test_add_E() {
+        Set<EnumFoo> set = EnumSet.noneOf(EnumFoo.class);
+        set.add(EnumFoo.a);
+        set.add(EnumFoo.b);
+        
+        try {
+            set.add(null);
+            fail("Should throw NullPointerException"); //$NON-NLS-1$
+        } catch (NullPointerException e) {
+            // expected
+        }
+
+        set.clear();
+        try {
+            set.add(null);
+            fail("Should throw NullPointerException"); //$NON-NLS-1$
+        } catch (NullPointerException e) {
+            // expected
+        }
+
+        boolean result = set.add(EnumFoo.a);
+        assertEquals("Size should be 1:", 1, set.size()); //$NON-NLS-1$
+        assertTrue("Return value should be true", result); //$NON-NLS-1$
+
+        result = set.add(EnumFoo.a);
+        assertEquals("Size should be 1:", 1, set.size()); //$NON-NLS-1$
+        assertFalse("Return value should be false", result); //$NON-NLS-1$
+
+        set.add(EnumFoo.b);
+        assertEquals("Size should be 2:", 2, set.size()); //$NON-NLS-1$
+        
+        Set rawSet = set;
+        try {
+            rawSet.add(EnumWithAllInnerClass.a);
+            fail("Should throw ClassCastException"); //$NON-NLS-1$
+        } catch(ClassCastException e) {
+            // expected
+        }
+        
+        try {
+            rawSet.add(EnumWithInnerClass.a);
+            fail("Should throw ClassCastException"); //$NON-NLS-1$
+        } catch(ClassCastException e) {
+            // expected
+        }
+        
+        try {
+            rawSet.add(new Object());
+            fail("Should throw ClassCastException"); //$NON-NLS-1$
+        } catch(ClassCastException e) {
+            // expected
+        }
+    }
+    
+    /**
+     * @tests java.util.EnumSet#clear()
+     */
+    public void test_clear() {
+        Set<EnumFoo> set = EnumSet.noneOf(EnumFoo.class);
+        set.add(EnumFoo.a);
+        set.add(EnumFoo.b);
+        assertEquals("Size should be 2", 2, set.size()); //$NON-NLS-1$
+
+        set.clear();
+
+        assertEquals("Size should be 0", 0, set.size()); //$NON-NLS-1$
+    }
+    
+    /**
+     * @tests java.util.EnumSet#size()
+     */
+    public void test_size() {
+        Set<EnumFoo> set = EnumSet.noneOf(EnumFoo.class);
+        set.add(EnumFoo.a);
+        set.add(EnumFoo.b);
+        assertEquals("Size should be 2", 2, set.size()); //$NON-NLS-1$
     }
 }