SimHashTests.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using System.Numerics;
  2. using Masuit.Tools.Strings;
  3. using Xunit;
  4. namespace Masuit.Tools.Abstractions.Test.Strings;
  5. public class SimHashTests
  6. {
  7. [Fact]
  8. public void SimHash_Constructor_WithTokensAndHashBits_ShouldInitializeCorrectly()
  9. {
  10. // Arrange
  11. string tokens = "测试字符串";
  12. int hashBits = 64;
  13. // Act
  14. var simHash = new SimHash(tokens, hashBits);
  15. // Assert
  16. Assert.Equal(2374431774038, simHash.StrSimHash);
  17. Assert.Equal(13, simHash.StrSimHash.ToString().Length);
  18. }
  19. [Fact]
  20. public void SimHash_Constructor_WithTokens_ShouldInitializeCorrectly()
  21. {
  22. // Arrange
  23. string tokens = "测试字符串";
  24. // Act
  25. var simHash = new SimHash(tokens);
  26. // Assert
  27. Assert.Equal(2374431774038, simHash.StrSimHash);
  28. }
  29. [Fact]
  30. public void GetSimHash_ShouldReturnCorrectSimHash()
  31. {
  32. // Arrange
  33. string tokens = "测试字符串";
  34. var simHash = new SimHash(tokens);
  35. // Act
  36. var result = simHash.StrSimHash;
  37. // Assert
  38. Assert.NotEqual(BigInteger.Zero, result);
  39. }
  40. [Fact]
  41. public void Hash_ShouldReturnCorrectHash()
  42. {
  43. // Arrange
  44. string source = "测试";
  45. var simHash = new SimHash(source);
  46. // Act
  47. var result = simHash.GetType().GetMethod("Hash", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance).Invoke(simHash, new object[] { source });
  48. // Assert
  49. Assert.NotEqual(BigInteger.Zero, result);
  50. }
  51. [Fact]
  52. public void HammingDistance_ShouldReturnCorrectDistance()
  53. {
  54. // Arrange
  55. string tokens1 = "测试字符串1";
  56. string tokens2 = "测试字符串2";
  57. var simHash1 = new SimHash(tokens1);
  58. var simHash2 = new SimHash(tokens2);
  59. // Act
  60. var distance = simHash1.HammingDistance(simHash2);
  61. // Assert
  62. Assert.True(distance >= 0);
  63. }
  64. [Fact]
  65. public void SimTokenizer_ShouldTokenizeCorrectly()
  66. {
  67. // Arrange
  68. string source = "测试";
  69. var tokenizer = new SimTokenizer(source);
  70. // Act & Assert
  71. Assert.True(tokenizer.HasMoreTokens());
  72. Assert.Equal("测", tokenizer.NextToken());
  73. Assert.True(tokenizer.HasMoreTokens());
  74. Assert.Equal("试", tokenizer.NextToken());
  75. Assert.False(tokenizer.HasMoreTokens());
  76. }
  77. }