forked from mirror/DotRecast
added WangHash for DtNodePool
This commit is contained in:
parent
94ed3d646c
commit
2d3ca5b321
|
@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
- Added DtNodePool tests
|
- Added DtNodePool tests
|
||||||
|
- Added WangHash() for DtNodePool
|
||||||
- Added avg, min, max, sampling updated times in CrowdAgentProfilingTool
|
- Added avg, min, max, sampling updated times in CrowdAgentProfilingTool
|
||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
|
@ -1,10 +1,26 @@
|
||||||
namespace DotRecast.Core
|
using System.Runtime.CompilerServices;
|
||||||
|
|
||||||
|
namespace DotRecast.Core
|
||||||
{
|
{
|
||||||
public static class RcHashCodes
|
public static class RcHashCodes
|
||||||
{
|
{
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
public static int CombineHashCodes(int h1, int h2)
|
public static int CombineHashCodes(int h1, int h2)
|
||||||
{
|
{
|
||||||
return (((h1 << 5) + h1) ^ h2);
|
return (((h1 << 5) + h1) ^ h2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// From Thomas Wang, https://gist.github.com/badboy/6267743
|
||||||
|
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||||
|
public static uint WangHash(uint a)
|
||||||
|
{
|
||||||
|
a = (~a) + (a << 18); // a = (a << 18) - a - 1;
|
||||||
|
a = a ^ (a >> 31);
|
||||||
|
a = a * 21; // a = (a + (a << 2)) + (a << 4);
|
||||||
|
a = a ^ (a >> 11);
|
||||||
|
a = a + (a << 6);
|
||||||
|
a = a ^ (a >> 22);
|
||||||
|
return (uint)a;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -24,11 +24,13 @@ namespace DotRecast.Detour
|
||||||
{
|
{
|
||||||
public class DtNodePool
|
public class DtNodePool
|
||||||
{
|
{
|
||||||
private readonly Dictionary<long, List<DtNode>> m_map = new Dictionary<long, List<DtNode>>();
|
private readonly Dictionary<long, List<DtNode>> m_map;
|
||||||
private readonly List<DtNode> m_nodes = new List<DtNode>();
|
private readonly List<DtNode> m_nodes;
|
||||||
|
|
||||||
public DtNodePool()
|
public DtNodePool()
|
||||||
{
|
{
|
||||||
|
m_map = new Dictionary<long, List<DtNode>>();
|
||||||
|
m_nodes = new List<DtNode>();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Clear()
|
public void Clear()
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
using NUnit.Framework;
|
||||||
|
|
||||||
|
namespace DotRecast.Core.Test;
|
||||||
|
|
||||||
|
public class RcHashCodesTest
|
||||||
|
{
|
||||||
|
[Test]
|
||||||
|
public void TestCombineHashCodes()
|
||||||
|
{
|
||||||
|
Assert.That(RcHashCodes.CombineHashCodes(0, 0), Is.EqualTo(0));
|
||||||
|
Assert.That(RcHashCodes.CombineHashCodes(int.MaxValue, int.MaxValue), Is.EqualTo(32));
|
||||||
|
Assert.That(RcHashCodes.CombineHashCodes(int.MaxValue, int.MinValue), Is.EqualTo(-33));
|
||||||
|
Assert.That(RcHashCodes.CombineHashCodes(int.MinValue, int.MinValue), Is.EqualTo(0));
|
||||||
|
Assert.That(RcHashCodes.CombineHashCodes(int.MinValue, int.MaxValue), Is.EqualTo(-1));
|
||||||
|
Assert.That(RcHashCodes.CombineHashCodes(int.MaxValue / 2, int.MaxValue / 2), Is.EqualTo(32));
|
||||||
|
}
|
||||||
|
|
||||||
|
[Test]
|
||||||
|
public void TestIntHash()
|
||||||
|
{
|
||||||
|
Assert.That(RcHashCodes.WangHash(0), Is.EqualTo(4158654902));
|
||||||
|
Assert.That(RcHashCodes.WangHash(1), Is.EqualTo(357654460));
|
||||||
|
Assert.That(RcHashCodes.WangHash(2), Is.EqualTo(715307540));
|
||||||
|
Assert.That(RcHashCodes.WangHash(3), Is.EqualTo(1072960876));
|
||||||
|
|
||||||
|
Assert.That(RcHashCodes.WangHash(4), Is.EqualTo(1430614333));
|
||||||
|
Assert.That(RcHashCodes.WangHash(5), Is.EqualTo(1788267159));
|
||||||
|
Assert.That(RcHashCodes.WangHash(6), Is.EqualTo(2145921005));
|
||||||
|
Assert.That(RcHashCodes.WangHash(7), Is.EqualTo(2503556531));
|
||||||
|
|
||||||
|
Assert.That(RcHashCodes.WangHash(8), Is.EqualTo(2861226262));
|
||||||
|
Assert.That(RcHashCodes.WangHash(9), Is.EqualTo(3218863982));
|
||||||
|
Assert.That(RcHashCodes.WangHash(10), Is.EqualTo(3576533554));
|
||||||
|
Assert.That(RcHashCodes.WangHash(11), Is.EqualTo(3934169234));
|
||||||
|
|
||||||
|
//
|
||||||
|
Assert.That(RcHashCodes.WangHash(int.MaxValue), Is.EqualTo(1755403298));
|
||||||
|
Assert.That(RcHashCodes.WangHash(uint.MaxValue), Is.EqualTo(3971045735));
|
||||||
|
}
|
||||||
|
}
|
|
@ -5,7 +5,7 @@ using NUnit.Framework;
|
||||||
|
|
||||||
namespace DotRecast.Core.Test;
|
namespace DotRecast.Core.Test;
|
||||||
|
|
||||||
public class Vector3Tests
|
public class Vector3Test
|
||||||
{
|
{
|
||||||
[Test]
|
[Test]
|
||||||
[Repeat(100000)]
|
[Repeat(100000)]
|
Loading…
Reference in New Issue