ImageHasherTests.cs 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using Masuit.Tools.Media;
  3. using SixLabors.ImageSharp;
  4. using SixLabors.ImageSharp.PixelFormats;
  5. using Xunit;
  6. namespace Masuit.Tools.Abstractions.Test.Media;
  7. public class ImageHasherTests
  8. {
  9. private readonly ImageHasher _imageHasher;
  10. public ImageHasherTests()
  11. {
  12. _imageHasher = new ImageHasher();
  13. }
  14. [Fact]
  15. public void AverageHash64_ShouldReturnCorrectHash()
  16. {
  17. using var image = new Image<Rgba32>(8, 8);
  18. var hash = _imageHasher.AverageHash64(image);
  19. Assert.Equal(0UL, hash);
  20. }
  21. [Fact]
  22. public void MedianHash64_ShouldReturnCorrectHash()
  23. {
  24. using var image = new Image<Rgba32>(8, 8);
  25. var hash = _imageHasher.MedianHash64(image);
  26. Assert.Equal(0UL, hash);
  27. }
  28. [Fact]
  29. public void MedianHash256_ShouldReturnCorrectHash()
  30. {
  31. using var image = new Image<Rgba32>(16, 16);
  32. var hash = _imageHasher.MedianHash256(image);
  33. Assert.NotNull(hash);
  34. Assert.Equal(4, hash.Length);
  35. }
  36. [Fact]
  37. public void DifferenceHash64_ShouldReturnCorrectHash()
  38. {
  39. using var image = new Image<Rgba32>(9, 8);
  40. var hash = _imageHasher.DifferenceHash64(image);
  41. Assert.Equal(0UL, hash);
  42. }
  43. [Fact]
  44. public void DifferenceHash256_ShouldReturnCorrectHash()
  45. {
  46. using var image = new Image<Rgba32>(17, 16);
  47. var hash = _imageHasher.DifferenceHash256(image);
  48. Assert.NotNull(hash);
  49. Assert.Equal(4, hash.Length);
  50. }
  51. [Fact]
  52. public void Compare_ShouldReturnCorrectSimilarity()
  53. {
  54. var hash1 = 0b1010101010101010101010101010101010101010101010101010101010101010UL;
  55. var hash2 = 0b0101010101010101010101010101010101010101010101010101010101010101UL;
  56. var similarity = ImageHasher.Compare(hash1, hash2);
  57. Assert.Equal(0.0f, similarity);
  58. }
  59. [Fact]
  60. public void Compare256_ShouldReturnCorrectSimilarity()
  61. {
  62. var hash1 = new ulong[] { 0b1010101010101010101010101010101010101010101010101010101010101010UL, 0b1010101010101010101010101010101010101010101010101010101010101010UL, 0b1010101010101010101010101010101010101010101010101010101010101010UL, 0b1010101010101010101010101010101010101010101010101010101010101010UL };
  63. var hash2 = new ulong[] { 0b0101010101010101010101010101010101010101010101010101010101010101UL, 0b0101010101010101010101010101010101010101010101010101010101010101UL, 0b0101010101010101010101010101010101010101010101010101010101010101UL, 0b0101010101010101010101010101010101010101010101010101010101010101UL };
  64. var similarity = ImageHasher.Compare(hash1, hash2);
  65. Assert.Equal(0.0f, similarity);
  66. }
  67. [Fact]
  68. public void Compare_ShouldThrowExceptionForDifferentLengthHashes()
  69. {
  70. var hash1 = new ulong[] { 0b1010101010101010101010101010101010101010101010101010101010101010UL };
  71. var hash2 = new ulong[] { 0b0101010101010101010101010101010101010101010101010101010101010101UL, 0b0101010101010101010101010101010101010101010101010101010101010101UL };
  72. Assert.Throws<ArgumentException>(() => ImageHasher.Compare(hash1, hash2));
  73. }
  74. }