1/*- 2 * See the file LICENSE for redistribution information. 3 * 4 * Copyright (c) 2002,2008 Oracle. All rights reserved. 5 * 6 * $Id: PackedIntegerTest.java,v 1.5 2008/01/08 20:58:58 bostic Exp $ 7 */ 8 9package com.sleepycat.util.test; 10 11import com.sleepycat.util.PackedInteger; 12import junit.framework.Test; 13import junit.framework.TestCase; 14 15public class PackedIntegerTest extends TestCase 16{ 17 static final long V119 = 119L; 18 static final long MAX_1 = 0xFFL; 19 static final long MAX_2 = 0xFFFFL; 20 static final long MAX_3 = 0xFFFFFFL; 21 static final long MAX_4 = 0xFFFFFFFFL; 22 static final long MAX_5 = 0xFFFFFFFFFFL; 23 static final long MAX_6 = 0xFFFFFFFFFFFFL; 24 static final long MAX_7 = 0xFFFFFFFFFFFFFFL; 25 26 public static void main(String[] args) 27 throws Exception { 28 29 junit.framework.TestResult tr = 30 junit.textui.TestRunner.run(suite()); 31 if (tr.errorCount() > 0 || 32 tr.failureCount() > 0) { 33 System.exit(1); 34 } else { 35 System.exit(0); 36 } 37 } 38 39 public static Test suite() { 40 41 return new PackedIntegerTest(); 42 } 43 44 public PackedIntegerTest() { 45 46 super("PackedIntegerTest"); 47 } 48 49 public void runTest() { 50 51 /* Packed int tests. */ 52 53 testIntRange(-V119, V119, 1); 54 55 testIntRange(-MAX_1 - V119, -1 - V119, 2); 56 testIntRange(1 + V119, MAX_1 + V119, 2); 57 58 testIntRange(-MAX_2 - V119, -MAX_2 + 99, 3); 59 testIntRange(-MAX_1 - V119 - 99, -MAX_1 - V119 - 1, 3); 60 testIntRange(MAX_1 + V119 + 1, MAX_1 + V119 + 99, 3); 61 testIntRange(MAX_2 - 99, MAX_2 + V119, 3); 62 63 testIntRange(-MAX_3 - V119, -MAX_3 + 99, 4); 64 testIntRange(-MAX_2 - V119 - 99, -MAX_2 - V119 - 1, 4); 65 testIntRange(MAX_2 + V119 + 1, MAX_2 + V119 + 99, 4); 66 testIntRange(MAX_3 - 99, MAX_3 + V119, 4); 67 68 testIntRange(Integer.MIN_VALUE, Integer.MIN_VALUE + 99, 5); 69 testIntRange(Integer.MAX_VALUE - 99, Integer.MAX_VALUE, 5); 70 71 /* Packed long tests. */ 72 73 testLongRange(-V119, V119, 1); 74 75 testLongRange(-MAX_1 - V119, -1 - V119, 2); 76 testLongRange(1 + V119, MAX_1 + V119, 2); 77 78 testLongRange(-MAX_2 - V119, -MAX_2 + 99, 3); 79 testLongRange(-MAX_1 - V119 - 99, -MAX_1 - V119 - 1, 3); 80 testLongRange(MAX_1 + V119 + 1, MAX_1 + V119 + 99, 3); 81 testLongRange(MAX_2 - 99, MAX_2 + V119, 3); 82 83 testLongRange(-MAX_3 - V119, -MAX_3 + 99, 4); 84 testLongRange(-MAX_2 - V119 - 99, -MAX_2 - V119 - 1, 4); 85 testLongRange(MAX_2 + V119 + 1, MAX_2 + V119 + 99, 4); 86 testLongRange(MAX_3 - 99, MAX_3 + V119, 4); 87 88 testLongRange(-MAX_4 - V119, -MAX_4 + 99, 5); 89 testLongRange(-MAX_3 - V119 - 99, -MAX_3 - V119 - 1, 5); 90 testLongRange(MAX_3 + V119 + 1, MAX_3 + V119 + 99, 5); 91 testLongRange(MAX_4 - 99, MAX_4 + V119, 5); 92 93 testLongRange(-MAX_5 - V119, -MAX_5 + 99, 6); 94 testLongRange(-MAX_4 - V119 - 99, -MAX_4 - V119 - 1, 6); 95 testLongRange(MAX_4 + V119 + 1, MAX_4 + V119 + 99, 6); 96 testLongRange(MAX_5 - 99, MAX_5 + V119, 6); 97 98 testLongRange(-MAX_6 - V119, -MAX_6 + 99, 7); 99 testLongRange(-MAX_5 - V119 - 99, -MAX_5 - V119 - 1, 7); 100 testLongRange(MAX_5 + V119 + 1, MAX_5 + V119 + 99, 7); 101 testLongRange(MAX_6 - 99, MAX_6 + V119, 7); 102 103 testLongRange(-MAX_7 - V119, -MAX_7 + 99, 8); 104 testLongRange(-MAX_6 - V119 - 99, -MAX_6 - V119 - 1, 8); 105 testLongRange(MAX_6 + V119 + 1, MAX_6 + V119 + 99, 8); 106 testLongRange(MAX_7 - 99, MAX_7 + V119, 8); 107 108 testLongRange(Long.MIN_VALUE, Long.MIN_VALUE + 99, 9); 109 testLongRange(Long.MAX_VALUE - 99, Long.MAX_VALUE - 1, 9); 110 } 111 112 private void testIntRange(long firstValue, 113 long lastValue, 114 int bytesExpected) { 115 116 byte[] buf = new byte[1000]; 117 int off = 0; 118 119 for (long longI = firstValue; longI <= lastValue; longI += 1) { 120 int i = (int) longI; 121 int before = off; 122 off = PackedInteger.writeInt(buf, off, i); 123 int bytes = off - before; 124 if (bytes != bytesExpected) { 125 fail("output of value=" + i + " bytes=" + bytes + 126 " bytesExpected=" + bytesExpected); 127 } 128 bytes = PackedInteger.getWriteIntLength(i); 129 if (bytes != bytesExpected) { 130 fail("count of value=" + i + " bytes=" + bytes + 131 " bytesExpected=" + bytesExpected); 132 } 133 } 134 135 off = 0; 136 137 for (long longI = firstValue; longI <= lastValue; longI += 1) { 138 int i = (int) longI; 139 int bytes = PackedInteger.getReadIntLength(buf, off); 140 if (bytes != bytesExpected) { 141 fail("count of value=" + i + " bytes=" + bytes + 142 " bytesExpected=" + bytesExpected); 143 } 144 int value = PackedInteger.readInt(buf, off); 145 if (value != i) { 146 fail("input of value=" + i + " but got=" + value); 147 } 148 off += bytes; 149 } 150 } 151 152 private void testLongRange(long firstValue, 153 long lastValue, 154 int bytesExpected) { 155 156 byte[] buf = new byte[2000]; 157 int off = 0; 158 159 for (long longI = firstValue; longI <= lastValue; longI += 1) { 160 long i = longI; 161 int before = off; 162 off = PackedInteger.writeLong(buf, off, i); 163 int bytes = off - before; 164 if (bytes != bytesExpected) { 165 fail("output of value=" + i + " bytes=" + bytes + 166 " bytesExpected=" + bytesExpected); 167 } 168 bytes = PackedInteger.getWriteLongLength(i); 169 if (bytes != bytesExpected) { 170 fail("count of value=" + i + " bytes=" + bytes + 171 " bytesExpected=" + bytesExpected); 172 } 173 } 174 175 off = 0; 176 177 for (long longI = firstValue; longI <= lastValue; longI += 1) { 178 long i = longI; 179 int bytes = PackedInteger.getReadLongLength(buf, off); 180 if (bytes != bytesExpected) { 181 fail("count of value=" + i + " bytes=" + bytes + 182 " bytesExpected=" + bytesExpected); 183 } 184 long value = PackedInteger.readLong(buf, off); 185 if (value != i) { 186 fail("input of value=" + i + " but got=" + value); 187 } 188 off += bytes; 189 } 190 } 191} 192