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/i2c/I2cRegisterSlaveTest.lvt
namespace Livt.IO.Tests
using Livt.IO
/**
* Test bus adapter that exposes observed line levels and low-drive requests without
* physical board pins.
*/
component I2CRegisterSlaveSmokeBus : I2CBus
{
/**
* Initializes fixture state and constructor bindings. Test cases share the fixture
* instance rather than constructing a fresh subject for each method.
*/
new()
{
this.scl = 0b1
this.sda = 0b1
}
}
/**
* Exercises I2CRegisterSlave with a shared fixture instance. Each scenario establishes the
* inputs and state it needs.
*/
@Test
component I2CRegisterSlaveTest
{
// Shared fixture instances, signals, and observation state.
bus: I2CRegisterSlaveSmokeBus
registers: I2CRegisterSlave
/**
* Creates the shared fixture instances (I2CRegisterSlaveSmokeBus, I2CRegisterSlave). Tests
* initialize the state required by their scenario.
*/
new()
{
this.bus = new I2CRegisterSlaveSmokeBus()
this.registers = new I2CRegisterSlave(this.bus, 0x42)
}
/**
* Checks the initial pointer state case.
*/
@Test
fn TestInitialPointerState()
{
assert this.registers.HasPointer() == false
assert this.registers.GetPointer() == 0x00
assert this.registers.HasWrittenRegister() == false
}
/**
* Checks the set and get register case.
*/
@Test
fn TestSetAndGetRegister()
{
this.registers.SetRegister(0x10, 0xAB)
this.registers.SetRegister(0x80, 0xCD)
assert this.registers.GetRegister(0x10) == 0xAB
assert this.registers.GetRegister(0x80) == 0xCD
}
/**
* Checks the pointer can be set and cleared case.
*/
@Test
fn TestPointerCanBeSetAndCleared()
{
this.registers.SetPointer(0x21)
assert this.registers.HasPointer() == true
assert this.registers.GetPointer() == 0x21
this.registers.ClearPointer()
assert this.registers.HasPointer() == false
assert this.registers.GetPointer() == 0x00
}
/**
* Checks that ClearWrittenRegister flag.
*/
@Test
fn TestClearWrittenRegisterFlag()
{
this.registers.ClearWrittenRegister()
assert this.registers.HasWrittenRegister() == false
assert this.registers.GetWrittenRegister() == 0x00
assert this.registers.GetWrittenValue() == 0x00
}
/**
* Checks that AcceptWriteByte selects pointer then writes and increments.
*/
@Test
fn TestAcceptWriteByteSelectsPointerThenWritesAndIncrements()
{
this.registers.AcceptWriteByte(0x10)
assert this.registers.HasPointer() == true
assert this.registers.GetPointer() == 0x10
assert this.registers.HasWrittenRegister() == false
this.registers.AcceptWriteByte(0xAB)
assert this.registers.GetRegister(0x10) == 0xAB
assert this.registers.GetPointer() == 0x11
assert this.registers.HasWrittenRegister() == true
assert this.registers.GetWrittenRegister() == 0x10
assert this.registers.GetWrittenValue() == 0xAB
this.registers.AcceptWriteByte(0xCD)
assert this.registers.GetRegister(0x11) == 0xCD
assert this.registers.GetPointer() == 0x12
assert this.registers.GetWrittenRegister() == 0x11
assert this.registers.GetWrittenValue() == 0xCD
}
/**
* Checks that AcceptWriteByte wraps pointer.
*/
@Test
fn TestAcceptWriteByteWrapsPointer()
{
this.registers.SetPointer(0xFF)
this.registers.AcceptWriteByte(0x5A)
assert this.registers.GetRegister(0xFF) == 0x5A
assert this.registers.GetPointer() == 0x00
assert this.registers.GetWrittenRegister() == 0xFF
assert this.registers.GetWrittenValue() == 0x5A
}
/**
* Checks the current register follows pointer case.
*/
@Test
fn TestCurrentRegisterFollowsPointer()
{
this.registers.SetRegister(0x22, 0x66)
this.registers.SetPointer(0x22)
assert this.registers.GetCurrentRegister() == 0x66
this.registers.PrepareReadByte()
assert this.registers.GetCurrentRegister() == 0x66
}
/**
* Checks that HandleTransmittedByte advances only on ack.
*/
@Test
fn TestHandleTransmittedByteAdvancesOnlyOnAck()
{
this.registers.SetRegister(0x40, 0x11)
this.registers.SetRegister(0x41, 0x22)
this.registers.SetPointer(0x40)
this.registers.HandleTransmittedByte(true)
assert this.registers.GetPointer() == 0x41
assert this.registers.GetCurrentRegister() == 0x22
this.registers.HandleTransmittedByte(false)
assert this.registers.GetPointer() == 0x41
assert this.registers.GetCurrentRegister() == 0x22
}
}