Files
ksymon/src/test/java/com/loomcom/symon/MemoryRangeTest.java
T
Seth J. Morabito ac88786df7 - Continued refactoring of address decoding.
- Device read and write may now throw MemoryAccessException, and appropriate
  throws clauses have been added throughout the code.
2010-01-09 16:53:04 -08:00

137 lines
3.7 KiB
Java

package com.loomcom.symon;
import junit.framework.*;
import com.loomcom.symon.exceptions.*;
/**
*
*/
public class MemoryRangeTest extends TestCase {
public MemoryRangeTest(String testName) {
super(testName);
}
public static Test suite() {
return new TestSuite(MemoryRangeTest.class);
}
public void testConstructorThrowsWhenInvalid() {
// All of these should raise MemoryRangeException
doInvalidMemoryRangeTest(0, -1);
doInvalidMemoryRangeTest(-1, 0);
doInvalidMemoryRangeTest(0, 0);
doInvalidMemoryRangeTest(1, 1);
doInvalidMemoryRangeTest(1, 0);
doInvalidMemoryRangeTest(2, 1);
}
public void testConstructorShouldNotThrow() throws MemoryRangeException {
// None of these should throw.
new MemoryRange(0, 1);
new MemoryRange(0, 2);
new MemoryRange(1, 2);
new MemoryRange(2, 10);
}
public void testStartAddress() throws MemoryRangeException {
MemoryRange r = new MemoryRange(0x101, 0x202);
assertEquals(0x101, r.startAddress());
}
public void testEndAddress() throws MemoryRangeException {
MemoryRange r = new MemoryRange(0x101, 0x202);
assertEquals(0x202, r.endAddress());
}
public void testOverlaps() throws MemoryRangeException {
MemoryRange a = new MemoryRange(0x0100, 0x01ff);
MemoryRange b = new MemoryRange(0x0200, 0x02ff);
MemoryRange c = new MemoryRange(0x01a0, 0x01af); // inside a
MemoryRange d = new MemoryRange(0x00ff, 0x01a0); // overlaps a
MemoryRange e = new MemoryRange(0x01a0, 0x02ff); // overlaps a
MemoryRange f = new MemoryRange(0x02a0, 0x02af); // inside b
MemoryRange g = new MemoryRange(0x01ff, 0x02a0); // overlaps b
MemoryRange h = new MemoryRange(0x02a0, 0x03ff); // overlaps b
assertFalse(a.overlaps(b));
assertFalse(b.overlaps(a));
assertTrue(a.overlaps(c));
assertTrue(c.overlaps(a));
assertTrue(a.overlaps(d));
assertTrue(d.overlaps(a));
assertTrue(a.overlaps(e));
assertTrue(e.overlaps(a));
assertTrue(b.overlaps(f));
assertTrue(f.overlaps(b));
assertTrue(b.overlaps(g));
assertTrue(g.overlaps(b));
assertTrue(b.overlaps(h));
assertTrue(h.overlaps(b));
}
public void testToString() throws MemoryRangeException {
MemoryRange a = new MemoryRange(0x0abf, 0xff00);
assertEquals("@0x0abf-0xff00", a.toString());
MemoryRange b = new MemoryRange(0, 255);
assertEquals("@0x0000-0x00ff", b.toString());
MemoryRange c = new MemoryRange(0, 65535);
assertEquals("@0x0000-0xffff", c.toString());
}
public void testIncluded() throws MemoryRangeException {
MemoryRange a = new MemoryRange(0x0100, 0x0fff);
assertFalse(a.includes(0x0000));
assertFalse(a.includes(0x00ff));
assertTrue(a.includes(0x0100));
assertTrue(a.includes(0x0fff));
assertFalse(a.includes(0x1000));
assertFalse(a.includes(0xffff));
}
public void testCompareTo() throws MemoryRangeException {
MemoryRange a = new MemoryRange(0x0000, 0x0100);
MemoryRange b = new MemoryRange(0x0200, 0x0300);
MemoryRange c = new MemoryRange(0x0200, 0x0300);
// a < b
assertTrue(a.compareTo(b) == -1);
// b > a
assertTrue(b.compareTo(a) == 1);
// Identity
assertTrue(a.compareTo(a) == 0);
assertTrue(b.compareTo(b) == 0);
// Equality
assertTrue(b.compareTo(c) == 0);
assertTrue(c.compareTo(b) == 0);
// Null
try {
a.compareTo(null);
fail("Should have thrown NullPointerException");
} catch (NullPointerException ex) {
// expected
}
}
// Helper method.
public void doInvalidMemoryRangeTest(int start, int end) {
try {
new MemoryRange(start, end);
fail("MemoryRangeException should have been thrown.");
} catch (MemoryRangeException e) {
// Expected.
}
}
}