001: /*
002: * $Id: AbstractObjectIndexTest.java,v 1.2 2005/05/02 22:32:04 ahimanikya Exp $
003: * =======================================================================
004: * Copyright (c) 2002 Axion Development Team. All rights reserved.
005: *
006: * Redistribution and use in source and binary forms, with or without
007: * modification, are permitted provided that the following conditions
008: * are met:
009: *
010: * 1. Redistributions of source code must retain the above
011: * copyright notice, this list of conditions and the following
012: * disclaimer.
013: *
014: * 2. Redistributions in binary form must reproduce the above copyright
015: * notice, this list of conditions and the following disclaimer in
016: * the documentation and/or other materials provided with the
017: * distribution.
018: *
019: * 3. The names "Tigris", "Axion", nor the names of its contributors may
020: * not be used to endorse or promote products derived from this
021: * software without specific prior written permission.
022: *
023: * 4. Products derived from this software may not be called "Axion", nor
024: * may "Tigris" or "Axion" appear in their names without specific prior
025: * written permission.
026: *
027: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
028: * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
029: * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
030: * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
031: * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
032: * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
033: * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
034: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
035: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
036: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
037: * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
038: * =======================================================================
039: */
040:
041: package org.axiondb.engine.indexes;
042:
043: import java.util.Random;
044:
045: import org.apache.commons.logging.Log;
046: import org.apache.commons.logging.LogFactory;
047: import org.axiondb.AbstractIndexTest;
048: import org.axiondb.DataType;
049: import org.axiondb.types.CharacterVaryingType;
050:
051: /**
052: * For testing indices that rely on the data type being an integer
053: * @version $Revision: 1.2 $ $Date: 2005/05/02 22:32:04 $
054: * @author Chuck Burdick
055: */
056: public abstract class AbstractObjectIndexTest extends AbstractIndexTest {
057: private Log _log = LogFactory.getLog(this .getClass());
058: private Random _random = new Random();
059: private StringBuffer _buf = new StringBuffer();
060:
061: //------------------------------------------------------------ Conventional
062:
063: public AbstractObjectIndexTest(String testName) {
064: super (testName);
065: }
066:
067: //--------------------------------------------------------------- Lifecycle
068:
069: public void setUp() throws Exception {
070: super .setUp();
071: }
072:
073: public void tearDown() throws Exception {
074: super .tearDown();
075: }
076:
077: public void testSeq() {
078: assertEquals("Should get string", "A",
079: (String) getSequentialValue(0));
080: }
081:
082: public void testRandom() {
083: String random = (String) getRandomValue();
084: assertTrue("Should have some length", random.length() > 0);
085: assertTrue("Should be within length", random.length() <= 20);
086: for (int i = 0; i < random.length(); i++) {
087: assertTrue("Char " + i + " in " + random
088: + " should be at least A", random.charAt(i) >= 65);
089: assertTrue("Char " + i + " in " + random
090: + " should be at most Z", random.charAt(i) < 91);
091: }
092: }
093:
094: //========================================================= TEST FRAMEWORK
095:
096: protected DataType getDataType() {
097: return new CharacterVaryingType(20);
098: }
099:
100: protected Object getSequentialValue(int i) {
101: String result = null;
102: _buf.setLength(0);
103: for (int j = 0; j < (i / 26) + 1; j++) {
104: _buf.append((char) (65 + (i % 26)));
105: }
106: result = _buf.toString();
107: _log.debug("Sequentially chose string " + result);
108: return result;
109: }
110:
111: protected Object getRandomValue() {
112: String result = null;
113: int size = _random.nextInt(19) + 1;
114: _buf.setLength(0);
115: for (int i = 0; i < size; i++) {
116: int r = _random.nextInt(26);
117: char c = (char) (65 + r);
118: _buf.append(c);
119: }
120: result = _buf.toString();
121: _log.debug("Randomly chose string " + result);
122: return result;
123: }
124: }
|