Return-Path: Delivered-To: apmail-incubator-harmony-commits-archive@www.apache.org Received: (qmail 34912 invoked from network); 21 Aug 2006 03:27:29 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 21 Aug 2006 03:27:29 -0000 Received: (qmail 53602 invoked by uid 500); 21 Aug 2006 03:27:28 -0000 Delivered-To: apmail-incubator-harmony-commits-archive@incubator.apache.org Received: (qmail 53564 invoked by uid 500); 21 Aug 2006 03:27:28 -0000 Mailing-List: contact harmony-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: harmony-dev@incubator.apache.org Delivered-To: mailing list harmony-commits@incubator.apache.org Received: (qmail 53553 invoked by uid 99); 21 Aug 2006 03:27:28 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 20 Aug 2006 20:27:28 -0700 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received-SPF: pass (asf.osuosl.org: local policy) Received: from [140.211.166.113] (HELO eris.apache.org) (140.211.166.113) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 20 Aug 2006 20:27:28 -0700 Received: by eris.apache.org (Postfix, from userid 65534) id E341D1A981A; Sun, 20 Aug 2006 20:27:07 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: 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 Date: Mon, 21 Aug 2006 03:27:07 -0000 To: harmony-commits@incubator.apache.org From: pyang@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20060821032707.E341D1A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N 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 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> extends EnumSet { + private int size = 0; + + private long bits = 0; + MiniEnumSet(Class 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 setWithInnerClass = EnumSet .noneOf(EnumWithAllInnerClass.class); assertNotNull(setWithInnerClass); + } + + /** + * @tests java.util.EnumSet#add(E) + */ + @SuppressWarnings("unchecked") + public void test_add_E() { + Set 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 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 set = EnumSet.noneOf(EnumFoo.class); + set.add(EnumFoo.a); + set.add(EnumFoo.b); + assertEquals("Size should be 2", 2, set.size()); //$NON-NLS-1$ } }