package edu.brown.oltpgenerator; import java.util.Calendar; import java.util.Date; import java.util.Random; public class RandUtil { private static final Random seed = new Random(); /** * * @param m * @param n * @return An Unsigned numeric value with m total digits, of which n digits * are to the right(after) the decimal point. */ public static double randDouble(int m, int n) { assert (m >= n); int left = m - n; return Double.parseDouble(randNString(left, left) + "." + randNString(n, n)); } public static String randChars(int len) { return randAString(len, len); } public static Object oneOf(Object[] objects) { return objects[(int) (Math.random() * objects.length)]; } public static Date randDate() { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, 365 - seed.nextInt(730)); return calendar.getTime(); } public static Date randDateTime() { return randDate(); } // modified from tpcc.RandomGenerator /** * @returns a random alphabetic string with length in range [minimum_length, * maximum_length]. */ public static String randAString(int minimum_length, int maximum_length) { return randomString(minimum_length, maximum_length, 'A', 26); } // taken from tpcc.RandomGenerator /** * @returns a random numeric string with length in range [minimum_length, * maximum_length]. */ public static String randNString(int minimum_length, int maximum_length) { return randomString(minimum_length, maximum_length, '0', 10); } // taken from tpcc.RandomGenerator private static String randomString(int minimum_length, int maximum_length, char base, int numCharacters) { int length = randLong(minimum_length, maximum_length).intValue(); byte baseByte = (byte) base; byte[] bytes = new byte[length]; for (int i = 0; i < length; ++i) { bytes[i] = (byte) (baseByte + randLong(0, numCharacters - 1)); } return new String(bytes); } public static Long randLong(long minimum, long maximum) { assert minimum <= maximum; long value = Math.abs(seed.nextLong()) % (maximum - minimum + 1) + minimum; assert minimum <= value && value <= maximum; return value; } public static int randInt(int minimum, int maximum) { assert minimum <= maximum; int range_size = maximum - minimum + 1; int value = seed.nextInt(range_size); value += minimum; assert minimum <= value && value <= maximum; return value; } }