You can not select more than 25 topics Topics must start with a chinese character,a letter or number, can include dashes ('-') and can be up to 35 characters long.

SnowflakeTests.cs 2.6 kB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. using System;
  2. using System.Collections.Generic;
  3. using Xunit;
  4. namespace Discord.UnitTests
  5. {
  6. public class SnowflakeTests
  7. {
  8. private static IEnumerable<object[]> GetTimestampTestData()
  9. {
  10. // N.B. snowflakes here should have the least significant 22 bits
  11. // set to zero.
  12. yield return new object[]
  13. {
  14. 81062087257751552UL,
  15. new DateTimeOffset(
  16. year: 2015, month: 08, day: 12,
  17. hour: 16, minute: 31, second: 47,
  18. millisecond: 663,
  19. offset: TimeSpan.Zero),
  20. };
  21. yield return new object[]
  22. {
  23. 0UL,
  24. new DateTimeOffset(
  25. year: 2015, month: 1, day: 1,
  26. hour: 0, minute: 0, second: 0,
  27. millisecond: 0,
  28. offset: TimeSpan.Zero)
  29. };
  30. yield return new object[]
  31. {
  32. (ulong.MaxValue >> 22) << 22,
  33. new DateTimeOffset(
  34. year: 2154, month: 05, day: 15,
  35. hour: 07, minute: 35, second: 11,
  36. millisecond: 103,
  37. offset: TimeSpan.Zero)
  38. };
  39. }
  40. private static IEnumerable<object[]> GetRoundtrippableTestData()
  41. {
  42. // N.B. snowflakes here should have the least significant 22 bits
  43. // set to zero.
  44. yield return new object[]{ 81062087257751552UL };
  45. yield return new object[]{ 0UL };
  46. yield return new object[]{ (ulong.MaxValue >> 22) << 22 };
  47. }
  48. [Theory]
  49. [MemberData(nameof(GetTimestampTestData))]
  50. public void SnowflakeExpectedTimestamp(
  51. ulong snowflake, DateTimeOffset expected)
  52. {
  53. var time = Snowflake.GetCreatedTime(snowflake);
  54. Assert.Equal(time, expected);
  55. }
  56. [Theory]
  57. [MemberData(nameof(GetTimestampTestData))]
  58. public void SnowflakeExpectedSnowflake(
  59. ulong expected, DateTimeOffset time)
  60. {
  61. var snowflake = Snowflake.GetSnowflake(time);
  62. Assert.Equal(expected, snowflake);
  63. }
  64. [Theory]
  65. [MemberData(nameof(GetRoundtrippableTestData))]
  66. public void SnowflakeIsRoundTrippable(
  67. ulong expected)
  68. {
  69. var time = Snowflake.GetCreatedTime(expected);
  70. var roundtripped = Snowflake.GetSnowflake(time);
  71. Assert.Equal(expected, roundtripped);
  72. }
  73. }
  74. }