ImageHasherTests.cs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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 DctHash_ShouldReturnCorrectHash()
  53. {
  54. using var image = new Image<Rgba32>(32, 32);
  55. var hash = _imageHasher.DctHash(image);
  56. Assert.Equal(0UL, hash);
  57. }
  58. [Fact]
  59. public void Compare_ShouldReturnCorrectSimilarity()
  60. {
  61. var hash1 = 0b1010101010101010101010101010101010101010101010101010101010101010UL;
  62. var hash2 = 0b0101010101010101010101010101010101010101010101010101010101010101UL;
  63. var similarity = ImageHasher.Compare(hash1, hash2);
  64. Assert.Equal(0.0f, similarity);
  65. }
  66. [Fact]
  67. public void Compare256_ShouldReturnCorrectSimilarity()
  68. {
  69. var hash1 = new ulong[] { 0b1010101010101010101010101010101010101010101010101010101010101010UL, 0b1010101010101010101010101010101010101010101010101010101010101010UL, 0b1010101010101010101010101010101010101010101010101010101010101010UL, 0b1010101010101010101010101010101010101010101010101010101010101010UL };
  70. var hash2 = new ulong[] { 0b0101010101010101010101010101010101010101010101010101010101010101UL, 0b0101010101010101010101010101010101010101010101010101010101010101UL, 0b0101010101010101010101010101010101010101010101010101010101010101UL, 0b0101010101010101010101010101010101010101010101010101010101010101UL };
  71. var similarity = ImageHasher.Compare(hash1, hash2);
  72. Assert.Equal(0.0f, similarity);
  73. }
  74. [Fact]
  75. public void Compare_ShouldThrowExceptionForDifferentLengthHashes()
  76. {
  77. var hash1 = new ulong[] { 0b1010101010101010101010101010101010101010101010101010101010101010UL };
  78. var hash2 = new ulong[] { 0b0101010101010101010101010101010101010101010101010101010101010101UL, 0b0101010101010101010101010101010101010101010101010101010101010101UL };
  79. Assert.Throws<ArgumentException>(() => ImageHasher.Compare(hash1, hash2));
  80. }
  81. }