blob: 4718afe84349c2d75d784d036c4f0932e818176f [file] [log] [blame]
/*
*******************************************************************************
* Copyright (C) 2002-2010, International Business Machines Corporation and *
* others. All Rights Reserved. *
*******************************************************************************
*/
package com.ibm.icu.dev.test.util;
import com.ibm.icu.dev.test.TestFmwk;
import com.ibm.icu.impl.Utility;
import com.ibm.icu.util.CompactByteArray;
import com.ibm.icu.util.CompactCharArray;
/**
* @since release 2.2
*/
public final class CompactArrayTest extends TestFmwk
{
public static void main(String[] args) throws Exception
{
new CompactArrayTest().run(args);
}
public void TestByteArrayCoverage() {
CompactByteArray cba = new CompactByteArray();
cba.setElementAt((char)0x5, (byte)0xdf);
cba.setElementAt((char)0x105, (byte)0xdf);
cba.setElementAt((char)0x205, (byte)0xdf);
cba.setElementAt((char)0x305, (byte)0xdf);
CompactByteArray cba2 = new CompactByteArray((byte)0xdf);
if (cba.equals(cba2)) {
errln("unequal byte arrays compare equal");
}
CompactByteArray cba3 = (CompactByteArray)cba.clone();
logln("equals null: " + cba.equals(null));
logln("equals self: " + cba.equals(cba));
logln("equals clone: " + cba.equals(cba3));
logln("equals bogus: " + cba.equals(new Object()));
logln("hash: " + cba.hashCode());
cba.compact(true);
cba.compact(true);
char[] xa = cba.getIndexArray();
byte[] va = cba.getValueArray();
CompactByteArray cba4 = new CompactByteArray(xa, va);
String xs = Utility.arrayToRLEString(xa);
String vs = Utility.arrayToRLEString(va);
CompactByteArray cba5 = new CompactByteArray(xs, vs);
logln("equals: " + cba4.equals(cba5));
logln("equals: " + cba.equals(cba4));
cba4.compact(false);
logln("equals: " + cba4.equals(cba5));
cba5.compact(true);
logln("equals: " + cba4.equals(cba5));
cba.setElementAt((char)0x405, (byte)0xdf); // force expand
logln("modified equals clone: " + cba.equals(cba3));
cba3.setElementAt((char)0x405, (byte)0xdf); // equivalent modification
logln("modified equals modified clone: " + cba.equals(cba3));
cba3.setElementAt((char)0x405, (byte)0xee); // different modification
logln("different mod equals: " + cba.equals(cba3));
cba.compact();
CompactByteArray cba6 = (CompactByteArray)cba.clone();
logln("cloned compact equals: " + cba.equals(cba6));
cba6.setElementAt((char)0x405, (byte)0xee);
logln("modified clone: " + cba3.equals(cba6));
cba6.setElementAt((char)0x100, (char)0x104, (byte)0xfe);
for (int i = 0x100; i < 0x105; ++i) {
cba3.setElementAt((char)i, (byte)0xfe);
}
logln("double modified: " + cba3.equals(cba6));
}
public void TestCharArrayCoverage() {
// v1.8 fails with extensive compaction, so set to false
final boolean EXTENSIVE = false;
CompactCharArray cca = new CompactCharArray();
cca.setElementAt((char)0x5, (char)0xdf);
cca.setElementAt((char)0x105, (char)0xdf);
cca.setElementAt((char)0x205, (char)0xdf);
cca.setElementAt((char)0x305, (char)0xdf);
CompactCharArray cca2 = new CompactCharArray((char)0xdf);
if (cca.equals(cca2)) {
errln("unequal char arrays compare equal");
}
CompactCharArray cca3 = (CompactCharArray)cca.clone();
logln("equals null: " + cca.equals(null));
logln("equals self: " + cca.equals(cca));
logln("equals clone: " + cca.equals(cca3));
logln("equals bogus: " + cca.equals(new Object()));
logln("hash: " + cca.hashCode());
cca.compact(EXTENSIVE);
cca.compact(EXTENSIVE);
char[] xa = cca.getIndexArray();
char[] va = cca.getValueArray();
CompactCharArray cca4 = new CompactCharArray(xa, va);
String xs = Utility.arrayToRLEString(xa);
String vs = Utility.arrayToRLEString(va);
CompactCharArray cca5 = new CompactCharArray(xs, vs);
logln("equals: " + cca4.equals(cca5));
logln("equals: " + cca.equals(cca4));
cca4.compact(false);
logln("equals: " + cca4.equals(cca5));
cca5.compact(EXTENSIVE);
logln("equals: " + cca4.equals(cca5));
cca.setElementAt((char)0x405, (char)0xdf); // force expand
logln("modified equals clone: " + cca.equals(cca3));
cca3.setElementAt((char)0x405, (char)0xdf); // equivalent modification
logln("modified equals modified clone: " + cca.equals(cca3));
cca3.setElementAt((char)0x405, (char)0xee); // different modification
logln("different mod equals: " + cca.equals(cca3));
// after setElementAt isCompact is set to false
cca3.compact(true);
logln("different mod equals: " + cca.equals(cca3));
cca3.setElementAt((char)0x405, (char)0xee); // different modification
logln("different mod equals: " + cca.equals(cca3));
// after setElementAt isCompact is set to false
cca3.compact();
logln("different mod equals: " + cca.equals(cca3));
// v1.8 fails with extensive compaction, and defaults extensive, so don't compact
// cca.compact();
CompactCharArray cca6 = (CompactCharArray)cca.clone();
logln("cloned compact equals: " + cca.equals(cca6));
cca6.setElementAt((char)0x405, (char)0xee);
logln("modified clone: " + cca3.equals(cca6));
cca6.setElementAt((char)0x100, (char)0x104, (char)0xfe);
for (int i = 0x100; i < 0x105; ++i) {
cca3.setElementAt((char)i, (char)0xfe);
}
logln("double modified: " + cca3.equals(cca6));
}
}