- Device read and write may now throw MemoryAccessException, and appropriate throws clauses have been added throughout the code.
137 lines
3.7 KiB
Java
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.
|
|
}
|
|
}
|
|
|
|
} |