BinaryUtilsTest.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. <?php
  2. declare(strict_types=1);
  3. namespace Ramsey\Uuid\Test;
  4. use Ramsey\Uuid\BinaryUtils;
  5. use function dechex;
  6. class BinaryUtilsTest extends TestCase
  7. {
  8. /**
  9. * @dataProvider provideVersionTestValues
  10. */
  11. public function testApplyVersion(int $timeHi, int $version, int $expectedInt, string $expectedHex): void
  12. {
  13. $this->assertSame($expectedInt, BinaryUtils::applyVersion($timeHi, $version));
  14. $this->assertSame($expectedHex, dechex(BinaryUtils::applyVersion($timeHi, $version)));
  15. }
  16. /**
  17. * @dataProvider provideVariantTestValues
  18. */
  19. public function testApplyVariant(int $clockSeq, int $expectedInt, string $expectedHex): void
  20. {
  21. $this->assertSame($expectedInt, BinaryUtils::applyVariant($clockSeq));
  22. $this->assertSame($expectedHex, dechex(BinaryUtils::applyVariant($clockSeq)));
  23. }
  24. /**
  25. * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
  26. */
  27. public function provideVersionTestValues(): array
  28. {
  29. return [
  30. [
  31. 'timeHi' => 1001,
  32. 'version' => 1,
  33. 'expectedInt' => 5097,
  34. 'expectedHex' => '13e9',
  35. ],
  36. [
  37. 'timeHi' => 1001,
  38. 'version' => 2,
  39. 'expectedInt' => 9193,
  40. 'expectedHex' => '23e9',
  41. ],
  42. [
  43. 'timeHi' => 1001,
  44. 'version' => 3,
  45. 'expectedInt' => 13289,
  46. 'expectedHex' => '33e9',
  47. ],
  48. [
  49. 'timeHi' => 1001,
  50. 'version' => 4,
  51. 'expectedInt' => 17385,
  52. 'expectedHex' => '43e9',
  53. ],
  54. [
  55. 'timeHi' => 1001,
  56. 'version' => 5,
  57. 'expectedInt' => 21481,
  58. 'expectedHex' => '53e9',
  59. ],
  60. [
  61. 'timeHi' => 65535,
  62. 'version' => 1,
  63. 'expectedInt' => 8191,
  64. 'expectedHex' => '1fff',
  65. ],
  66. [
  67. 'timeHi' => 65535,
  68. 'version' => 2,
  69. 'expectedInt' => 12287,
  70. 'expectedHex' => '2fff',
  71. ],
  72. [
  73. 'timeHi' => 65535,
  74. 'version' => 3,
  75. 'expectedInt' => 16383,
  76. 'expectedHex' => '3fff',
  77. ],
  78. [
  79. 'timeHi' => 65535,
  80. 'version' => 4,
  81. 'expectedInt' => 20479,
  82. 'expectedHex' => '4fff',
  83. ],
  84. [
  85. 'timeHi' => 65535,
  86. 'version' => 5,
  87. 'expectedInt' => 24575,
  88. 'expectedHex' => '5fff',
  89. ],
  90. [
  91. 'timeHi' => 0,
  92. 'version' => 1,
  93. 'expectedInt' => 4096,
  94. 'expectedHex' => '1000',
  95. ],
  96. [
  97. 'timeHi' => 0,
  98. 'version' => 2,
  99. 'expectedInt' => 8192,
  100. 'expectedHex' => '2000',
  101. ],
  102. [
  103. 'timeHi' => 0,
  104. 'version' => 3,
  105. 'expectedInt' => 12288,
  106. 'expectedHex' => '3000',
  107. ],
  108. [
  109. 'timeHi' => 0,
  110. 'version' => 4,
  111. 'expectedInt' => 16384,
  112. 'expectedHex' => '4000',
  113. ],
  114. [
  115. 'timeHi' => 0,
  116. 'version' => 5,
  117. 'expectedInt' => 20480,
  118. 'expectedHex' => '5000',
  119. ],
  120. ];
  121. }
  122. /**
  123. * @phpcsSuppress SlevomatCodingStandard.TypeHints.ReturnTypeHint.MissingTraversableTypeHintSpecification
  124. */
  125. public function provideVariantTestValues(): array
  126. {
  127. return [
  128. [
  129. 'clockSeq' => 0,
  130. 'expectedInt' => 32768,
  131. 'expectedHex' => '8000',
  132. ],
  133. [
  134. 'clockSeq' => 4096,
  135. 'expectedInt' => 36864,
  136. 'expectedHex' => '9000',
  137. ],
  138. [
  139. 'clockSeq' => 8192,
  140. 'expectedInt' => 40960,
  141. 'expectedHex' => 'a000',
  142. ],
  143. [
  144. 'clockSeq' => 12288,
  145. 'expectedInt' => 45056,
  146. 'expectedHex' => 'b000',
  147. ],
  148. [
  149. 'clockSeq' => 4095,
  150. 'expectedInt' => 36863,
  151. 'expectedHex' => '8fff',
  152. ],
  153. [
  154. 'clockSeq' => 8191,
  155. 'expectedInt' => 40959,
  156. 'expectedHex' => '9fff',
  157. ],
  158. [
  159. 'clockSeq' => 12287,
  160. 'expectedInt' => 45055,
  161. 'expectedHex' => 'afff',
  162. ],
  163. [
  164. 'clockSeq' => 16383,
  165. 'expectedInt' => 49151,
  166. 'expectedHex' => 'bfff',
  167. ],
  168. [
  169. 'clockSeq' => 16384,
  170. 'expectedInt' => 32768,
  171. 'expectedHex' => '8000',
  172. ],
  173. [
  174. 'clockSeq' => 20480,
  175. 'expectedInt' => 36864,
  176. 'expectedHex' => '9000',
  177. ],
  178. [
  179. 'clockSeq' => 24576,
  180. 'expectedInt' => 40960,
  181. 'expectedHex' => 'a000',
  182. ],
  183. [
  184. 'clockSeq' => 28672,
  185. 'expectedInt' => 45056,
  186. 'expectedHex' => 'b000',
  187. ],
  188. [
  189. 'clockSeq' => 32768,
  190. 'expectedInt' => 32768,
  191. 'expectedHex' => '8000',
  192. ],
  193. [
  194. 'clockSeq' => 36864,
  195. 'expectedInt' => 36864,
  196. 'expectedHex' => '9000',
  197. ],
  198. [
  199. 'clockSeq' => 40960,
  200. 'expectedInt' => 40960,
  201. 'expectedHex' => 'a000',
  202. ],
  203. [
  204. 'clockSeq' => 45056,
  205. 'expectedInt' => 45056,
  206. 'expectedHex' => 'b000',
  207. ],
  208. [
  209. 'clockSeq' => 36863,
  210. 'expectedInt' => 36863,
  211. 'expectedHex' => '8fff',
  212. ],
  213. [
  214. 'clockSeq' => 40959,
  215. 'expectedInt' => 40959,
  216. 'expectedHex' => '9fff',
  217. ],
  218. [
  219. 'clockSeq' => 45055,
  220. 'expectedInt' => 45055,
  221. 'expectedHex' => 'afff',
  222. ],
  223. [
  224. 'clockSeq' => 49151,
  225. 'expectedInt' => 49151,
  226. 'expectedHex' => 'bfff',
  227. ],
  228. ];
  229. }
  230. }