Livt packages

Livt.Collections

Version 1.4.2

Fixed-capacity FIFOs, queues, stacks, circular buffers, lists, and bit sets for Livt hardware.

Published files (62)

tests/queue/QueueCapacityTest.lvt

namespace Livt.Collections.Tests

using Livt.Collections

/**
 * Verifies storage specialization at both boundary capacities and multiple types.
 */
@Test
component QueueCapacityTest
{
	// Shared fixture instances, signals, and observation state.
	single: Livt.Collections.Queue<byte, 1>
	large: Livt.Collections.Queue<byte, 64>
	integers: Livt.Collections.Queue<int, 3>
	flags: Livt.Collections.Queue<bool, 1>

	/**
	 * Allocates independent queues so the tests do not share content.
	 */
	new()
	{
		this.single = new Livt.Collections.Queue<byte, 1>()
		this.large = new Livt.Collections.Queue<byte, 64>()
		this.integers = new Livt.Collections.Queue<int, 3>()
		this.flags = new Livt.Collections.Queue<bool, 1>()
	}

	/**
	 * Capacity one wraps on every transfer and rejects both empty and full access.
	 */
	@Test
	fn TestCapacityOne()
	{
		this.single.Clear()
		var value: byte

		for (var index = 0; index < 4; index++) {
			assert this.single.TryEnqueue(index as byte) == true
			assert this.single.TryEnqueue(0xFF) == false
			assert this.single.GetCount() == 1
			assert this.single.GetSpace() == 0
			assert this.single.TryDequeue(value) == true
			assert value == index as byte
			assert this.single.TryDequeue(value) == false
			assert value == 0x00
		}
	}

	/**
	 * Fills all 64 cells and checks ordered draining and full rejection.
	 */
	@Test
	fn TestCapacity64()
	{
		this.large.Clear()

		for (var index = 0; index < 64; index++) {
			assert this.large.TryEnqueue(index as byte) == true
		}

		assert this.large.GetCount() == 64
		assert this.large.GetSpace() == 0
		assert this.large.TryEnqueue(0xFF) == false
		var value: byte

		for (var index = 0; index < 64; index++) {
			assert this.large.TryDequeue(value) == true
			assert value == index as byte
		}

		assert this.large.GetCount() == 0
		assert this.large.GetSpace() == 64
	}

	/**
	 * Checks the payload types and clear case.
	 */
	@Test
	fn TestPayloadTypesAndClear()
	{
		this.integers.Clear()
		assert this.integers.TryEnqueue(-123) == true
		var number: int
		assert this.integers.TryDequeue(number) == true
		assert number == -123
		assert this.integers.TryEnqueue(456) == true
		this.integers.Clear()
		assert this.integers.TryDequeue(number) == false
		assert number == 0
		assert this.flags.TryEnqueue(true) == true
		var flag: bool
		assert this.flags.TryDequeue(flag) == true
		assert flag == true
		assert this.flags.TryDequeue(flag) == false
		assert flag == false
	}
}