using System; using System.Collections.Generic; using System.Text; using UnitTestSharp; using Sunweaver.VM; namespace Sunweaver.UnitTesting.VM { public class MemoryTest : TestFixture { Int16 testvalue = 599; Int16 testlocation = 10; Memory mem; public MemoryTest() { mem = new Memory(); } public void MemoryRoundTripsSuccessfully() { mem[testlocation] = testvalue; CheckTrue( mem[testlocation] == testvalue); } public void ThrowsExceptionOutOfBounds_Write() { CheckThrow(typeof(Exception)); mem[2000] = 10; } public void ThrowsExceptionOutOfBounds_Read() { CheckThrow(typeof(Exception)); int a = mem[2000]; } public void NegativeIndexes_Read() { mem[testlocation] = testvalue; CheckEqual(testvalue, mem[-testlocation]); } public void NegativeIndexes_Write() { mem[-testlocation] = testvalue; CheckEqual(testvalue, mem[testlocation]); } public void LastMemorySlot() { mem[Memory.MemorySlots] = 10; CheckEqual(10, mem[Memory.MemorySlots]); } public void StoreToZeroDoesNothing() { mem[0] = 10; CheckEqual(0, mem[0]); } public class FlattenTests : UnitTestSharp.TestFixture { public void Basic() { Memory mem = new Memory(); mem[500] = 10; CheckEqual(0, mem.GetBase(500)); mem.Flatten(); CheckEqual(10, mem.GetBase(500)); } public void NotChanged() { Memory mem = new Memory(); mem[500] = 10; mem.Flatten(); CheckEqual(0, mem.GetBase(499)); } } public class CopyAndFlattenTo : UnitTestSharp.TestFixture { public void BasicArray() { Int16[] memoryTarget = new Int16[Sunweaver.VM.Memory.MemorySlots + 1]; Memory memorySource = new Memory(); memorySource[500] = 10; memorySource.CopyAndFlattenTo(memoryTarget); CheckEqual(10, memoryTarget[500]); } public void BasicMemory() { Memory memoryTarget = new Memory(); Memory memorySource = new Memory(); memorySource[500] = 10; memorySource.CopyAndFlattenTo(memoryTarget); CheckEqual(10, memoryTarget[500]); } public void ArrayNotSizedCorrectly() { Int16[] memoryTarget = new Int16[Sunweaver.VM.Memory.MemorySlots]; Memory memorySource = new Memory(); memorySource[500] = 10; CheckThrow(typeof(Exception)); memorySource.CopyAndFlattenTo(memoryTarget); } public void MemoryClearsFilters() { Memory memoryTarget = new Memory(); Memory memorySource = new Memory(); memorySource[500] = 10; memorySource.CopyAndFlattenTo(memoryTarget); CheckEqual(10, memoryTarget.GetBase(500)); } } } }