001: /*-
002: * See the file LICENSE for redistribution information.
003: *
004: * Copyright (c) 2002,2008 Oracle. All rights reserved.
005: *
006: * $Id: Adler32Test.java,v 1.11.2.2 2008/01/07 15:14:34 cwl Exp $
007: */
008:
009: package com.sleepycat.je.util;
010:
011: import java.util.Random;
012: import java.util.zip.Checksum;
013:
014: import junit.framework.TestCase;
015:
016: public class Adler32Test extends TestCase {
017:
018: static private int N_ITERS = 1000;
019:
020: public void testRandomAdler32ByteArray() {
021: Checksum javaChecksum = new java.util.zip.Adler32();
022: Checksum jeChecksum = new com.sleepycat.je.utilint.Adler32();
023: Checksum chunkingChecksum = new com.sleepycat.je.utilint.Adler32.ChunkingAdler32(
024: 128);
025: Random rnd = new Random();
026: for (int i = 0; i < N_ITERS; i++) {
027: int nBytes = rnd.nextInt(65535);
028: byte[] b = new byte[nBytes];
029: rnd.nextBytes(b);
030: javaChecksum.reset();
031: jeChecksum.reset();
032: chunkingChecksum.reset();
033: javaChecksum.update(b, 0, nBytes);
034: jeChecksum.update(b, 0, nBytes);
035: chunkingChecksum.update(b, 0, nBytes);
036: assertEquals(javaChecksum.getValue(), jeChecksum.getValue());
037: assertEquals(javaChecksum.getValue(), chunkingChecksum
038: .getValue());
039: }
040: }
041:
042: public void xtestRandomAdler32ByteArrayPerformance() {
043: Checksum javaChecksum = new java.util.zip.Adler32();
044: Checksum jeChecksum = new com.sleepycat.je.utilint.Adler32();
045: Random rnd = new Random();
046: byte[][] baa = new byte[N_ITERS][];
047: int[] lengths = new int[N_ITERS];
048: long totalBytes = 0;
049: for (int i = 0; i < N_ITERS; i++) {
050: int nBytes = rnd.nextInt(65535);
051: byte[] b = new byte[nBytes];
052: baa[i] = b;
053: lengths[i] = nBytes;
054: totalBytes += nBytes;
055: rnd.nextBytes(b);
056: }
057: long jeChecksumTime = measureChecksum(baa, lengths, jeChecksum,
058: false);
059: long javaChecksumTime = measureChecksum(baa, lengths,
060: javaChecksum, false);
061: long jeChecksumTimeByteAtATime = measureChecksum(baa, lengths,
062: jeChecksum, true);
063: long javaChecksumTimeByteAtATime = measureChecksum(baa,
064: lengths, javaChecksum, true);
065: System.out.println(N_ITERS + " Iterations, " + totalBytes
066: + " bytes:\n " + javaChecksumTime
067: + " millis. for java\n" + jeChecksumTime
068: + " millis. for je\n" + javaChecksumTimeByteAtATime
069: + " millis. for java byte at a time\n"
070: + jeChecksumTimeByteAtATime
071: + " millis. for je byte at a time");
072: }
073:
074: private long measureChecksum(byte[][] baa, int[] lengths,
075: Checksum cksum, boolean byteAtATime) {
076: long startTime = System.currentTimeMillis();
077: for (int i = 0; i < N_ITERS; i++) {
078: byte[] b = baa[i];
079: int len = lengths[i];
080: cksum.reset();
081: if (byteAtATime) {
082: for (int j = 0; j < len; j++) {
083: cksum.update(b[j]);
084: }
085: } else {
086: cksum.update(b, 0, len);
087: }
088: }
089: long endTime = System.currentTimeMillis();
090: return (endTime - startTime);
091: }
092:
093: public void testRandomAdler32SingleBytes() {
094: Checksum javaChecksum = new java.util.zip.Adler32();
095: Checksum jeChecksum = new com.sleepycat.je.utilint.Adler32();
096: Random rnd = new Random();
097: for (int i = 0; i < N_ITERS; i++) {
098: int nBytes = rnd.nextInt(65535);
099: javaChecksum.reset();
100: jeChecksum.reset();
101: for (int j = 0; j < nBytes; j++) {
102: byte b = (byte) (rnd.nextInt(256) & 0xff);
103: javaChecksum.update(b);
104: jeChecksum.update(b);
105: }
106: assertEquals(javaChecksum.getValue(), jeChecksum.getValue());
107: }
108: }
109: }
|