package com.limegroup.gnutella.udpconnect;
import junit.framework.Test;
import com.limegroup.gnutella.util.BaseTestCase;
/**
* Tests the SequenceNumberExtender class.
*/
public final class SequenceNumberExtenderTest extends BaseTestCase {
/*
* Constructs the test.
*/
public SequenceNumberExtenderTest(String name) {
super(name);
}
public static Test suite() {
return buildTestSuite(SequenceNumberExtenderTest.class);
}
/**
* Runs this test individually.
*/
public static void main(String[] args) {
junit.textui.TestRunner.run(suite());
}
/**
* Test that increments remain in sync with a full long being incremented
* and with the values being mapped down to 2 byte sequenceNumbers.
*
* @throws Exception if an error occurs
*/
public void testSequenceNumberIncrements() throws Exception {
// Init the extender
SequenceNumberExtender extender = new SequenceNumberExtender();
// Make sure that the sequence remains in sync with prior number
// and its own extended value - test up to 100000000
long finalValue = 10000000;
long lasti;
long lastiand;
long iand = -1;
lasti = 0;
lastiand = 0;
for (long i = 1; i <= finalValue; i++) {
// Shrink the sequenceNumber down to 2 bytes
iand = i & 0xffff;
// Extend the sequenceNumber back to 8 bytes
iand = extender.extendSequenceNumber( ( iand) );
if ( (lastiand + 1) != iand ) {
fail("Error at count: "+i+" last: "+lasti+" seqNo: "+
iand+" last seqNo: "+lastiand);
}
//if ( i % 5000000 == 0 )
//System.out.println("Progress: "+i);
lasti = i;
lastiand = iand;
}
assertEquals("final value should equal "+finalValue,
finalValue, iand);
}
}