001: /*
002: * @(#)ObjectCacheUTest.java 0.9.0 17-APR-2001 - 14:40
003: *
004: * Copyright (C) 2001,,2003 2002 Matt Albrecht
005: * groboclown@users.sourceforge.net
006: * http://groboutils.sourceforge.net
007: *
008: * Permission is hereby granted, free of charge, to any person obtaining a
009: * copy of this software and associated documentation files (the "Software"),
010: * to deal in the Software without restriction, including without limitation
011: * the rights to use, copy, modify, merge, publish, distribute, sublicense,
012: * and/or sell copies of the Software, and to permit persons to whom the
013: * Software is furnished to do so, subject to the following conditions:
014: *
015: * The above copyright notice and this permission notice shall be included in
016: * all copies or substantial portions of the Software.
017: *
018: * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
019: * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
020: * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
021: * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
022: * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
023: * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
024: * DEALINGS IN THE SOFTWARE.
025: */
026:
027: package net.sourceforge.groboutils.util.datastruct.v1;
028:
029: import net.sourceforge.groboutils.junit.v1.MultiThreadedTestRunner;
030:
031: import junit.framework.Test;
032: import junit.framework.TestCase;
033: import junit.framework.TestSuite;
034:
035: /**
036: *
037: *
038: * @author Matt Albrecht <a href="mailto:groboclown@users.sourceforge.net">groboclown@users.sourceforge.net</a>
039: * @since April 17, 2001 (Alpha 0.9.0)
040: * @version $Date: 2003/02/10 22:52:44 $
041: */
042: public class ObjectCacheUTest extends TestCase {
043: private static final Class THIS_CLASS = ObjectCacheUTest.class;
044:
045: public ObjectCacheUTest(String name) {
046: super (name);
047: }
048:
049: public static Test suite() {
050: TestSuite suite = new TestSuite(THIS_CLASS);
051:
052: return suite;
053: }
054:
055: public static void main(String[] args) {
056: String[] name = { THIS_CLASS.getName() };
057:
058: // junit.textui.TestRunner.main( name );
059: // junit.swingui.TestRunner.main( name );
060:
061: junit.textui.TestRunner.main(name);
062: }
063:
064: protected void setUp() throws Exception {
065: super .setUp();
066:
067: // set ourself up
068: }
069:
070: protected void tearDown() throws Exception {
071: // tear ourself down
072:
073: super .tearDown();
074: }
075:
076: public class OCreator implements ObjectCache.ObjectCreator {
077: private int count = 0;
078:
079: public synchronized Object createObject() {
080: return "Object " + (++count);
081: }
082:
083: public int getCreationCount() {
084: return count;
085: }
086: }
087:
088: public void testInstantiate() {
089: ObjectCache oc = new ObjectCache();
090: assertEquals("Size must be at default of UNLIMITED.",
091: oc.UNLIMITED_SIZE, oc.getMaxSize());
092: assertEquals("Underflows must be at zero.", 0, oc
093: .getUnderflows());
094: assertEquals("Overflows must be at zero.", 0, oc.getOverflows());
095: // this test only works because we didn't specify a creator
096: // needs to be at end to avoid underflows
097: assertTrue("Cache should be empty after creation.",
098: oc.get() == null);
099:
100: oc = new ObjectCache(10);
101: assertEquals("Size must be at specified size.", 10, oc
102: .getMaxSize());
103: assertEquals("Underflows must be at zero.", 0, oc
104: .getUnderflows());
105: assertEquals("Overflows must be at zero.", 0, oc.getOverflows());
106: // this test only works because we didn't specify a creator
107: // needs to be at end to avoid underflows
108: assertTrue("Cache should be empty after creation.",
109: oc.get() == null);
110:
111: oc = new ObjectCache(Object.class);
112: assertEquals("Size must be at default of UNLIMITED.",
113: oc.UNLIMITED_SIZE, oc.getMaxSize());
114: assertEquals("Underflows must be at zero.", 0, oc
115: .getUnderflows());
116: assertEquals("Overflows must be at zero.", 0, oc.getOverflows());
117:
118: oc = new ObjectCache(Object.class, 10);
119: assertEquals("Size must be at specified size.", 10, oc
120: .getMaxSize());
121: assertEquals("Underflows must be at zero.", 0, oc
122: .getUnderflows());
123: assertEquals("Overflows must be at zero.", 0, oc.getOverflows());
124:
125: oc = new ObjectCache(new OCreator());
126: assertEquals("Size must be at default of UNLIMITED.",
127: oc.UNLIMITED_SIZE, oc.getMaxSize());
128: assertEquals("Underflows must be at zero.", 0, oc
129: .getUnderflows());
130: assertEquals("Overflows must be at zero.", 0, oc.getOverflows());
131:
132: oc = new ObjectCache(new OCreator(), 10);
133: assertEquals("Size must be at specified size.", 10, oc
134: .getMaxSize());
135: assertEquals("Underflows must be at zero.", 0, oc
136: .getUnderflows());
137: assertEquals("Overflows must be at zero.", 0, oc.getOverflows());
138: }
139:
140: public void testSimpleAdd() throws InterruptedException {
141: ObjectCache oc = new ObjectCache();
142: Object o1 = new Object();
143: // this test only works because we didn't specify a creator
144: assertTrue("Cache should be empty after creation.",
145: oc.get() == null);
146: oc.putBack(o1);
147: Object o2 = oc.get();
148: assertEquals(
149: "What gets put in, needs to equal what gets put out.",
150: o1, o2);
151: // this test only works because we didn't specify a creator
152: assertTrue("Cache should be empty after removing.",
153: oc.get() == null);
154: }
155:
156: public void testClassCreator() {
157: ObjectCache oc = new ObjectCache(Object.class);
158: Object o1 = oc.get();
159: assertNotNull("Cache should have created an entry.", o1);
160: assertEquals("Cache should have created an Object.",
161: Object.class, o1.getClass());
162: }
163:
164: public void testObjectCreator() {
165: ObjectCache oc = new ObjectCache(new OCreator());
166: Object o1 = oc.get();
167: assertNotNull("Cache should have created an entry.", o1);
168: assertEquals("Cache should have created a String.",
169: String.class, o1.getClass());
170: }
171:
172: public void testFill() {
173: OCreator creator = new OCreator();
174: ObjectCache oc = new ObjectCache(creator, 5, true);
175: assertEquals("Cache did not fill itself.", 5, creator
176: .getCreationCount());
177:
178: // empty the cache
179: for (int i = 0; i < 5; i++) {
180: Object o = oc.get();
181: assertNotNull(
182: "Cache with creator should never return null.", o);
183: }
184:
185: // fill it up again
186: oc.fillCache();
187: assertEquals("Cache did not fill itself.", 10, creator
188: .getCreationCount());
189: }
190:
191: public void testPutBack() {
192: ObjectCache oc = new ObjectCache(1);
193: Object o1 = new Object();
194: Object o2 = new Object();
195: oc.putBack(o1);
196: oc.putBack(o2);
197: assertEquals("ObjectCache should have an overflow.", 1, oc
198: .getOverflows());
199: Object o3 = oc.get();
200: assertEquals("Cache should have returned 1st object.", o1, o3);
201: Object o4 = oc.get();
202: assertEquals("Cache should have returned null.", null, o4);
203: }
204: }
|