From cc6672952935a918e790f419295f38c576b4c68a Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Wed, 6 May 2020 12:39:28 +0200 Subject: [PATCH] Growth Rate Library wrapper and tests --- .../Library/GrowthRates/GrowthRateLibrary.cs | 37 ++++++++++++++++ PkmnLibSharp/Utilities/PointerWrapper.cs | 2 +- .../Library/GrowthRateLibraryTests.cs | 42 +++++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 PkmnLibSharp/Library/GrowthRates/GrowthRateLibrary.cs create mode 100644 PkmnLibSharpTests/Library/GrowthRateLibraryTests.cs diff --git a/PkmnLibSharp/Library/GrowthRates/GrowthRateLibrary.cs b/PkmnLibSharp/Library/GrowthRates/GrowthRateLibrary.cs new file mode 100644 index 0000000..139de1a --- /dev/null +++ b/PkmnLibSharp/Library/GrowthRates/GrowthRateLibrary.cs @@ -0,0 +1,37 @@ +using PkmnLibSharp.Utilities; + +namespace PkmnLibSharp.Library.GrowthRates +{ + public class GrowthRateLibrary : PointerWrapper + { + public GrowthRateLibrary(ulong initialCapacity) : base( + Creatureliblibrary.Generated.GrowthRateLibrary.Construct(initialCapacity)) + { + } + + public byte CalculateLevel(string growthRateName, uint experience) + { + byte b = 0; + Creatureliblibrary.Generated.GrowthRateLibrary.CalculateLevel(ref b, Ptr, growthRateName.ToPtr(), + experience).Assert(); + return b; + } + public uint CalculateExperience(string growthRateName, byte level) + { + uint i = 0; + Creatureliblibrary.Generated.GrowthRateLibrary.CalculateExperience(ref i, Ptr, growthRateName.ToPtr(), + level).Assert(); + return i; + } + + public void AddGrowthRate(string name, GrowthRate gr) + { + Creatureliblibrary.Generated.GrowthRateLibrary.AddGrowthRate(Ptr, name.ToPtr(), gr.Ptr).Assert(); + } + + protected override void DeletePtr() + { + Creatureliblibrary.Generated.GrowthRateLibrary.Destruct(Ptr); + } + } +} \ No newline at end of file diff --git a/PkmnLibSharp/Utilities/PointerWrapper.cs b/PkmnLibSharp/Utilities/PointerWrapper.cs index 8a45641..9d74dc4 100644 --- a/PkmnLibSharp/Utilities/PointerWrapper.cs +++ b/PkmnLibSharp/Utilities/PointerWrapper.cs @@ -30,7 +30,7 @@ namespace PkmnLibSharp.Utilities Cached.TryAdd(ptr, weakRef); } - internal static bool TryResolvePointer(IntPtr p, out T result) where T : PointerWrapper + public static bool TryResolvePointer(IntPtr p, out T result) where T : PointerWrapper { if (Cached.TryGetValue(p, out var val)) { diff --git a/PkmnLibSharpTests/Library/GrowthRateLibraryTests.cs b/PkmnLibSharpTests/Library/GrowthRateLibraryTests.cs new file mode 100644 index 0000000..50d16f8 --- /dev/null +++ b/PkmnLibSharpTests/Library/GrowthRateLibraryTests.cs @@ -0,0 +1,42 @@ +using NUnit.Framework; +using PkmnLibSharp.Library.GrowthRates; + +namespace PkmnLibSharpTests.Library +{ + public class GrowthRateLibraryTests + { + [Test] + public void ConstructDestruct() + { + var gr = new GrowthRateLibrary(0); + gr.Dispose(); + } + + [Test] + public void AddGrowthRate() + { + var gr = new GrowthRateLibrary(1); + gr.AddGrowthRate("foobar", new LookupGrowthRate(new uint[]{0,10,20,30,40,50})); + gr.Dispose(); + } + + [Test] + public void CalculateLevel() + { + var gr = new GrowthRateLibrary(1); + gr.AddGrowthRate("foobar", new LookupGrowthRate(new uint[]{0,10,20,30,40,50})); + Assert.AreEqual(5, gr.CalculateLevel("foobar", 40)); + gr.Dispose(); + } + + [Test] + public void CalculateExperience() + { + var gr = new GrowthRateLibrary(1); + gr.AddGrowthRate("foobar", new LookupGrowthRate(new uint[]{0,10,20,30,40,50})); + Assert.AreEqual(40, gr.CalculateExperience("foobar", 5)); + gr.Dispose(); + } + + } +} \ No newline at end of file