BooleanStream now can handle more than 64*8 bits.

git-svn-id: https://svn.apache.org/repos/asf/incubator/activemq/trunk@382454 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Hiram R. Chirino 2006-03-02 17:27:25 +00:00
parent acce91b74e
commit 4a65a33af0
2 changed files with 22 additions and 9 deletions

View File

@ -76,11 +76,11 @@ final public class BooleanStream {
public void unmarshal(DataInputStream dataIn) throws IOException { public void unmarshal(DataInputStream dataIn) throws IOException {
arrayLimit = dataIn.readByte(); arrayLimit = (short) (dataIn.readByte() & 0xFF);
if( (arrayLimit & 0x80)!=0 ) { if ( arrayLimit == 0xC0 ) {
arrayLimit = dataIn.readShort();
} else if ( (arrayLimit & 0xC0)!=0 ) {
arrayLimit = (short)(dataIn.readByte() & 0xFF); arrayLimit = (short)(dataIn.readByte() & 0xFF);
} else if( arrayLimit == 0x80 ) {
arrayLimit = dataIn.readShort();
} }
if( data.length < arrayLimit ) { if( data.length < arrayLimit ) {
data = new byte[arrayLimit]; data = new byte[arrayLimit];

View File

@ -22,6 +22,7 @@ import java.io.DataInputStream;
import java.io.DataOutputStream; import java.io.DataOutputStream;
import java.io.IOException; import java.io.IOException;
import junit.framework.AssertionFailedError;
import junit.framework.TestCase; import junit.framework.TestCase;
/** /**
@ -32,13 +33,13 @@ public class BooleanStreamTest extends TestCase {
protected OpenWireFormat openWireformat; protected OpenWireFormat openWireformat;
protected int endOfStreamMarker = 0x12345678; protected int endOfStreamMarker = 0x12345678;
int numberOfBytes = 8 * 50; int numberOfBytes = 8 * 200;
interface BooleanValueSet { interface BooleanValueSet {
public boolean getBooleanValueFor(int index, int count); public boolean getBooleanValueFor(int index, int count);
} }
public void testBooleanMarshallingUsingAllTrue() throws Exception { public void testBooleanMarshallingUsingAllTrue() throws Throwable {
testBooleanStream(numberOfBytes, new BooleanValueSet() { testBooleanStream(numberOfBytes, new BooleanValueSet() {
public boolean getBooleanValueFor(int index, int count) { public boolean getBooleanValueFor(int index, int count) {
return true; return true;
@ -46,7 +47,7 @@ public class BooleanStreamTest extends TestCase {
}); });
} }
public void testBooleanMarshallingUsingAllFalse() throws Exception { public void testBooleanMarshallingUsingAllFalse() throws Throwable {
testBooleanStream(numberOfBytes, new BooleanValueSet() { testBooleanStream(numberOfBytes, new BooleanValueSet() {
public boolean getBooleanValueFor(int index, int count) { public boolean getBooleanValueFor(int index, int count) {
return false; return false;
@ -54,17 +55,29 @@ public class BooleanStreamTest extends TestCase {
}); });
} }
public void testBooleanMarshallingUsingAlternateTrueFalse() throws Exception { public void testBooleanMarshallingUsingOddAlternateTrueFalse() throws Throwable {
testBooleanStream(numberOfBytes, new BooleanValueSet() { testBooleanStream(numberOfBytes, new BooleanValueSet() {
public boolean getBooleanValueFor(int index, int count) { public boolean getBooleanValueFor(int index, int count) {
return (index & 1) == 0; return (index & 1) == 0;
} }
}); });
} }
public void testBooleanMarshallingUsingEvenAlternateTrueFalse() throws Throwable {
testBooleanStream(numberOfBytes, new BooleanValueSet() {
public boolean getBooleanValueFor(int index, int count) {
return (index & 1) != 0;
}
});
}
protected void testBooleanStream(int numberOfBytes, BooleanValueSet valueSet) throws Exception { protected void testBooleanStream(int numberOfBytes, BooleanValueSet valueSet) throws Exception {
for (int i = 0; i < numberOfBytes; i++) { for (int i = 0; i < numberOfBytes; i++) {
assertMarshalBooleans(i, valueSet); try {
assertMarshalBooleans(i, valueSet);
} catch (Throwable e) {
throw (AssertionFailedError) new AssertionFailedError("Iteration failed at: "+i).initCause(e);
}
} }
} }