Add support for BLAKE3

This commit is contained in:
Matt Nadareski
2026-07-23 11:36:54 -04:00
parent 1d76967a08
commit 05c86e4c24
49 changed files with 779 additions and 45 deletions

View File

@@ -778,6 +778,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Bios = "bios",
Bitrate = "bitrate",
BitTorrentMagnetHash = "btih",
BLAKE3 = HashType.BLAKE3.ZeroString,
ClothCoverDetectionModuleVersion = "cloth_cover_detection_module_version",
CollectionCatalogNumber = "collection-catalog-number",
Comment = "comment",
@@ -1450,6 +1451,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("bios", rom.Bios);
Assert.Equal("bitrate", rom.Bitrate);
Assert.Equal("btih", rom.BitTorrentMagnetHash);
Assert.Equal(HashType.BLAKE3.ZeroString, rom.BLAKE3);
Assert.Equal("cloth_cover_detection_module_version", rom.ClothCoverDetectionModuleVersion);
Assert.Equal("collection-catalog-number", rom.CollectionCatalogNumber);
Assert.Equal("comment", rom.Comment);

View File

@@ -1005,6 +1005,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal("bios", rom.Bios);
Assert.Equal("bitrate", rom.Bitrate);
Assert.Equal("btih", rom.BitTorrentMagnetHash);
Assert.Equal(HashType.BLAKE3.ZeroString, rom.BLAKE3);
Assert.Equal("cloth_cover_detection_module_version", rom.ClothCoverDetectionModuleVersion);
Assert.Equal("collection-catalog-number", rom.CollectionCatalogNumber);
Assert.Equal("comment", rom.Comment);

View File

@@ -1396,7 +1396,8 @@ namespace SabreTools.Metadata.DatFiles.Test
SHA256 = "sha256",
SHA384 = "sha384",
SHA512 = "sha512",
SpamSum = "spamsum"
SpamSum = "spamsum",
BLAKE3 = "blake3",
};
string actual = DatFile.FormatPrefixPostfix(item, machine, fix);
@@ -1514,7 +1515,8 @@ namespace SabreTools.Metadata.DatFiles.Test
SHA256 = "sha256",
SHA384 = "sha384",
SHA512 = "sha512",
SpamSum = "spamsum"
SpamSum = "spamsum",
BLAKE3 = "blake3",
};
string actual = DatFile.FormatPrefixPostfix(item, machine, fix);
@@ -1550,6 +1552,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Null(rom.SHA384);
Assert.Null(rom.SHA512);
Assert.Null(rom.SpamSum);
Assert.Null(rom.BLAKE3);
}
[Fact]
@@ -1575,6 +1578,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Null(rom.SHA384);
Assert.Null(rom.SHA512);
Assert.Null(rom.SpamSum);
Assert.Null(rom.BLAKE3);
}
[Fact]
@@ -1594,7 +1598,8 @@ namespace SabreTools.Metadata.DatFiles.Test
SHA256 = "null",
SHA384 = "null",
SHA512 = "null",
SpamSum = "null"
SpamSum = "null",
BLAKE3 = "null",
};
DatItem actual = DatFile.ProcessNullifiedItem(item);
@@ -1614,6 +1619,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal(HashType.SHA384.ZeroString, rom.SHA384);
Assert.Equal(HashType.SHA512.ZeroString, rom.SHA512);
Assert.Equal(HashType.SpamSum.ZeroString, rom.SpamSum);
Assert.Equal(HashType.BLAKE3.ZeroString, rom.BLAKE3);
}
#endregion
@@ -1955,6 +1961,19 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal($"_{hash}", actual);
}
[Fact]
public void GetDuplicateSuffix_Rom_BLAKE3()
{
string hash = "hash";
DatItem datItem = new Rom
{
BLAKE3 = hash
};
string actual = DatFile.GetDuplicateSuffix(datItem);
Assert.Equal($"_{hash}", actual);
}
[Fact]
public void GetDuplicateSuffix_Other_Generic()
{
@@ -2434,7 +2453,8 @@ namespace SabreTools.Metadata.DatFiles.Test
SHA256 = "crc",
SHA384 = "crc",
SHA512 = "crc",
SpamSum = "crc"
SpamSum = "crc",
BLAKE3 = "crc",
};
DatFile datFile = new Logiqx(null, useGame: false);

View File

@@ -60,6 +60,7 @@ namespace SabreTools.Metadata.DatFiles.Test
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.GetHashCount(HashType.BLAKE3));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.Disk));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.File));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.Media));
@@ -88,6 +89,7 @@ namespace SabreTools.Metadata.DatFiles.Test
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.GetHashCount(HashType.BLAKE3));
Assert.Equal(1, stats.GetItemCount(Data.Models.Metadata.ItemType.Disk));
Assert.Equal(1, stats.GetItemCount(Data.Models.Metadata.ItemType.File));
Assert.Equal(1, stats.GetItemCount(Data.Models.Metadata.ItemType.Media));
@@ -116,6 +118,7 @@ namespace SabreTools.Metadata.DatFiles.Test
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.GetHashCount(HashType.BLAKE3));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.Disk));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.File));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.Media));
@@ -151,6 +154,7 @@ namespace SabreTools.Metadata.DatFiles.Test
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.GetHashCount(HashType.BLAKE3));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.Disk));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.File));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.Media));
@@ -179,6 +183,7 @@ namespace SabreTools.Metadata.DatFiles.Test
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.GetHashCount(HashType.BLAKE3));
Assert.Equal(1, stats.GetItemCount(Data.Models.Metadata.ItemType.Disk));
Assert.Equal(1, stats.GetItemCount(Data.Models.Metadata.ItemType.File));
Assert.Equal(1, stats.GetItemCount(Data.Models.Metadata.ItemType.Media));
@@ -203,6 +208,7 @@ namespace SabreTools.Metadata.DatFiles.Test
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.GetHashCount(HashType.BLAKE3));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.Disk));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.File));
Assert.Equal(0, stats.GetItemCount(Data.Models.Metadata.ItemType.Media));
@@ -238,6 +244,7 @@ namespace SabreTools.Metadata.DatFiles.Test
Assert.Equal(1, newStats.GetHashCount(HashType.SHA384));
Assert.Equal(1, newStats.GetHashCount(HashType.SHA512));
Assert.Equal(1, newStats.GetHashCount(HashType.SpamSum));
Assert.Equal(1, newStats.GetHashCount(HashType.BLAKE3));
Assert.Equal(1, newStats.GetItemCount(Data.Models.Metadata.ItemType.Rom));
Assert.Equal(1, newStats.GetStatusCount(ItemStatus.Good));
}
@@ -317,6 +324,7 @@ namespace SabreTools.Metadata.DatFiles.Test
rom.SHA384 = HashType.SHA384.ZeroString;
rom.SHA512 = HashType.SHA512.ZeroString;
rom.SpamSum = HashType.SpamSum.ZeroString;
rom.BLAKE3 = HashType.BLAKE3.ZeroString;
return rom;
}

View File

@@ -700,6 +700,31 @@ namespace SabreTools.Metadata.DatFiles.Test
]));
}
[Fact]
public void Blake3File_SupportedTypes()
{
var datFile = new Blake3File(null);
var actual = datFile.SupportedTypes;
Assert.True(actual.SequenceEqual([
Data.Models.Metadata.ItemType.Rom,
]));
}
[Fact]
public void Blake3File_GetMissingRequiredFields_Rom()
{
var datItem = new Rom();
var datFile = new Blake3File(null);
var actual = datFile.GetMissingRequiredFields(datItem);
Assert.NotNull(actual);
Assert.True(actual.SequenceEqual([
nameof(Data.Models.Metadata.Rom.Name),
nameof(Data.Models.Metadata.Rom.BLAKE3),
]));
}
#endregion
#region Listrom