using System.Collections;
using PkmnLib.Static.Utils;

namespace PkmnLib.Tests.Static;

public class StringKeyTests
{
    private static IEnumerable StringKeyEqualityTestCases
    {
        get
        { 
            yield return new TestCaseData("test", "test").Returns(true);
            yield return new TestCaseData("test", "test2").Returns(false);
            yield return new TestCaseData("test2", "test2").Returns(true);
            yield return new TestCaseData("Test", "test").Returns(true);
            yield return new TestCaseData("TeSt", "tesT").Returns(true);
            yield return new TestCaseData("TeSt", "tesv").Returns(false);
        }
    }
    
    [Test]
    [TestCaseSource(nameof(StringKeyEqualityTestCases))]
    public bool StringKeyEqualityTest(string k1, string k2)
    {
        var sk1 = new StringKey(k1);
        var sk2 = new StringKey(k2);
        return sk1 == sk2;
    }
    
    [Test]
    [TestCaseSource(nameof(StringKeyEqualityTestCases))]
    public bool HashCodeEqualityTest(string k1, string k2)
    {
        var sk1 = new StringKey(k1);
        var sk2 = new StringKey(k2);
        return sk1.GetHashCode() == sk2.GetHashCode();
    }
    
    [Test]
    [TestCaseSource(nameof(StringKeyEqualityTestCases))]
    public bool HashSetEqualityTest(string k1, string k2)
    {
        var sk1 = new StringKey(k1);
        var sk2 = new StringKey(k2);
        var hs = new HashSet<StringKey> { sk1 };
        return hs.Contains(sk2);
    }
}