All pastes #15124 Raw Edit

Someone

public text v1 · immutable
#15124 ·published 2005-06-20 20:05 UTC
rendered paste body
import junit.framework.*;
import java.util.Random;
import java.io.IOException;
import java.io.InputStream;
import Utils.*;

public class testStorage extends TestCase
{
	public testStorage(String name)
	{
		super(name);
	}


	private Storage m_disk;


	public void setUp() {
		// Creates a dummy disk (10kb) for use in the tests
		// All but a couple of tests will make use of this
		m_disk = new Storage(10240);

		// Fill with sequential incrementing numbers as shorts
		for ( short i = 0; i < m_disk.getSize() / 2; ++i ) {
			m_disk.writeShort(i);
		}

		m_disk.seekFromStart(0);
	}




	private int getAfterShort(int pos) {
		return pos + 2 < m_disk.getSize() ? m_disk.getShort(pos + 2) : 0;
	}

	private int getBeforeShort(int pos) {
		return pos - 2 > 0 ? m_disk.getShort(pos - 2) : 0;
	}


	public void testSeqReadShort()
	{
		for ( short i = 0; i < m_disk.getSize() / 2; ++i ) {
			assertEquals(m_disk.readShort(), i);
			assertEquals(m_disk.getPosition(), i * 2 + 2);
		}
	}


	public void testRandomReadShort()
	{
		Random r = new Random();
		int seekPos = 512; // Seek to a non-zero position
		m_disk.seekFromStart(seekPos);

		for ( short i = 0; i < m_disk.getSize(); ++i ) {
			int x = r.nextInt(m_disk.getSize() / 2);

			assertEquals(m_disk.getShort(x * 2), x);
			assertEquals(m_disk.getPosition(), seekPos);
		}
	}


	public void testSeqWriteShort()
	{
		int count = m_disk.getSize() / 2;
		int seekPos = 512; // Seek to a non-zero position
		m_disk.seekFromStart(seekPos);

		for ( short x = 0; x < count; ++x ) {
			int left = getBeforeShort(x * 2);
			int right = getAfterShort(x * 2);

			m_disk.putShort(x * 2, (short)(-x));
			assertEquals(m_disk.getShort(x * 2), (short)(-x));
			assertEquals(m_disk.getPosition(), seekPos);

			assertEquals(left, getBeforeShort(x * 2));
			assertEquals(right, getAfterShort(x * 2));
		}
	}

	public void testRandomWriteShort()
	{
		Random r = new Random();
		int seekPos = 512; // Seek to a non-zero position
		m_disk.seekFromStart(seekPos);

		int count = m_disk.getSize() / 2;
		for ( short i = 0; i < count; ++i ) {
			int x = r.nextInt(count);

			int left = getBeforeShort(x * 2);
			int right = getAfterShort(x * 2);

			m_disk.putShort(x * 2, i);
			assertEquals(m_disk.getShort(x * 2), i);
			assertEquals(m_disk.getPosition(), seekPos);

			assertEquals(left, getBeforeShort(x * 2));
			assertEquals(right, getAfterShort(x * 2));
		}
	}


	public void testSeqReadByte()
	{
		for ( short i = 0; i < m_disk.getSize(); ++i ) {
			assertEquals(m_disk.getPosition(), i);
			assertEquals(m_disk.readByte(), i % 2 == 0 ? (byte)(i >> 9) : (byte)(i / 2));
			assertEquals(m_disk.getPosition(), i + 1);
		}
	}

	public void testRandomReadByte()
	{
		Random r = new Random();
		int seekPos = 512; // Seek to a non-zero position
		m_disk.seekFromStart(seekPos);

		for ( short i = 0; i < m_disk.getSize(); ++i ) {
			int x = r.nextInt(m_disk.getSize() / 2);

			assertEquals(m_disk.getByte(x), x % 2 == 0 ? (byte)(x >> 9) : (byte)(x / 2));
			assertEquals(m_disk.getPosition(), seekPos);
		}
	}


	private int getAfterByte(int pos) {
		return pos + 1 < m_disk.getSize() ? m_disk.getByte(pos + 1) : 0;
	}

	private int getBeforeByte(int pos) {
		return pos - 1 > 0 ? m_disk.getByte(pos - 1) : 0;
	}


	public void testSeqWriteByte()
	{
		int count = m_disk.getSize();
		int seekPos = 512; // Seek to a non-zero position
		m_disk.seekFromStart(seekPos);

		for ( int x = 0; x < count; ++x ) {
			int left = getBeforeByte(x);
			int right = getAfterByte(x);

			m_disk.putByte(x, (byte)(x));
			assertEquals(m_disk.getByte(x), (byte)(x));
			assertEquals(m_disk.getPosition(), seekPos);

			assertEquals(left, getBeforeByte(x));
			assertEquals(right, getAfterByte(x));
		}
	}


	public void testRandomWriteByte()
	{
		Random r = new Random();
		int seekPos = 512; // Seek to a non-zero position
		m_disk.seekFromStart(seekPos);

		int count = m_disk.getSize() / 2;
		for ( short i = 0; i < count; ++i ) {
			int x = r.nextInt(count);

			int left = getBeforeByte(x);
			int right = getAfterByte(x);

			m_disk.putByte(x, (byte)(i));
			assertEquals(m_disk.getByte(x), (byte)(i));
			assertEquals(m_disk.getPosition(), seekPos);

			assertEquals(left, getBeforeByte(x));
			assertEquals(right, getAfterByte(x));
		}
	}


	public void testLoadFromFile() throws IOException
	{
		InputStream stream = testStorage.class.getResourceAsStream("storageData.dat");
		assertEquals(42 * 42, m_disk.loadFromFile(stream));

		for (int i = 0; i < 42 * 42; ++i) {
			assertEquals((byte)(i % 256), m_disk.readByte());
		}
	}
}