001: /*
002:
003: Derby - Class org.apache.derbyTesting.unitTests.services.T_Key
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to You under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derbyTesting.unitTests.services;
023:
024: /**
025:
026: Key for these objects is an array of objects
027:
028: value - Integer or String - implies what object should be used in the cache.
029: waitms - time to wait in ms on a set or create (simulates the object being loaded into the cache).
030: canFind - true of the object can be found on a set, false if it can't. (simulates a request for a non-existent object)
031: raiseException - true if an exception should be raised during set or create identity
032:
033:
034: */
035: public class T_Key {
036:
037: private Object value;
038: private long waitms;
039: private boolean canFind;
040: private boolean raiseException;
041:
042: public static T_Key simpleInt(int value) {
043: return new T_Key(new Integer(value), 0, true, false);
044: }
045:
046: public static T_Key dontFindInt(int value) {
047: return new T_Key(new Integer(value), 0, false, false);
048: }
049:
050: public static T_Key exceptionInt(int value) {
051: return new T_Key(new Integer(value), 0, true, true);
052: }
053:
054: /**
055: 48%/48%/4% chance of Int/String/invalid key
056: 90%/5%/5% chance of can find / can't find / raise exception
057: */
058: public static T_Key randomKey() {
059:
060: double rand = Math.random();
061: T_Key tkey = new T_Key();
062:
063: if (rand < 0.48)
064: tkey.value = new Integer((int) (100.0 * rand));
065: else if (rand < 0.96)
066: tkey.value = new Integer((int) (100.0 * rand));
067: else
068: tkey.value = Boolean.FALSE;
069:
070: rand = Math.random();
071:
072: if (rand < 0.90)
073: tkey.canFind = true;
074: else if (rand < 0.95)
075: tkey.canFind = false;
076: else {
077: tkey.canFind = true;
078: tkey.raiseException = false;
079: }
080:
081: rand = Math.random();
082:
083: if (rand < 0.30) {
084: tkey.waitms = (long) (rand * 1000.0); // Range 0 - 0.3 secs
085: }
086:
087: return tkey;
088: }
089:
090: private T_Key() {
091: }
092:
093: private T_Key(Object value, long waitms, boolean canFind,
094: boolean raiseException) {
095:
096: this .value = value;
097: this .waitms = waitms;
098: this .canFind = canFind;
099: this .raiseException = raiseException;
100: }
101:
102: public Object getValue() {
103: return value;
104: }
105:
106: public long getWait() {
107: return waitms;
108: }
109:
110: public boolean canFind() {
111: return canFind;
112: }
113:
114: public boolean raiseException() {
115: return raiseException;
116: }
117:
118: public boolean equals(Object other) {
119: if (other instanceof T_Key) {
120: return value.equals(((T_Key) other).value);
121: }
122: return false;
123: }
124:
125: public int hashCode() {
126: return value.hashCode();
127: }
128:
129: public String toString() {
130: return value + " " + waitms + " " + canFind + " "
131: + raiseException;
132: }
133: }
|