diff --git a/.idea/.idea.PetroglyphTools/.idea/copyright/Alamo_Engine_Tools_Copyright_Profile.xml b/.idea/.idea.PetroglyphTools/.idea/copyright/Alamo_Engine_Tools_Copyright_Profile.xml
new file mode 100644
index 000000000..a57a5ce80
--- /dev/null
+++ b/.idea/.idea.PetroglyphTools/.idea/copyright/Alamo_Engine_Tools_Copyright_Profile.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.PetroglyphTools/.idea/copyright/profiles_settings.xml b/.idea/.idea.PetroglyphTools/.idea/copyright/profiles_settings.xml
new file mode 100644
index 000000000..690b7667c
--- /dev/null
+++ b/.idea/.idea.PetroglyphTools/.idea/copyright/profiles_settings.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.PetroglyphTools/.idea/developer-tools.xml b/.idea/.idea.PetroglyphTools/.idea/developer-tools.xml
new file mode 100644
index 000000000..37021a5a2
--- /dev/null
+++ b/.idea/.idea.PetroglyphTools/.idea/developer-tools.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.PetroglyphTools/.idea/indexLayout.xml b/.idea/.idea.PetroglyphTools/.idea/indexLayout.xml
new file mode 100644
index 000000000..7b08163ce
--- /dev/null
+++ b/.idea/.idea.PetroglyphTools/.idea/indexLayout.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.PetroglyphTools/.idea/projectSettingsUpdater.xml b/.idea/.idea.PetroglyphTools/.idea/projectSettingsUpdater.xml
new file mode 100644
index 000000000..64af657f5
--- /dev/null
+++ b/.idea/.idea.PetroglyphTools/.idea/projectSettingsUpdater.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.idea.PetroglyphTools/.idea/vcs.xml b/.idea/.idea.PetroglyphTools/.idea/vcs.xml
new file mode 100644
index 000000000..35eb1ddfb
--- /dev/null
+++ b/.idea/.idea.PetroglyphTools/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Directory.Build.props b/Directory.Build.props
index cb972937c..0ea7e19cb 100644
--- a/Directory.Build.props
+++ b/Directory.Build.props
@@ -1,3 +1,8 @@
+
+
$(MSBuildThisFileDirectory)
@@ -10,15 +15,15 @@
Alamo Engine Tools and Contributors
Copyright © 2023 Alamo Engine Tools and contributors. All rights reserved.
https://github.com/AlamoEngine-Tools/PetroglyphTools
- $(MSBuildThisFileDirectory)LICENSE
- MIT
+ $(MSBuildThisFileDirectory)LICENSE
+ MIT
https://github.com/AlamoEngine-Tools/PetroglyphTools
git
Alamo Engine Tools
README.md
- aet.png
-
-
+ aet.png
+
+
latest
disable
@@ -38,8 +43,8 @@
-
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/PG.Commons/PG.Commons.Test/Data/IIdTestBase.cs b/PG.Commons/PG.Commons.Test/Data/IIdTestBase.cs
new file mode 100644
index 000000000..e8c10839a
--- /dev/null
+++ b/PG.Commons/PG.Commons.Test/Data/IIdTestBase.cs
@@ -0,0 +1,44 @@
+// Copyright (c) Alamo Engine Tools and contributors. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for details.
+
+using System.Collections.Generic;
+using System.Linq;
+using PG.Commons.Data;
+using Xunit;
+
+namespace PG.Commons.Test.Data;
+
+// ReSharper disable once InconsistentNaming
+public abstract class IIdTestBase where T : IId
+{
+ [Fact]
+ public void Test_NullIIdCreationReturnsNull()
+ {
+ foreach (var nullKeys in GetConfiguredNullIIds()) Assert.Null(nullKeys);
+ }
+
+ [Fact]
+ public void Test_IIdBehavesAsExpectedWithHash()
+ {
+ var keyInitialisers = GetConfiguredValidIIdInitialisers();
+ var dict = new Dictionary();
+ foreach (var key in keyInitialisers.Select(keyInitialiser => CreateId(keyInitialiser)))
+ {
+ Assert.NotNull(key);
+ dict.Add(key, $"{key}: Hash: {key.GetHashCode()}");
+ }
+
+ foreach (var key in keyInitialisers.Select(keyInitialiser => CreateId(keyInitialiser)))
+ {
+ Assert.NotNull(key);
+ Assert.Contains(key, dict.Keys);
+ Assert.NotNull(dict[key]);
+ }
+ }
+
+ protected abstract List GetConfiguredNullIIds();
+
+ protected abstract List