﻿using System;
using System.Collections.Generic;
using AsmodeeDigital.Common.Plugin.Utils;
using NUnit.Framework;

namespace AsmodeeNet.Tests.Utils
{
    public class FormatTest
    {
        public IEnumerable<object[]> ProvideBigInts()
        {
            yield return new object[] { 0UL, "0" };
            yield return new object[] { 9UL, "9" };
            yield return new object[] { 10UL, "a" };
            yield return new object[] { 11UL, "b" };
            yield return new object[] { 12UL, "c" };
            yield return new object[] { 13UL, "d" };
            yield return new object[] { 14UL, "e" };
            yield return new object[] { 15UL, "f" };
            yield return new object[] { 16UL, "10" };
            yield return new object[] { 255UL, "ff" };
            yield return new object[] { 256UL, "100" };
        }

        public IEnumerable<object[]> ProvideBigIntStrings()
        {
            yield return new object[] { "0", "0" };
            yield return new object[] { "9", "9" };
            yield return new object[] { "10", "a" };
            yield return new object[] { "11", "b" };
            yield return new object[] { "12", "c" };
            yield return new object[] { "13", "d" };
            yield return new object[] { "14", "e" };
            yield return new object[] { "15", "f" };
            yield return new object[] { "16", "10" };
            yield return new object[] { "255", "ff" };
            yield return new object[] { "256", "100" };
        }

        [Test, TestCaseSource("ProvideBigInts")]
        public void ItShouldReturnHexStringsFromInts(UInt64 i, string expected)
        {
            string actual = Format.HexStringFromUInt64(i);
            Assert.AreEqual(expected, actual);
        }

        [Test, TestCaseSource("ProvideBigIntStrings")]
        public void ItShouldReturnHexStringsFromString(string input, string expected)
        {
            string actual = Format.HexStringFromString(input);
            Assert.AreEqual(expected, actual);
        }
    }
}
