diff --git a/SabreTools.DatFiles.Test/DatStatisticsTests.cs b/SabreTools.DatFiles.Test/DatStatisticsTests.cs
index 0c8b8106..4a4ce218 100644
--- a/SabreTools.DatFiles.Test/DatStatisticsTests.cs
+++ b/SabreTools.DatFiles.Test/DatStatisticsTests.cs
@@ -1,6 +1,4 @@
-using System.Collections.Generic;
-using System.IO;
-using SabreTools.DatFiles.Formats;
+using SabreTools.Core.Tools;
using SabreTools.DatItems;
using SabreTools.DatItems.Formats;
using SabreTools.Hashing;
@@ -16,9 +14,161 @@ namespace SabreTools.DatFiles.Test
#endregion
- #region AddItemStatistics
+ #region End to End
- // TODO: Write AddItemStatistics tests
+ [Fact]
+ public void AddRemoveStatisticsTest()
+ {
+ // Get items for testing
+ var disk = CreateDisk();
+ var file = CreateFile();
+ var media = CreateMedia();
+ var rom = CreateRom();
+ var sample = CreateSample();
+
+ // Create an empty stats object
+ var stats = new DatStatistics();
+
+ // Validate pre-add values
+ Assert.Equal(0, stats.TotalCount);
+ Assert.Equal(0, stats.TotalSize);
+ Assert.Equal(0, stats.GetHashCount(HashType.CRC32));
+ Assert.Equal(0, stats.GetHashCount(HashType.MD5));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA1));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA256));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA384));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA512));
+ Assert.Equal(0, stats.GetHashCount(HashType.SpamSum));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Disk));
+ Assert.Equal(0, stats.GetItemCount(ItemType.File));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Media));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Rom));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Sample));
+ Assert.Equal(0, stats.GetStatusCount(ItemStatus.Good));
+
+ // AddItemStatistics
+ stats.AddItemStatistics(disk);
+ stats.AddItemStatistics(file);
+ stats.AddItemStatistics(media);
+ stats.AddItemStatistics(rom);
+ stats.AddItemStatistics(sample);
+
+ // Validate post-add values
+ Assert.Equal(5, stats.TotalCount);
+ Assert.Equal(2, stats.TotalSize);
+ Assert.Equal(2, stats.GetHashCount(HashType.CRC32));
+ Assert.Equal(4, stats.GetHashCount(HashType.MD5));
+ Assert.Equal(4, stats.GetHashCount(HashType.SHA1));
+ Assert.Equal(3, stats.GetHashCount(HashType.SHA256));
+ Assert.Equal(1, stats.GetHashCount(HashType.SHA384));
+ Assert.Equal(1, stats.GetHashCount(HashType.SHA512));
+ Assert.Equal(2, stats.GetHashCount(HashType.SpamSum));
+ Assert.Equal(1, stats.GetItemCount(ItemType.Disk));
+ Assert.Equal(1, stats.GetItemCount(ItemType.File));
+ Assert.Equal(1, stats.GetItemCount(ItemType.Media));
+ Assert.Equal(1, stats.GetItemCount(ItemType.Rom));
+ Assert.Equal(1, stats.GetItemCount(ItemType.Sample));
+ Assert.Equal(2, stats.GetStatusCount(ItemStatus.Good));
+
+ // RemoveItemStatistics
+ stats.RemoveItemStatistics(disk);
+ stats.RemoveItemStatistics(file);
+ stats.RemoveItemStatistics(media);
+ stats.RemoveItemStatistics(rom);
+ stats.RemoveItemStatistics(sample);
+
+ // Validate post-remove values
+ Assert.Equal(0, stats.TotalCount);
+ Assert.Equal(0, stats.TotalSize);
+ Assert.Equal(0, stats.GetHashCount(HashType.CRC32));
+ Assert.Equal(0, stats.GetHashCount(HashType.MD5));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA1));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA256));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA384));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA512));
+ Assert.Equal(0, stats.GetHashCount(HashType.SpamSum));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Disk));
+ Assert.Equal(0, stats.GetItemCount(ItemType.File));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Media));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Rom));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Sample));
+ Assert.Equal(0, stats.GetStatusCount(ItemStatus.Good));
+ }
+
+ [Fact]
+ public void ResetStatisticsTest()
+ {
+ // Get items for testing
+ var disk = CreateDisk();
+ var file = CreateFile();
+ var media = CreateMedia();
+ var rom = CreateRom();
+ var sample = CreateSample();
+
+ // Create an empty stats object
+ var stats = new DatStatistics();
+
+ // Validate pre-add values
+ Assert.Equal(0, stats.TotalCount);
+ Assert.Equal(0, stats.TotalSize);
+ Assert.Equal(0, stats.GetHashCount(HashType.CRC32));
+ Assert.Equal(0, stats.GetHashCount(HashType.MD5));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA1));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA256));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA384));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA512));
+ Assert.Equal(0, stats.GetHashCount(HashType.SpamSum));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Disk));
+ Assert.Equal(0, stats.GetItemCount(ItemType.File));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Media));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Rom));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Sample));
+ Assert.Equal(0, stats.GetStatusCount(ItemStatus.Good));
+
+ // AddItemStatistics
+ stats.AddItemStatistics(disk);
+ stats.AddItemStatistics(file);
+ stats.AddItemStatistics(media);
+ stats.AddItemStatistics(rom);
+ stats.AddItemStatistics(sample);
+
+ // Validate post-add values
+ Assert.Equal(5, stats.TotalCount);
+ Assert.Equal(2, stats.TotalSize);
+ Assert.Equal(2, stats.GetHashCount(HashType.CRC32));
+ Assert.Equal(4, stats.GetHashCount(HashType.MD5));
+ Assert.Equal(4, stats.GetHashCount(HashType.SHA1));
+ Assert.Equal(3, stats.GetHashCount(HashType.SHA256));
+ Assert.Equal(1, stats.GetHashCount(HashType.SHA384));
+ Assert.Equal(1, stats.GetHashCount(HashType.SHA512));
+ Assert.Equal(2, stats.GetHashCount(HashType.SpamSum));
+ Assert.Equal(1, stats.GetItemCount(ItemType.Disk));
+ Assert.Equal(1, stats.GetItemCount(ItemType.File));
+ Assert.Equal(1, stats.GetItemCount(ItemType.Media));
+ Assert.Equal(1, stats.GetItemCount(ItemType.Rom));
+ Assert.Equal(1, stats.GetItemCount(ItemType.Sample));
+ Assert.Equal(2, stats.GetStatusCount(ItemStatus.Good));
+
+ // ResetStatistics
+ stats.ResetStatistics();
+
+ // Validate post-reset values
+ Assert.Equal(0, stats.TotalCount);
+ Assert.Equal(0, stats.TotalSize);
+ Assert.Equal(0, stats.GetHashCount(HashType.CRC32));
+ Assert.Equal(0, stats.GetHashCount(HashType.MD5));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA1));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA256));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA384));
+ Assert.Equal(0, stats.GetHashCount(HashType.SHA512));
+ Assert.Equal(0, stats.GetHashCount(HashType.SpamSum));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Disk));
+ Assert.Equal(0, stats.GetItemCount(ItemType.File));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Media));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Rom));
+ Assert.Equal(0, stats.GetItemCount(ItemType.Sample));
+ Assert.Equal(0, stats.GetStatusCount(ItemStatus.Good));
+ }
#endregion
@@ -28,33 +178,77 @@ namespace SabreTools.DatFiles.Test
#endregion
- #region GetHashCount
+ #region Helpers
- // TODO: Write GetHashCount tests
+ ///
+ /// Create a Disk for testing
+ ///
+ private static Disk CreateDisk()
+ {
+ var disk = new Disk();
- #endregion
+ disk.SetFieldValue(Models.Metadata.Disk.StatusKey, ItemStatus.Good.AsStringValue());
+ disk.SetFieldValue(Models.Metadata.Disk.MD5Key, ZeroHash.MD5Str);
+ disk.SetFieldValue(Models.Metadata.Disk.SHA1Key, ZeroHash.SHA1Str);
- #region GetItemCount
+ return disk;
+ }
- // TODO: Write GetItemCount tests
+ ///
+ /// Create a File for testing
+ ///
+ private static DatItems.Formats.File CreateFile()
+ {
+ var file = new DatItems.Formats.File();
- #endregion
+ file.Size = 1;
+ file.CRC = ZeroHash.CRC32Str;
+ file.MD5 = ZeroHash.MD5Str;
+ file.SHA1 = ZeroHash.SHA1Str;
+ file.SHA256 = ZeroHash.SHA256Str;
- #region GetStatusCount
+ return file;
+ }
- // TODO: Write GetStatusCount tests
+ ///
+ /// Create a Media for testing
+ ///
+ private static Media CreateMedia()
+ {
+ var media = new Media();
- #endregion
+ media.SetFieldValue(Models.Metadata.Media.MD5Key, ZeroHash.MD5Str);
+ media.SetFieldValue(Models.Metadata.Media.SHA1Key, ZeroHash.SHA1Str);
+ media.SetFieldValue(Models.Metadata.Media.SHA256Key, ZeroHash.SHA256Str);
+ media.SetFieldValue(Models.Metadata.Media.SpamSumKey, ZeroHash.SpamSumStr);
- #region RemoveItemStatistics
+ return media;
+ }
- // TODO: Write RemoveItemStatistics tests
+ ///
+ /// Create a Rom for testing
+ ///
+ private static Rom CreateRom()
+ {
+ var rom = new Rom();
- #endregion
+ rom.SetFieldValue(Models.Metadata.Rom.StatusKey, ItemStatus.Good.AsStringValue());
+ rom.SetFieldValue(Models.Metadata.Rom.SizeKey, 1);
+ rom.SetFieldValue(Models.Metadata.Rom.CRCKey, ZeroHash.CRC32Str);
+ rom.SetFieldValue(Models.Metadata.Rom.MD5Key, ZeroHash.MD5Str);
+ rom.SetFieldValue(Models.Metadata.Rom.SHA1Key, ZeroHash.SHA1Str);
+ rom.SetFieldValue(Models.Metadata.Rom.SHA256Key, ZeroHash.SHA256Str);
+ rom.SetFieldValue(Models.Metadata.Rom.SHA384Key, ZeroHash.SHA384Str);
+ rom.SetFieldValue(Models.Metadata.Rom.SHA512Key, ZeroHash.SHA512Str);
+ rom.SetFieldValue(Models.Metadata.Rom.SpamSumKey, ZeroHash.SpamSumStr);
- #region ResetStatistics
+ return rom;
+ }
- // TODO: Write ResetStatistics tests
+ ///
+ /// Create a Sample for testing
+ ///
+ private static Sample CreateSample() => new();
#endregion
}
diff --git a/SabreTools.DatFiles/DatStatistics.cs b/SabreTools.DatFiles/DatStatistics.cs
index d84c9b48..593821ac 100644
--- a/SabreTools.DatFiles/DatStatistics.cs
+++ b/SabreTools.DatFiles/DatStatistics.cs
@@ -335,6 +335,7 @@ namespace SabreTools.DatFiles
/// Item to add info from
private void AddItemStatistics(DatItems.Formats.File file)
{
+ TotalSize += file.Size ?? 0;
AddHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1);
AddHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1);
AddHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1);
@@ -457,6 +458,7 @@ namespace SabreTools.DatFiles
/// Item to remove info for
private void RemoveItemStatistics(DatItems.Formats.File file)
{
+ TotalSize -= file.Size ?? 0;
RemoveHashCount(HashType.CRC32, string.IsNullOrEmpty(file.CRC) ? 0 : 1);
RemoveHashCount(HashType.MD5, string.IsNullOrEmpty(file.MD5) ? 0 : 1);
RemoveHashCount(HashType.SHA1, string.IsNullOrEmpty(file.SHA1) ? 0 : 1);