Livt packages

Livt.Base

Version 1.2.1

Foundational bit, array, string, conversion, formatting, and timing helpers for Livt hardware designs.

Published files (32)

tests/FormatTest.lvt

namespace Livt.Base.Tests

using Livt.Format

/**
 * Exercises Format with a shared fixture instance. Each scenario establishes the inputs
 * and state it needs.
 */
@Test
component FormatTest
{
	// Shared fixture instances, signals, and observation state.
	fmt: Format

	/**
	 * Creates the shared fixture instances (Format). Tests initialize the state required by
	 * their scenario.
	 */
	new()
	{
		this.fmt = new Format()
	}

	// -----------------------------------------------------------------------
	// ToStringByte
	// -----------------------------------------------------------------------

	/**
	 * Checks that ToStringByte formats zero.
	 */
	@Test
	fn ToStringByteFormatsZero()
	{
		var s: string[3] = this.fmt.ToStringByte(0x00)
		assert s == "000"
	}

	/**
	 * Checks that ToStringByte formats single digit with padding.
	 */
	@Test
	fn ToStringByteFormatsSingleDigitWithPadding()
	{
		var s: string[3] = this.fmt.ToStringByte(0x07)
		assert s == "007"
	}

	/**
	 * Checks that ToStringByte formats max byte.
	 */
	@Test
	fn ToStringByteFormatsMaxByte()
	{
		var s: string[3] = this.fmt.ToStringByte(0xFF)
		assert s == "255"
	}

	// -----------------------------------------------------------------------
	// ToStringInt
	// -----------------------------------------------------------------------

	/**
	 * Checks that ToStringInt formats positive value.
	 */
	@Test
	fn ToStringIntFormatsPositiveValue()
	{
		var s: string[11] = this.fmt.ToStringInt(42)
		assert s == "+0000000042"
	}

	/**
	 * Checks that ToStringInt formats negative value.
	 */
	@Test
	fn ToStringIntFormatsNegativeValue()
	{
		var s: string[11] = this.fmt.ToStringInt(-42)
		assert s == "-0000000042"
	}

	/**
	 * Checks that ToStringInt formats zero.
	 */
	@Test
	fn ToStringIntFormatsZero()
	{
		var s: string[11] = this.fmt.ToStringInt(0)
		assert s == "+0000000000"
	}

	/**
	 * Checks that ToStringInt formats large positive value.
	 */
	@Test
	fn ToStringIntFormatsLargePositiveValue()
	{
		var s: string[11] = this.fmt.ToStringInt(2147483647)
		assert s == "+2147483647"
	}

	// -----------------------------------------------------------------------
	// ToStringUInt
	// -----------------------------------------------------------------------

	/**
	 * Checks that ToStringUInt formats zero.
	 */
	@Test
	fn ToStringUIntFormatsZero()
	{
		var value: uint = 0
		var s: string[10] = this.fmt.ToStringUInt(value)
		assert s == "0000000000"
	}

	/**
	 * Checks that ToStringUInt formats positive value.
	 */
	@Test
	fn ToStringUIntFormatsPositiveValue()
	{
		var value: uint = 42
		var s: string[10] = this.fmt.ToStringUInt(value)
		assert s == "0000000042"
	}

	/**
	 * Checks that ToStringUInt formats byte sized value.
	 */
	@Test
	fn ToStringUIntFormatsByteSizedValue()
	{
		var value: uint = 255
		var s: string[10] = this.fmt.ToStringUInt(value)
		assert s == "0000000255"
	}

	/**
	 * Checks that ToStringUInt formats ten digits.
	 */
	@Test
	fn ToStringUIntFormatsTenDigits()
	{
		var value: uint = 1000000000
		var s: string[10] = this.fmt.ToStringUInt(value)
		assert s == "1000000000"
	}

	// -----------------------------------------------------------------------
	// ToHexByte
	// -----------------------------------------------------------------------

	/**
	 * Checks that ToHexByte formats zero.
	 */
	@Test
	fn ToHexByteFormatsZero()
	{
		var s: string[2] = this.fmt.ToHexByte(0x00)
		assert s == "00"
	}

	/**
	 * Checks that ToHexByte formats letters uppercase.
	 */
	@Test
	fn ToHexByteFormatsLettersUppercase()
	{
		var s: string[2] = this.fmt.ToHexByte(0xAF)
		assert s == "AF"
	}

	// -----------------------------------------------------------------------
	// ToBinaryByte
	// -----------------------------------------------------------------------

	/**
	 * Checks that ToBinaryByte formats zero.
	 */
	@Test
	fn ToBinaryByteFormatsZero()
	{
		var s: string[8] = this.fmt.ToBinaryByte(0x00)
		assert s == "00000000"
	}

	/**
	 * Checks that ToBinaryByte formats bits.
	 */
	@Test
	fn ToBinaryByteFormatsBits()
	{
		var s: string[8] = this.fmt.ToBinaryByte(0xA5)
		assert s == "10100101"
	}
	/**
	 * Covers full-width magnitude conversion and reuse after large values.
	 */
	@Test
	fn DecimalBoundariesAndRecovery()
	{
		assert this.fmt.ToStringUInt(0xffffffff as uint) == "4294967295"
		assert this.fmt.ToStringInt(-2147483647 - 1) == "-2147483648"
		assert this.fmt.ToStringInt(2147483647) == "+2147483647"
		assert this.fmt.ToStringUInt(0) == "0000000000"
		assert this.fmt.ToStringByte(255) == "255"
		assert this.fmt.ToStringByte(0) == "000"
	}

}