Packing.t.sol 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681
  1. // SPDX-License-Identifier: MIT
  2. // This file was procedurally generated from scripts/generate/templates/Packing.t.js.
  3. pragma solidity ^0.8.20;
  4. import {Test} from "forge-std/Test.sol";
  5. import {Packing} from "@openzeppelin/contracts/utils/Packing.sol";
  6. contract PackingTest is Test {
  7. using Packing for *;
  8. function testPack(bytes1 left, bytes1 right) external {
  9. assertEq(left, Packing.pack_1_1(left, right).extract_2_1(0));
  10. assertEq(right, Packing.pack_1_1(left, right).extract_2_1(1));
  11. }
  12. function testPack(bytes2 left, bytes2 right) external {
  13. assertEq(left, Packing.pack_2_2(left, right).extract_4_2(0));
  14. assertEq(right, Packing.pack_2_2(left, right).extract_4_2(2));
  15. }
  16. function testPack(bytes2 left, bytes4 right) external {
  17. assertEq(left, Packing.pack_2_4(left, right).extract_6_2(0));
  18. assertEq(right, Packing.pack_2_4(left, right).extract_6_4(2));
  19. }
  20. function testPack(bytes2 left, bytes6 right) external {
  21. assertEq(left, Packing.pack_2_6(left, right).extract_8_2(0));
  22. assertEq(right, Packing.pack_2_6(left, right).extract_8_6(2));
  23. }
  24. function testPack(bytes4 left, bytes2 right) external {
  25. assertEq(left, Packing.pack_4_2(left, right).extract_6_4(0));
  26. assertEq(right, Packing.pack_4_2(left, right).extract_6_2(4));
  27. }
  28. function testPack(bytes4 left, bytes4 right) external {
  29. assertEq(left, Packing.pack_4_4(left, right).extract_8_4(0));
  30. assertEq(right, Packing.pack_4_4(left, right).extract_8_4(4));
  31. }
  32. function testPack(bytes4 left, bytes8 right) external {
  33. assertEq(left, Packing.pack_4_8(left, right).extract_12_4(0));
  34. assertEq(right, Packing.pack_4_8(left, right).extract_12_8(4));
  35. }
  36. function testPack(bytes4 left, bytes12 right) external {
  37. assertEq(left, Packing.pack_4_12(left, right).extract_16_4(0));
  38. assertEq(right, Packing.pack_4_12(left, right).extract_16_12(4));
  39. }
  40. function testPack(bytes4 left, bytes16 right) external {
  41. assertEq(left, Packing.pack_4_16(left, right).extract_20_4(0));
  42. assertEq(right, Packing.pack_4_16(left, right).extract_20_16(4));
  43. }
  44. function testPack(bytes4 left, bytes20 right) external {
  45. assertEq(left, Packing.pack_4_20(left, right).extract_24_4(0));
  46. assertEq(right, Packing.pack_4_20(left, right).extract_24_20(4));
  47. }
  48. function testPack(bytes4 left, bytes24 right) external {
  49. assertEq(left, Packing.pack_4_24(left, right).extract_28_4(0));
  50. assertEq(right, Packing.pack_4_24(left, right).extract_28_24(4));
  51. }
  52. function testPack(bytes4 left, bytes28 right) external {
  53. assertEq(left, Packing.pack_4_28(left, right).extract_32_4(0));
  54. assertEq(right, Packing.pack_4_28(left, right).extract_32_28(4));
  55. }
  56. function testPack(bytes6 left, bytes2 right) external {
  57. assertEq(left, Packing.pack_6_2(left, right).extract_8_6(0));
  58. assertEq(right, Packing.pack_6_2(left, right).extract_8_2(6));
  59. }
  60. function testPack(bytes6 left, bytes6 right) external {
  61. assertEq(left, Packing.pack_6_6(left, right).extract_12_6(0));
  62. assertEq(right, Packing.pack_6_6(left, right).extract_12_6(6));
  63. }
  64. function testPack(bytes8 left, bytes4 right) external {
  65. assertEq(left, Packing.pack_8_4(left, right).extract_12_8(0));
  66. assertEq(right, Packing.pack_8_4(left, right).extract_12_4(8));
  67. }
  68. function testPack(bytes8 left, bytes8 right) external {
  69. assertEq(left, Packing.pack_8_8(left, right).extract_16_8(0));
  70. assertEq(right, Packing.pack_8_8(left, right).extract_16_8(8));
  71. }
  72. function testPack(bytes8 left, bytes12 right) external {
  73. assertEq(left, Packing.pack_8_12(left, right).extract_20_8(0));
  74. assertEq(right, Packing.pack_8_12(left, right).extract_20_12(8));
  75. }
  76. function testPack(bytes8 left, bytes16 right) external {
  77. assertEq(left, Packing.pack_8_16(left, right).extract_24_8(0));
  78. assertEq(right, Packing.pack_8_16(left, right).extract_24_16(8));
  79. }
  80. function testPack(bytes8 left, bytes20 right) external {
  81. assertEq(left, Packing.pack_8_20(left, right).extract_28_8(0));
  82. assertEq(right, Packing.pack_8_20(left, right).extract_28_20(8));
  83. }
  84. function testPack(bytes8 left, bytes24 right) external {
  85. assertEq(left, Packing.pack_8_24(left, right).extract_32_8(0));
  86. assertEq(right, Packing.pack_8_24(left, right).extract_32_24(8));
  87. }
  88. function testPack(bytes12 left, bytes4 right) external {
  89. assertEq(left, Packing.pack_12_4(left, right).extract_16_12(0));
  90. assertEq(right, Packing.pack_12_4(left, right).extract_16_4(12));
  91. }
  92. function testPack(bytes12 left, bytes8 right) external {
  93. assertEq(left, Packing.pack_12_8(left, right).extract_20_12(0));
  94. assertEq(right, Packing.pack_12_8(left, right).extract_20_8(12));
  95. }
  96. function testPack(bytes12 left, bytes12 right) external {
  97. assertEq(left, Packing.pack_12_12(left, right).extract_24_12(0));
  98. assertEq(right, Packing.pack_12_12(left, right).extract_24_12(12));
  99. }
  100. function testPack(bytes12 left, bytes16 right) external {
  101. assertEq(left, Packing.pack_12_16(left, right).extract_28_12(0));
  102. assertEq(right, Packing.pack_12_16(left, right).extract_28_16(12));
  103. }
  104. function testPack(bytes12 left, bytes20 right) external {
  105. assertEq(left, Packing.pack_12_20(left, right).extract_32_12(0));
  106. assertEq(right, Packing.pack_12_20(left, right).extract_32_20(12));
  107. }
  108. function testPack(bytes16 left, bytes4 right) external {
  109. assertEq(left, Packing.pack_16_4(left, right).extract_20_16(0));
  110. assertEq(right, Packing.pack_16_4(left, right).extract_20_4(16));
  111. }
  112. function testPack(bytes16 left, bytes8 right) external {
  113. assertEq(left, Packing.pack_16_8(left, right).extract_24_16(0));
  114. assertEq(right, Packing.pack_16_8(left, right).extract_24_8(16));
  115. }
  116. function testPack(bytes16 left, bytes12 right) external {
  117. assertEq(left, Packing.pack_16_12(left, right).extract_28_16(0));
  118. assertEq(right, Packing.pack_16_12(left, right).extract_28_12(16));
  119. }
  120. function testPack(bytes16 left, bytes16 right) external {
  121. assertEq(left, Packing.pack_16_16(left, right).extract_32_16(0));
  122. assertEq(right, Packing.pack_16_16(left, right).extract_32_16(16));
  123. }
  124. function testPack(bytes20 left, bytes4 right) external {
  125. assertEq(left, Packing.pack_20_4(left, right).extract_24_20(0));
  126. assertEq(right, Packing.pack_20_4(left, right).extract_24_4(20));
  127. }
  128. function testPack(bytes20 left, bytes8 right) external {
  129. assertEq(left, Packing.pack_20_8(left, right).extract_28_20(0));
  130. assertEq(right, Packing.pack_20_8(left, right).extract_28_8(20));
  131. }
  132. function testPack(bytes20 left, bytes12 right) external {
  133. assertEq(left, Packing.pack_20_12(left, right).extract_32_20(0));
  134. assertEq(right, Packing.pack_20_12(left, right).extract_32_12(20));
  135. }
  136. function testPack(bytes24 left, bytes4 right) external {
  137. assertEq(left, Packing.pack_24_4(left, right).extract_28_24(0));
  138. assertEq(right, Packing.pack_24_4(left, right).extract_28_4(24));
  139. }
  140. function testPack(bytes24 left, bytes8 right) external {
  141. assertEq(left, Packing.pack_24_8(left, right).extract_32_24(0));
  142. assertEq(right, Packing.pack_24_8(left, right).extract_32_8(24));
  143. }
  144. function testPack(bytes28 left, bytes4 right) external {
  145. assertEq(left, Packing.pack_28_4(left, right).extract_32_28(0));
  146. assertEq(right, Packing.pack_28_4(left, right).extract_32_4(28));
  147. }
  148. function testReplace(bytes2 container, bytes1 newValue, uint8 offset) external {
  149. offset = uint8(bound(offset, 0, 1));
  150. bytes1 oldValue = container.extract_2_1(offset);
  151. assertEq(newValue, container.replace_2_1(newValue, offset).extract_2_1(offset));
  152. assertEq(container, container.replace_2_1(newValue, offset).replace_2_1(oldValue, offset));
  153. }
  154. function testReplace(bytes4 container, bytes1 newValue, uint8 offset) external {
  155. offset = uint8(bound(offset, 0, 3));
  156. bytes1 oldValue = container.extract_4_1(offset);
  157. assertEq(newValue, container.replace_4_1(newValue, offset).extract_4_1(offset));
  158. assertEq(container, container.replace_4_1(newValue, offset).replace_4_1(oldValue, offset));
  159. }
  160. function testReplace(bytes4 container, bytes2 newValue, uint8 offset) external {
  161. offset = uint8(bound(offset, 0, 2));
  162. bytes2 oldValue = container.extract_4_2(offset);
  163. assertEq(newValue, container.replace_4_2(newValue, offset).extract_4_2(offset));
  164. assertEq(container, container.replace_4_2(newValue, offset).replace_4_2(oldValue, offset));
  165. }
  166. function testReplace(bytes6 container, bytes1 newValue, uint8 offset) external {
  167. offset = uint8(bound(offset, 0, 5));
  168. bytes1 oldValue = container.extract_6_1(offset);
  169. assertEq(newValue, container.replace_6_1(newValue, offset).extract_6_1(offset));
  170. assertEq(container, container.replace_6_1(newValue, offset).replace_6_1(oldValue, offset));
  171. }
  172. function testReplace(bytes6 container, bytes2 newValue, uint8 offset) external {
  173. offset = uint8(bound(offset, 0, 4));
  174. bytes2 oldValue = container.extract_6_2(offset);
  175. assertEq(newValue, container.replace_6_2(newValue, offset).extract_6_2(offset));
  176. assertEq(container, container.replace_6_2(newValue, offset).replace_6_2(oldValue, offset));
  177. }
  178. function testReplace(bytes6 container, bytes4 newValue, uint8 offset) external {
  179. offset = uint8(bound(offset, 0, 2));
  180. bytes4 oldValue = container.extract_6_4(offset);
  181. assertEq(newValue, container.replace_6_4(newValue, offset).extract_6_4(offset));
  182. assertEq(container, container.replace_6_4(newValue, offset).replace_6_4(oldValue, offset));
  183. }
  184. function testReplace(bytes8 container, bytes1 newValue, uint8 offset) external {
  185. offset = uint8(bound(offset, 0, 7));
  186. bytes1 oldValue = container.extract_8_1(offset);
  187. assertEq(newValue, container.replace_8_1(newValue, offset).extract_8_1(offset));
  188. assertEq(container, container.replace_8_1(newValue, offset).replace_8_1(oldValue, offset));
  189. }
  190. function testReplace(bytes8 container, bytes2 newValue, uint8 offset) external {
  191. offset = uint8(bound(offset, 0, 6));
  192. bytes2 oldValue = container.extract_8_2(offset);
  193. assertEq(newValue, container.replace_8_2(newValue, offset).extract_8_2(offset));
  194. assertEq(container, container.replace_8_2(newValue, offset).replace_8_2(oldValue, offset));
  195. }
  196. function testReplace(bytes8 container, bytes4 newValue, uint8 offset) external {
  197. offset = uint8(bound(offset, 0, 4));
  198. bytes4 oldValue = container.extract_8_4(offset);
  199. assertEq(newValue, container.replace_8_4(newValue, offset).extract_8_4(offset));
  200. assertEq(container, container.replace_8_4(newValue, offset).replace_8_4(oldValue, offset));
  201. }
  202. function testReplace(bytes8 container, bytes6 newValue, uint8 offset) external {
  203. offset = uint8(bound(offset, 0, 2));
  204. bytes6 oldValue = container.extract_8_6(offset);
  205. assertEq(newValue, container.replace_8_6(newValue, offset).extract_8_6(offset));
  206. assertEq(container, container.replace_8_6(newValue, offset).replace_8_6(oldValue, offset));
  207. }
  208. function testReplace(bytes12 container, bytes1 newValue, uint8 offset) external {
  209. offset = uint8(bound(offset, 0, 11));
  210. bytes1 oldValue = container.extract_12_1(offset);
  211. assertEq(newValue, container.replace_12_1(newValue, offset).extract_12_1(offset));
  212. assertEq(container, container.replace_12_1(newValue, offset).replace_12_1(oldValue, offset));
  213. }
  214. function testReplace(bytes12 container, bytes2 newValue, uint8 offset) external {
  215. offset = uint8(bound(offset, 0, 10));
  216. bytes2 oldValue = container.extract_12_2(offset);
  217. assertEq(newValue, container.replace_12_2(newValue, offset).extract_12_2(offset));
  218. assertEq(container, container.replace_12_2(newValue, offset).replace_12_2(oldValue, offset));
  219. }
  220. function testReplace(bytes12 container, bytes4 newValue, uint8 offset) external {
  221. offset = uint8(bound(offset, 0, 8));
  222. bytes4 oldValue = container.extract_12_4(offset);
  223. assertEq(newValue, container.replace_12_4(newValue, offset).extract_12_4(offset));
  224. assertEq(container, container.replace_12_4(newValue, offset).replace_12_4(oldValue, offset));
  225. }
  226. function testReplace(bytes12 container, bytes6 newValue, uint8 offset) external {
  227. offset = uint8(bound(offset, 0, 6));
  228. bytes6 oldValue = container.extract_12_6(offset);
  229. assertEq(newValue, container.replace_12_6(newValue, offset).extract_12_6(offset));
  230. assertEq(container, container.replace_12_6(newValue, offset).replace_12_6(oldValue, offset));
  231. }
  232. function testReplace(bytes12 container, bytes8 newValue, uint8 offset) external {
  233. offset = uint8(bound(offset, 0, 4));
  234. bytes8 oldValue = container.extract_12_8(offset);
  235. assertEq(newValue, container.replace_12_8(newValue, offset).extract_12_8(offset));
  236. assertEq(container, container.replace_12_8(newValue, offset).replace_12_8(oldValue, offset));
  237. }
  238. function testReplace(bytes16 container, bytes1 newValue, uint8 offset) external {
  239. offset = uint8(bound(offset, 0, 15));
  240. bytes1 oldValue = container.extract_16_1(offset);
  241. assertEq(newValue, container.replace_16_1(newValue, offset).extract_16_1(offset));
  242. assertEq(container, container.replace_16_1(newValue, offset).replace_16_1(oldValue, offset));
  243. }
  244. function testReplace(bytes16 container, bytes2 newValue, uint8 offset) external {
  245. offset = uint8(bound(offset, 0, 14));
  246. bytes2 oldValue = container.extract_16_2(offset);
  247. assertEq(newValue, container.replace_16_2(newValue, offset).extract_16_2(offset));
  248. assertEq(container, container.replace_16_2(newValue, offset).replace_16_2(oldValue, offset));
  249. }
  250. function testReplace(bytes16 container, bytes4 newValue, uint8 offset) external {
  251. offset = uint8(bound(offset, 0, 12));
  252. bytes4 oldValue = container.extract_16_4(offset);
  253. assertEq(newValue, container.replace_16_4(newValue, offset).extract_16_4(offset));
  254. assertEq(container, container.replace_16_4(newValue, offset).replace_16_4(oldValue, offset));
  255. }
  256. function testReplace(bytes16 container, bytes6 newValue, uint8 offset) external {
  257. offset = uint8(bound(offset, 0, 10));
  258. bytes6 oldValue = container.extract_16_6(offset);
  259. assertEq(newValue, container.replace_16_6(newValue, offset).extract_16_6(offset));
  260. assertEq(container, container.replace_16_6(newValue, offset).replace_16_6(oldValue, offset));
  261. }
  262. function testReplace(bytes16 container, bytes8 newValue, uint8 offset) external {
  263. offset = uint8(bound(offset, 0, 8));
  264. bytes8 oldValue = container.extract_16_8(offset);
  265. assertEq(newValue, container.replace_16_8(newValue, offset).extract_16_8(offset));
  266. assertEq(container, container.replace_16_8(newValue, offset).replace_16_8(oldValue, offset));
  267. }
  268. function testReplace(bytes16 container, bytes12 newValue, uint8 offset) external {
  269. offset = uint8(bound(offset, 0, 4));
  270. bytes12 oldValue = container.extract_16_12(offset);
  271. assertEq(newValue, container.replace_16_12(newValue, offset).extract_16_12(offset));
  272. assertEq(container, container.replace_16_12(newValue, offset).replace_16_12(oldValue, offset));
  273. }
  274. function testReplace(bytes20 container, bytes1 newValue, uint8 offset) external {
  275. offset = uint8(bound(offset, 0, 19));
  276. bytes1 oldValue = container.extract_20_1(offset);
  277. assertEq(newValue, container.replace_20_1(newValue, offset).extract_20_1(offset));
  278. assertEq(container, container.replace_20_1(newValue, offset).replace_20_1(oldValue, offset));
  279. }
  280. function testReplace(bytes20 container, bytes2 newValue, uint8 offset) external {
  281. offset = uint8(bound(offset, 0, 18));
  282. bytes2 oldValue = container.extract_20_2(offset);
  283. assertEq(newValue, container.replace_20_2(newValue, offset).extract_20_2(offset));
  284. assertEq(container, container.replace_20_2(newValue, offset).replace_20_2(oldValue, offset));
  285. }
  286. function testReplace(bytes20 container, bytes4 newValue, uint8 offset) external {
  287. offset = uint8(bound(offset, 0, 16));
  288. bytes4 oldValue = container.extract_20_4(offset);
  289. assertEq(newValue, container.replace_20_4(newValue, offset).extract_20_4(offset));
  290. assertEq(container, container.replace_20_4(newValue, offset).replace_20_4(oldValue, offset));
  291. }
  292. function testReplace(bytes20 container, bytes6 newValue, uint8 offset) external {
  293. offset = uint8(bound(offset, 0, 14));
  294. bytes6 oldValue = container.extract_20_6(offset);
  295. assertEq(newValue, container.replace_20_6(newValue, offset).extract_20_6(offset));
  296. assertEq(container, container.replace_20_6(newValue, offset).replace_20_6(oldValue, offset));
  297. }
  298. function testReplace(bytes20 container, bytes8 newValue, uint8 offset) external {
  299. offset = uint8(bound(offset, 0, 12));
  300. bytes8 oldValue = container.extract_20_8(offset);
  301. assertEq(newValue, container.replace_20_8(newValue, offset).extract_20_8(offset));
  302. assertEq(container, container.replace_20_8(newValue, offset).replace_20_8(oldValue, offset));
  303. }
  304. function testReplace(bytes20 container, bytes12 newValue, uint8 offset) external {
  305. offset = uint8(bound(offset, 0, 8));
  306. bytes12 oldValue = container.extract_20_12(offset);
  307. assertEq(newValue, container.replace_20_12(newValue, offset).extract_20_12(offset));
  308. assertEq(container, container.replace_20_12(newValue, offset).replace_20_12(oldValue, offset));
  309. }
  310. function testReplace(bytes20 container, bytes16 newValue, uint8 offset) external {
  311. offset = uint8(bound(offset, 0, 4));
  312. bytes16 oldValue = container.extract_20_16(offset);
  313. assertEq(newValue, container.replace_20_16(newValue, offset).extract_20_16(offset));
  314. assertEq(container, container.replace_20_16(newValue, offset).replace_20_16(oldValue, offset));
  315. }
  316. function testReplace(bytes24 container, bytes1 newValue, uint8 offset) external {
  317. offset = uint8(bound(offset, 0, 23));
  318. bytes1 oldValue = container.extract_24_1(offset);
  319. assertEq(newValue, container.replace_24_1(newValue, offset).extract_24_1(offset));
  320. assertEq(container, container.replace_24_1(newValue, offset).replace_24_1(oldValue, offset));
  321. }
  322. function testReplace(bytes24 container, bytes2 newValue, uint8 offset) external {
  323. offset = uint8(bound(offset, 0, 22));
  324. bytes2 oldValue = container.extract_24_2(offset);
  325. assertEq(newValue, container.replace_24_2(newValue, offset).extract_24_2(offset));
  326. assertEq(container, container.replace_24_2(newValue, offset).replace_24_2(oldValue, offset));
  327. }
  328. function testReplace(bytes24 container, bytes4 newValue, uint8 offset) external {
  329. offset = uint8(bound(offset, 0, 20));
  330. bytes4 oldValue = container.extract_24_4(offset);
  331. assertEq(newValue, container.replace_24_4(newValue, offset).extract_24_4(offset));
  332. assertEq(container, container.replace_24_4(newValue, offset).replace_24_4(oldValue, offset));
  333. }
  334. function testReplace(bytes24 container, bytes6 newValue, uint8 offset) external {
  335. offset = uint8(bound(offset, 0, 18));
  336. bytes6 oldValue = container.extract_24_6(offset);
  337. assertEq(newValue, container.replace_24_6(newValue, offset).extract_24_6(offset));
  338. assertEq(container, container.replace_24_6(newValue, offset).replace_24_6(oldValue, offset));
  339. }
  340. function testReplace(bytes24 container, bytes8 newValue, uint8 offset) external {
  341. offset = uint8(bound(offset, 0, 16));
  342. bytes8 oldValue = container.extract_24_8(offset);
  343. assertEq(newValue, container.replace_24_8(newValue, offset).extract_24_8(offset));
  344. assertEq(container, container.replace_24_8(newValue, offset).replace_24_8(oldValue, offset));
  345. }
  346. function testReplace(bytes24 container, bytes12 newValue, uint8 offset) external {
  347. offset = uint8(bound(offset, 0, 12));
  348. bytes12 oldValue = container.extract_24_12(offset);
  349. assertEq(newValue, container.replace_24_12(newValue, offset).extract_24_12(offset));
  350. assertEq(container, container.replace_24_12(newValue, offset).replace_24_12(oldValue, offset));
  351. }
  352. function testReplace(bytes24 container, bytes16 newValue, uint8 offset) external {
  353. offset = uint8(bound(offset, 0, 8));
  354. bytes16 oldValue = container.extract_24_16(offset);
  355. assertEq(newValue, container.replace_24_16(newValue, offset).extract_24_16(offset));
  356. assertEq(container, container.replace_24_16(newValue, offset).replace_24_16(oldValue, offset));
  357. }
  358. function testReplace(bytes24 container, bytes20 newValue, uint8 offset) external {
  359. offset = uint8(bound(offset, 0, 4));
  360. bytes20 oldValue = container.extract_24_20(offset);
  361. assertEq(newValue, container.replace_24_20(newValue, offset).extract_24_20(offset));
  362. assertEq(container, container.replace_24_20(newValue, offset).replace_24_20(oldValue, offset));
  363. }
  364. function testReplace(bytes28 container, bytes1 newValue, uint8 offset) external {
  365. offset = uint8(bound(offset, 0, 27));
  366. bytes1 oldValue = container.extract_28_1(offset);
  367. assertEq(newValue, container.replace_28_1(newValue, offset).extract_28_1(offset));
  368. assertEq(container, container.replace_28_1(newValue, offset).replace_28_1(oldValue, offset));
  369. }
  370. function testReplace(bytes28 container, bytes2 newValue, uint8 offset) external {
  371. offset = uint8(bound(offset, 0, 26));
  372. bytes2 oldValue = container.extract_28_2(offset);
  373. assertEq(newValue, container.replace_28_2(newValue, offset).extract_28_2(offset));
  374. assertEq(container, container.replace_28_2(newValue, offset).replace_28_2(oldValue, offset));
  375. }
  376. function testReplace(bytes28 container, bytes4 newValue, uint8 offset) external {
  377. offset = uint8(bound(offset, 0, 24));
  378. bytes4 oldValue = container.extract_28_4(offset);
  379. assertEq(newValue, container.replace_28_4(newValue, offset).extract_28_4(offset));
  380. assertEq(container, container.replace_28_4(newValue, offset).replace_28_4(oldValue, offset));
  381. }
  382. function testReplace(bytes28 container, bytes6 newValue, uint8 offset) external {
  383. offset = uint8(bound(offset, 0, 22));
  384. bytes6 oldValue = container.extract_28_6(offset);
  385. assertEq(newValue, container.replace_28_6(newValue, offset).extract_28_6(offset));
  386. assertEq(container, container.replace_28_6(newValue, offset).replace_28_6(oldValue, offset));
  387. }
  388. function testReplace(bytes28 container, bytes8 newValue, uint8 offset) external {
  389. offset = uint8(bound(offset, 0, 20));
  390. bytes8 oldValue = container.extract_28_8(offset);
  391. assertEq(newValue, container.replace_28_8(newValue, offset).extract_28_8(offset));
  392. assertEq(container, container.replace_28_8(newValue, offset).replace_28_8(oldValue, offset));
  393. }
  394. function testReplace(bytes28 container, bytes12 newValue, uint8 offset) external {
  395. offset = uint8(bound(offset, 0, 16));
  396. bytes12 oldValue = container.extract_28_12(offset);
  397. assertEq(newValue, container.replace_28_12(newValue, offset).extract_28_12(offset));
  398. assertEq(container, container.replace_28_12(newValue, offset).replace_28_12(oldValue, offset));
  399. }
  400. function testReplace(bytes28 container, bytes16 newValue, uint8 offset) external {
  401. offset = uint8(bound(offset, 0, 12));
  402. bytes16 oldValue = container.extract_28_16(offset);
  403. assertEq(newValue, container.replace_28_16(newValue, offset).extract_28_16(offset));
  404. assertEq(container, container.replace_28_16(newValue, offset).replace_28_16(oldValue, offset));
  405. }
  406. function testReplace(bytes28 container, bytes20 newValue, uint8 offset) external {
  407. offset = uint8(bound(offset, 0, 8));
  408. bytes20 oldValue = container.extract_28_20(offset);
  409. assertEq(newValue, container.replace_28_20(newValue, offset).extract_28_20(offset));
  410. assertEq(container, container.replace_28_20(newValue, offset).replace_28_20(oldValue, offset));
  411. }
  412. function testReplace(bytes28 container, bytes24 newValue, uint8 offset) external {
  413. offset = uint8(bound(offset, 0, 4));
  414. bytes24 oldValue = container.extract_28_24(offset);
  415. assertEq(newValue, container.replace_28_24(newValue, offset).extract_28_24(offset));
  416. assertEq(container, container.replace_28_24(newValue, offset).replace_28_24(oldValue, offset));
  417. }
  418. function testReplace(bytes32 container, bytes1 newValue, uint8 offset) external {
  419. offset = uint8(bound(offset, 0, 31));
  420. bytes1 oldValue = container.extract_32_1(offset);
  421. assertEq(newValue, container.replace_32_1(newValue, offset).extract_32_1(offset));
  422. assertEq(container, container.replace_32_1(newValue, offset).replace_32_1(oldValue, offset));
  423. }
  424. function testReplace(bytes32 container, bytes2 newValue, uint8 offset) external {
  425. offset = uint8(bound(offset, 0, 30));
  426. bytes2 oldValue = container.extract_32_2(offset);
  427. assertEq(newValue, container.replace_32_2(newValue, offset).extract_32_2(offset));
  428. assertEq(container, container.replace_32_2(newValue, offset).replace_32_2(oldValue, offset));
  429. }
  430. function testReplace(bytes32 container, bytes4 newValue, uint8 offset) external {
  431. offset = uint8(bound(offset, 0, 28));
  432. bytes4 oldValue = container.extract_32_4(offset);
  433. assertEq(newValue, container.replace_32_4(newValue, offset).extract_32_4(offset));
  434. assertEq(container, container.replace_32_4(newValue, offset).replace_32_4(oldValue, offset));
  435. }
  436. function testReplace(bytes32 container, bytes6 newValue, uint8 offset) external {
  437. offset = uint8(bound(offset, 0, 26));
  438. bytes6 oldValue = container.extract_32_6(offset);
  439. assertEq(newValue, container.replace_32_6(newValue, offset).extract_32_6(offset));
  440. assertEq(container, container.replace_32_6(newValue, offset).replace_32_6(oldValue, offset));
  441. }
  442. function testReplace(bytes32 container, bytes8 newValue, uint8 offset) external {
  443. offset = uint8(bound(offset, 0, 24));
  444. bytes8 oldValue = container.extract_32_8(offset);
  445. assertEq(newValue, container.replace_32_8(newValue, offset).extract_32_8(offset));
  446. assertEq(container, container.replace_32_8(newValue, offset).replace_32_8(oldValue, offset));
  447. }
  448. function testReplace(bytes32 container, bytes12 newValue, uint8 offset) external {
  449. offset = uint8(bound(offset, 0, 20));
  450. bytes12 oldValue = container.extract_32_12(offset);
  451. assertEq(newValue, container.replace_32_12(newValue, offset).extract_32_12(offset));
  452. assertEq(container, container.replace_32_12(newValue, offset).replace_32_12(oldValue, offset));
  453. }
  454. function testReplace(bytes32 container, bytes16 newValue, uint8 offset) external {
  455. offset = uint8(bound(offset, 0, 16));
  456. bytes16 oldValue = container.extract_32_16(offset);
  457. assertEq(newValue, container.replace_32_16(newValue, offset).extract_32_16(offset));
  458. assertEq(container, container.replace_32_16(newValue, offset).replace_32_16(oldValue, offset));
  459. }
  460. function testReplace(bytes32 container, bytes20 newValue, uint8 offset) external {
  461. offset = uint8(bound(offset, 0, 12));
  462. bytes20 oldValue = container.extract_32_20(offset);
  463. assertEq(newValue, container.replace_32_20(newValue, offset).extract_32_20(offset));
  464. assertEq(container, container.replace_32_20(newValue, offset).replace_32_20(oldValue, offset));
  465. }
  466. function testReplace(bytes32 container, bytes24 newValue, uint8 offset) external {
  467. offset = uint8(bound(offset, 0, 8));
  468. bytes24 oldValue = container.extract_32_24(offset);
  469. assertEq(newValue, container.replace_32_24(newValue, offset).extract_32_24(offset));
  470. assertEq(container, container.replace_32_24(newValue, offset).replace_32_24(oldValue, offset));
  471. }
  472. function testReplace(bytes32 container, bytes28 newValue, uint8 offset) external {
  473. offset = uint8(bound(offset, 0, 4));
  474. bytes28 oldValue = container.extract_32_28(offset);
  475. assertEq(newValue, container.replace_32_28(newValue, offset).extract_32_28(offset));
  476. assertEq(container, container.replace_32_28(newValue, offset).replace_32_28(oldValue, offset));
  477. }
  478. }