/* * Copyright 2004-2011 H2 Group. Multiple-Licensed under the H2 License, * Version 1.0, and under the Eclipse Public License, Version 1.0 * (http://h2database.com/html/license.html). * Initial Developer: H2 Group */ package org.h2.test.bench; import java.math.BigDecimal; import java.math.BigInteger; import java.util.Random; /** * The random data generator used for BenchC. */ public class BenchCRandom { private Random random = new Random(10); /** * Get a non-uniform random integer value between min and max. * * @param a the bit mask * @param min the minimum value * @param max the maximum value * @return the random value */ int getNonUniform(int a, int min, int max) { int c = 0; return (((getInt(0, a) | getInt(min, max)) + c) % (max - min + 1)) + min; } /** * Get a random integer value between min and max. * * @param min the minimum value * @param max the maximum value * @return the random value */ int getInt(int min, int max) { return max <= min ? min : (random.nextInt(max - min) + min); } /** * Generate a boolean array with this many items set to true (randomly * distributed). * * @param length the size of the array * @param trueCount the number of true elements * @return the boolean array */ boolean[] getBoolean(int length, int trueCount) { boolean[] data = new boolean[length]; for (int i = 0, pos; i < trueCount; i++) { do { pos = getInt(0, length); } while (data[pos]); data[pos] = true; } return data; } /** * Replace a random part of the string with another text. * * @param text the original text * @param replacement the replacement * @return the patched string */ String replace(String text, String replacement) { int pos = getInt(0, text.length() - replacement.length()); StringBuilder buffer = new StringBuilder(text); buffer.replace(pos, pos + 7, replacement); return buffer.toString(); } /** * Get a random number string. * * @param min the minimum value * @param max the maximum value * @return the number string */ String getNumberString(int min, int max) { int len = getInt(min, max); char[] buff = new char[len]; for (int i = 0; i < len; i++) { buff[i] = (char) getInt('0', '9'); } return new String(buff); } /** * Get random address data. * * @return the address */ String[] getAddress() { String str1 = getString(10, 20); String str2 = getString(10, 20); String city = getString(10, 20); String state = getString(2); String zip = getNumberString(9, 9); return new String[] { str1, str2, city, state, zip }; } /** * Get a random string. * * @param min the minimum size * @param max the maximum size * @return the string */ String getString(int min, int max) { return getString(getInt(min, max)); } /** * Get a random string. * * @param len the size * @return the string */ String getString(int len) { char[] buff = new char[len]; for (int i = 0; i < len; i++) { buff[i] = (char) getInt('A', 'Z'); } return new String(buff); } /** * Generate a random permutation if the values 0 .. length. * * @param length the number of elements * @return the random permutation */ int[] getPermutation(int length) { int[] data = new int[length]; for (int i = 0; i < length; i++) { data[i] = i; } for (int i = 0; i < length; i++) { int j = getInt(0, length); int temp = data[i]; data[i] = data[j]; data[j] = temp; } return data; } /** * Create a big decimal value. * * @param value the value * @param scale the scale * @return the big decimal object */ BigDecimal getBigDecimal(int value, int scale) { return new BigDecimal(new BigInteger(String.valueOf(value)), scale); } /** * Generate a last name composed of three elements * * @param i the last name index * @return the name */ String getLastname(int i) { String[] n = { "BAR", "OUGHT", "ABLE", "PRI", "PRES", "ESE", "ANTI", "CALLY", "ATION", "EING" }; StringBuilder buff = new StringBuilder(); buff.append(n[i / 100]); buff.append(n[(i / 10) % 10]); buff.append(n[i % 10]); return buff.toString(); } }