Livt packages
Livt.IO
Version 1.8.1
Memory, UART, I2C, SPI, and Ethernet input/output components for Livt hardware designs.
Published files (126)
tests/memory/RamTest.lvt
namespace Livt.IO.Tests
using Livt.IO
/**
* Exercises Ram with a shared fixture instance. Each scenario establishes the inputs and
* state it needs.
*/
@Test
component RamTest
{
// Shared fixture instances, signals, and observation state.
ram: Ram<byte, 2048>
/**
* Creates the shared fixture instances (Ram). Tests initialize the state required by their
* scenario.
*/
new()
{
ram = new Ram<byte, 2048>()
}
/**
* Checks that a written byte can be read back at the same address.
*/
@Test
fn TestWriteAndReadByte()
{
ram.Write(0, 0b10101010)
var value = ram.Read(0)
assert (value == 0b10101010)
}
/**
* Checks readback of distinct values written to multiple addresses.
*/
@Test
fn TestWriteAndReadMultipleBytes()
{
ram.Write(0, 0b11110000)
ram.Write(1, 0b00001111)
ram.Write(10, 0b10101010)
var value0 = ram.Read(0)
var value1 = ram.Read(1)
var value10 = ram.Read(10)
assert (value0 == 0b11110000)
assert (value1 == 0b00001111)
assert (value10 == 0b10101010)
}
/**
* Checks the overwrite existing value case.
*/
@Test
fn TestOverwriteExistingValue()
{
ram.Write(5, 0b11111111)
var initial = ram.Read(5)
assert (initial == 0b11111111)
ram.Write(5, 0b00000000)
var updated = ram.Read(5)
assert (updated == 0b00000000)
ram.Write(5, 0b10101010)
var finalValue = ram.Read(5)
assert (finalValue == 0b10101010)
}
/**
* Checks the boundary addresses case.
*/
@Test
fn TestBoundaryAddresses()
{
ram.Write(0, 0b00000001)
var addr0 = ram.Read(0)
assert (addr0 == 0b00000001)
ram.Write(2047, 0b11111110)
var addr2047 = ram.Read(2047)
assert (addr2047 == 0b11111110)
var addr0Check = ram.Read(0)
assert (addr0Check == 0b00000001)
}
/**
* Checks the all zeros and ones case.
*/
@Test
fn TestAllZerosAndOnes()
{
ram.Write(20, 0b00000000)
var zeros = ram.Read(20)
assert (zeros == 0b00000000)
ram.Write(21, 0b11111111)
var ones = ram.Read(21)
assert (ones == 0b11111111)
}
/**
* Checks the alternating bit patterns case.
*/
@Test
fn TestAlternatingBitPatterns()
{
ram.Write(30, 0b01010101)
var pattern1 = ram.Read(30)
assert (pattern1 == 0b01010101)
ram.Write(31, 0b10101010)
var pattern2 = ram.Read(31)
assert (pattern2 == 0b10101010)
}
/**
* Checks the sequential addresses case.
*/
@Test
fn TestSequentialAddresses()
{
ram.Write(100, 0b00000001)
ram.Write(101, 0b00000010)
ram.Write(102, 0b00000011)
ram.Write(103, 0b00000100)
ram.Write(104, 0b00000101)
assert (ram.Read(100) == 0b00000001)
assert (ram.Read(101) == 0b00000010)
assert (ram.Read(102) == 0b00000011)
assert (ram.Read(103) == 0b00000100)
assert (ram.Read(104) == 0b00000101)
}
/**
* Checks the data independence case.
*/
@Test
fn TestDataIndependence()
{
ram.Write(50, 0b11001100)
ram.Write(51, 0b00110011)
ram.Write(52, 0b11110000)
var val50 = ram.Read(50)
var val51 = ram.Read(51)
var val52 = ram.Read(52)
assert (val50 == 0b11001100)
assert (val51 == 0b00110011)
assert (val52 == 0b11110000)
ram.Write(51, 0b10101010)
assert (ram.Read(50) == 0b11001100)
assert (ram.Read(51) == 0b10101010)
assert (ram.Read(52) == 0b11110000)
}
/**
* Checks the sparse address pattern case.
*/
@Test
fn TestSparseAddressPattern()
{
ram.Write(0, 0b00000001)
ram.Write(512, 0b01000000)
ram.Write(1024, 0b10000000)
ram.Write(1536, 0b11000000)
ram.Write(2047, 0b11111111)
assert (ram.Read(0) == 0b00000001)
assert (ram.Read(512) == 0b01000000)
assert (ram.Read(1024) == 0b10000000)
assert (ram.Read(1536) == 0b11000000)
assert (ram.Read(2047) == 0b11111111)
}
/**
* Checks the constants and valid address case.
*/
@Test
fn TestConstantsAndValidAddress()
{
assert (this.ram.ADDRESS_WIDTH == 11)
assert (this.ram.CAPACITY == 2048)
assert (this.ram.MAX_ADDRESS == 2047)
assert (ram.IsValidAddress(0) == true)
assert (ram.IsValidAddress(2047) == true)
assert (ram.IsValidAddress(-1) == false)
assert (ram.IsValidAddress(2048) == false)
}
/**
* Checks the invalid addresses are safe case.
*/
@Test
fn TestInvalidAddressesAreSafe()
{
ram.Write(0, 0x5A)
ram.Write(-1, 0xFF)
ram.Write(2048, 0xFF)
assert (ram.Read(-1) == 0x00)
assert (ram.Read(2048) == 0x00)
assert (ram.Read(0) == 0x5A)
}
}