UuidStringConversionBench.php 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257
  1. <?php
  2. /**
  3. * This file is part of the ramsey/uuid library
  4. *
  5. * For the full copyright and license information, please view the LICENSE
  6. * file that was distributed with this source code.
  7. *
  8. * @copyright Copyright (c) Ben Ramsey <ben@benramsey.com>
  9. * @license http://opensource.org/licenses/MIT MIT
  10. */
  11. declare(strict_types=1);
  12. namespace Ramsey\Uuid\Benchmark;
  13. use Ramsey\Uuid\Uuid;
  14. use Ramsey\Uuid\UuidInterface;
  15. use function array_map;
  16. final class UuidStringConversionBench
  17. {
  18. private const TINY_UUID = '00000000-0000-0000-0000-000000000001';
  19. private const HUGE_UUID = 'ffffffff-ffff-ffff-ffff-ffffffffffff';
  20. private const UUIDS_TO_BE_SHORTENED = [
  21. '0ae0cac5-2a40-465c-99ed-3d331b7cf72a',
  22. '5759b9ce-07b5-4e89-b33a-f864317a2951',
  23. '20c8664e-81a8-498d-9e98-444973ef3122',
  24. '16fcbcf3-bb47-4227-90bd-3485d60510c3',
  25. 'fa83ae94-38e0-4903-bc6a-0a3eca6e9ef5',
  26. '51c9e011-0429-4d77-a753-702bd67dcd84',
  27. '1bd8857a-d6d7-4bd6-8734-b3dfedbcda7b',
  28. '7aa38b71-37c3-4561-9b2e-ca227f1c9c55',
  29. 'e6b8854c-435c-4bb1-b6ad-1800b5d3e6bb',
  30. '4e2b0031-8b09-46e2-8244-3814c46a2f53',
  31. 'bedd0850-da1a-4808-95c4-25fef0abbaa7',
  32. '516b9052-d6fb-4828-bfc1-dffdef2d56d2',
  33. '5d60a7e7-9139-4779-9f28-e6316b9fe3b7',
  34. '65aa3d74-c1fb-4bdd-9a00-ce88a5270c57',
  35. '27c2e339-74ed-49a7-a3c4-1a0172e9f945',
  36. 'e89b7727-4847-41ab-98d7-4148216eea8c',
  37. 'd79efaf3-b5dc-43a0-b3a5-c492155a7e0d',
  38. 'ee9ee6e7-5b7d-4e18-ab88-ce03d569305f',
  39. 'fe90c911-c13b-4103-bf33-16757aa87ff5',
  40. '4d7ff67a-0074-4195-95d7-cf8b84eba079',
  41. 'abe5d378-d021-4905-93f4-0e76a7848365',
  42. '19d21907-d121-4d85-8a34-a65d04ce8977',
  43. 'c421b8ad-33a4-42aa-b0cc-8f5f94b2cff7',
  44. 'f3dbbe55-3c80-453e-ab39-a6fe5001a7fc',
  45. 'f48d3eb2-6060-458f-809f-b5e887f9a17f',
  46. 'd189e406-de29-4889-8470-7bfa0d020c0c',
  47. '71627018-9f21-4034-aafe-4c8b17151217',
  48. '0c6a9278-0963-4460-9cae-6dc6f5420f4f',
  49. 'c833ac35-cce0-4315-8df3-3ed76656a548',
  50. '78e94126-1d0a-472a-9b99-37840784318f',
  51. '6e684707-ce4b-42df-8a77-71e57b54b581',
  52. '811df139-e7a3-4cd8-b778-c81494d239ee',
  53. 'c263c5d8-c166-4599-9219-3e975e506f45',
  54. 'b31e7c5d-95ba-41d4-bc29-e6357c96f005',
  55. '16ae2983-7f8f-4eee-9afb-6d4617836a01',
  56. 'ecbbfac7-f92a-4b41-996e-3e4724aa0e23',
  57. '2c6b3db9-a5ee-4425-a837-8880a86faaa0',
  58. '3d67a99a-b39a-4295-b7f8-0bf71ead5b2d',
  59. 'ca421bb7-ad73-41ea-9648-70073862ad5a',
  60. '5ba156fa-853d-460f-a884-ca8dd3a27314',
  61. '42a4359a-1df2-4086-b454-7477dbb726ff',
  62. '7db9517b-f6ba-4bcf-ae26-6a88a7dbb034',
  63. 'bc758bd6-eb50-425b-ada1-07e6bb312032',
  64. '254cf6d0-696d-4ff0-b579-ac3b633f03c0',
  65. 'f8f34b37-4c71-4177-bac5-6b99bb1929af',
  66. 'b0cc6179-f2b1-4ddf-8fe2-2251c3d935a3',
  67. '333ad834-fa3b-4cf4-b9ba-fdb1c481c497',
  68. '011fc3bc-a97d-4535-8cb0-81766e361e78',
  69. 'acf2262b-4ccf-4f1d-b5c1-5e44641884c6',
  70. '6bf661b1-2f85-4277-8dba-6552141e7e42',
  71. 'a76df66b-8c50-488f-b4e7-4f4d3c05afff',
  72. 'b5c5df47-f939-4536-a340-442bf00bd70d',
  73. 'd4914d41-0011-49fb-a1c2-fe69108e4983',
  74. 'efd5fa37-b0de-43b0-9fe7-1b7a7a6523f8',
  75. '6048f863-7faa-43f2-8202-4b349ae34810',
  76. '659a0024-fa05-4068-aed0-e61239554b6d',
  77. '6ec80af3-0415-429e-91e9-8491ab5745c0',
  78. '0e6f754c-0533-4336-b4f0-e2e35518efa1',
  79. '47469672-7e55-4316-b5d4-c458e43d2404',
  80. '0c5ad756-a823-4a3f-8449-840fac080f45',
  81. '8f8345da-1dd9-499b-bda5-57100bb305d5',
  82. '4a31d059-e375-4571-9d28-ea0de51740e7',
  83. 'ed7fb50c-1b3a-4594-920b-9a461abce57c',
  84. '3d8fe6f6-e603-44c0-b550-3568523c3224',
  85. '809259bc-7912-427a-a975-7298ee5626db',
  86. 'ec88d77e-5612-466c-b269-ad146abd70d0',
  87. 'bd308a10-8073-45ae-9bfb-9a663ad5dd10',
  88. '83a6a4cc-3079-46d8-9263-8f57af4fd4c7',
  89. '557f0041-7e7f-447c-988c-eafa6e396915',
  90. '6ad0fa1c-7425-41e9-9b74-19c4935750a2',
  91. 'a9193e21-e529-43cf-9421-6ed09b59d86e',
  92. '2a09f6e6-4fb2-4da0-97bf-6f32858ba977',
  93. 'd66e0940-087f-4e71-8292-fc38e306d9f7',
  94. '0dfc58b3-d591-40be-803d-e17a52e5d262',
  95. 'a46c6902-de10-45cc-8dac-600d68860532',
  96. '5200f9dc-b967-4d1e-ab01-51c726c152ba',
  97. 'acd8498b-ee8b-4d58-b0ef-c353fb1b5a45',
  98. '36adf355-cccc-406f-a814-6333ec4e31bf',
  99. 'd6d64c6f-8388-4de3-9db1-de07f02071b6',
  100. 'daf3fde9-41d0-422f-a0e3-8c7a93a77091',
  101. '160f4fac-a229-4169-893e-4e9e6864c098',
  102. '170c4be9-1fe6-4838-8a77-dee364ae9a95',
  103. '2864fed0-868c-4bd1-a3fa-ae3bb3de20f4',
  104. '8ea6639c-36dc-463c-8299-8f9a12b10898',
  105. '626bef95-2f24-47c2-a792-f06e8f13a11e',
  106. 'ede75c44-5a1d-484c-942d-87407f27db23',
  107. '966ec42b-0bf7-4923-9672-7a41fee377bc',
  108. '399d7ce6-b28f-4751-ac50-73e31b079f22',
  109. 'ab2b4086-e181-4f02-aee1-a94afed40b50',
  110. '3cfc33a6-73f7-49f7-9c01-fbcf84e604d0',
  111. '40cf06c6-74ca-4016-b388-17dc0334770d',
  112. '58f9ecd3-14ab-4100-b32a-cc2622f06c81',
  113. 'a5c35e34-5d05-4724-bb6c-613b5d306a18',
  114. '5133ae3e-e38b-47fa-a3dc-965c738be792',
  115. '594acd2f-7100-4b2b-8b8a-6097cb1cec3d',
  116. '08b3da92-6b32-43d8-9fdd-53eaa996d649',
  117. '93dcdc27-ab2c-4828-9074-4876ee7ab257',
  118. '8260a154-23cc-4510-a5df-cc5119f457fb',
  119. '732a6571-9729-4935-92be-1a74b3242636',
  120. 'c15f5581-e047-45b7-a36f-dfef4e7ba4bb',
  121. ];
  122. /** @var UuidInterface */
  123. private $tinyUuid;
  124. /** @var UuidInterface */
  125. private $hugeUuid;
  126. /** @var UuidInterface */
  127. private $uuid;
  128. /**
  129. * @var UuidInterface[]
  130. * @psalm-var non-empty-list<UuidInterface>
  131. */
  132. private $promiscuousUuids;
  133. /**
  134. * @var string
  135. * @psalm-var non-empty-string
  136. */
  137. private $tinyUuidBytes;
  138. /**
  139. * @var string
  140. * @psalm-var non-empty-string
  141. */
  142. private $hugeUuidBytes;
  143. /**
  144. * @var string
  145. * @psalm-var non-empty-string
  146. */
  147. private $uuidBytes;
  148. /**
  149. * @var string[]
  150. * @psalm-var non-empty-list<non-empty-string>
  151. */
  152. private $promiscuousUuidsBytes;
  153. public function __construct()
  154. {
  155. $this->tinyUuid = Uuid::fromString(self::TINY_UUID);
  156. $this->hugeUuid = Uuid::fromString(self::HUGE_UUID);
  157. $this->uuid = Uuid::fromString(self::UUIDS_TO_BE_SHORTENED[0]);
  158. $this->promiscuousUuids = array_map([Uuid::class, 'fromString'], self::UUIDS_TO_BE_SHORTENED);
  159. $this->tinyUuidBytes = $this->tinyUuid->getBytes();
  160. $this->hugeUuidBytes = $this->hugeUuid->getBytes();
  161. $this->uuidBytes = $this->uuid->getBytes();
  162. $this->promiscuousUuidsBytes = array_map(static function (UuidInterface $uuid): string {
  163. return $uuid->getBytes();
  164. }, $this->promiscuousUuids);
  165. }
  166. public function benchCreationOfTinyUuidFromString(): void
  167. {
  168. Uuid::fromString(self::TINY_UUID);
  169. }
  170. public function benchCreationOfHugeUuidFromString(): void
  171. {
  172. Uuid::fromString(self::HUGE_UUID);
  173. }
  174. public function benchCreationOfUuidFromString(): void
  175. {
  176. Uuid::fromString(self::UUIDS_TO_BE_SHORTENED[0]);
  177. }
  178. public function benchCreationOfPromiscuousUuidsFromString(): void
  179. {
  180. array_map([Uuid::class, 'fromString'], self::UUIDS_TO_BE_SHORTENED);
  181. }
  182. public function benchCreationOfTinyUuidFromBytes(): void
  183. {
  184. Uuid::fromBytes($this->tinyUuidBytes);
  185. }
  186. public function benchCreationOfHugeUuidFromBytes(): void
  187. {
  188. Uuid::fromBytes($this->hugeUuidBytes);
  189. }
  190. public function benchCreationOfUuidFromBytes(): void
  191. {
  192. Uuid::fromBytes($this->uuidBytes);
  193. }
  194. public function benchCreationOfPromiscuousUuidsFromBytes(): void
  195. {
  196. array_map([Uuid::class, 'fromBytes'], $this->promiscuousUuidsBytes);
  197. }
  198. public function benchStringConversionOfTinyUuid(): void
  199. {
  200. $this->tinyUuid->toString();
  201. }
  202. public function benchStringConversionOfHugeUuid(): void
  203. {
  204. $this->hugeUuid->toString();
  205. }
  206. public function benchStringConversionOfUuid(): void
  207. {
  208. $this->uuid->toString();
  209. }
  210. public function benchStringConversionOfPromiscuousUuids(): void
  211. {
  212. array_map(static function (UuidInterface $uuid): string {
  213. return $uuid->toString();
  214. }, $this->promiscuousUuids);
  215. }
  216. public function benchBytesConversionOfTinyUuid(): void
  217. {
  218. $this->tinyUuid->getBytes();
  219. }
  220. public function benchBytesConversionOfHugeUuid(): void
  221. {
  222. $this->hugeUuid->getBytes();
  223. }
  224. public function benchBytesConversionOfUuid(): void
  225. {
  226. $this->uuid->getBytes();
  227. }
  228. public function benchBytesConversionOfPromiscuousUuids(): void
  229. {
  230. array_map(static function (UuidInterface $uuid): string {
  231. return $uuid->getBytes();
  232. }, $this->promiscuousUuids);
  233. }
  234. }