@graphprotocol/grc-20 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/README.md +153 -0
  2. package/dist/abis.d.ts +2 -0
  3. package/dist/abis.d.ts.map +1 -0
  4. package/dist/abis.js +2 -0
  5. package/dist/abis.js.map +1 -0
  6. package/dist/constants.d.ts +2 -0
  7. package/dist/constants.d.ts.map +1 -0
  8. package/dist/constants.js +3 -0
  9. package/dist/constants.js.map +1 -0
  10. package/dist/contracts.d.ts +7 -0
  11. package/dist/contracts.d.ts.map +1 -0
  12. package/dist/contracts.js +10 -0
  13. package/dist/contracts.js.map +1 -0
  14. package/dist/error.d.ts +2 -0
  15. package/dist/error.d.ts.map +1 -0
  16. package/dist/error.js +8 -0
  17. package/dist/error.js.map +1 -0
  18. package/dist/example.d.ts +2 -0
  19. package/dist/example.d.ts.map +1 -0
  20. package/dist/example.js +27 -0
  21. package/dist/example.js.map +1 -0
  22. package/dist/index.d.ts +14 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +14 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/proto.d.ts +3 -0
  27. package/dist/proto.d.ts.map +1 -0
  28. package/dist/proto.js +3 -0
  29. package/dist/proto.js.map +1 -0
  30. package/dist/run.d.ts +2 -0
  31. package/dist/run.d.ts.map +1 -0
  32. package/dist/run.js +4 -0
  33. package/dist/run.js.map +1 -0
  34. package/dist/src/abis/dao.d.ts +899 -0
  35. package/dist/src/abis/dao.d.ts.map +1 -0
  36. package/dist/src/abis/dao.js +1159 -0
  37. package/dist/src/abis/dao.js.map +1 -0
  38. package/dist/src/abis/governance-setup.d.ts +351 -0
  39. package/dist/src/abis/governance-setup.d.ts.map +1 -0
  40. package/dist/src/abis/governance-setup.js +461 -0
  41. package/dist/src/abis/governance-setup.js.map +1 -0
  42. package/dist/src/abis/index.d.ts +10 -0
  43. package/dist/src/abis/index.d.ts.map +1 -0
  44. package/dist/src/abis/index.js +10 -0
  45. package/dist/src/abis/index.js.map +1 -0
  46. package/dist/src/abis/main-voting.d.ts +1443 -0
  47. package/dist/src/abis/main-voting.d.ts.map +1 -0
  48. package/dist/src/abis/main-voting.js +1866 -0
  49. package/dist/src/abis/main-voting.js.map +1 -0
  50. package/dist/src/abis/member-access.d.ts +567 -0
  51. package/dist/src/abis/member-access.d.ts.map +1 -0
  52. package/dist/src/abis/member-access.js +735 -0
  53. package/dist/src/abis/member-access.js.map +1 -0
  54. package/dist/src/abis/personal-space-admin-setup.d.ts +259 -0
  55. package/dist/src/abis/personal-space-admin-setup.d.ts.map +1 -0
  56. package/dist/src/abis/personal-space-admin-setup.js +340 -0
  57. package/dist/src/abis/personal-space-admin-setup.js.map +1 -0
  58. package/dist/src/abis/personal-space-admin.d.ts +408 -0
  59. package/dist/src/abis/personal-space-admin.d.ts.map +1 -0
  60. package/dist/src/abis/personal-space-admin.js +526 -0
  61. package/dist/src/abis/personal-space-admin.js.map +1 -0
  62. package/dist/src/abis/plugin-setup-processor.d.ts +998 -0
  63. package/dist/src/abis/plugin-setup-processor.d.ts.map +1 -0
  64. package/dist/src/abis/plugin-setup-processor.js +1293 -0
  65. package/dist/src/abis/plugin-setup-processor.js.map +1 -0
  66. package/dist/src/abis/space-setup.d.ts +294 -0
  67. package/dist/src/abis/space-setup.d.ts.map +1 -0
  68. package/dist/src/abis/space-setup.js +387 -0
  69. package/dist/src/abis/space-setup.js.map +1 -0
  70. package/dist/src/abis/space.d.ts +263 -0
  71. package/dist/src/abis/space.d.ts.map +1 -0
  72. package/dist/src/abis/space.js +340 -0
  73. package/dist/src/abis/space.js.map +1 -0
  74. package/dist/src/account.d.ts +2 -0
  75. package/dist/src/account.d.ts.map +1 -0
  76. package/dist/src/account.js +2 -0
  77. package/dist/src/account.js.map +1 -0
  78. package/dist/src/base58.d.ts +36 -0
  79. package/dist/src/base58.d.ts.map +1 -0
  80. package/dist/src/base58.js +62 -0
  81. package/dist/src/base58.js.map +1 -0
  82. package/dist/src/base58.test.d.ts +2 -0
  83. package/dist/src/base58.test.d.ts.map +1 -0
  84. package/dist/src/base58.test.js +2 -0
  85. package/dist/src/base58.test.js.map +1 -0
  86. package/dist/src/blocks.d.ts +4 -0
  87. package/dist/src/blocks.d.ts.map +1 -0
  88. package/dist/src/blocks.js +4 -0
  89. package/dist/src/blocks.js.map +1 -0
  90. package/dist/src/core/account.d.ts +8 -0
  91. package/dist/src/core/account.d.ts.map +1 -0
  92. package/dist/src/core/account.js +50 -0
  93. package/dist/src/core/account.js.map +1 -0
  94. package/dist/src/core/base58.d.ts +37 -0
  95. package/dist/src/core/base58.d.ts.map +1 -0
  96. package/dist/src/core/base58.js +62 -0
  97. package/dist/src/core/base58.js.map +1 -0
  98. package/dist/src/core/base58.test.d.ts +2 -0
  99. package/dist/src/core/base58.test.d.ts.map +1 -0
  100. package/dist/src/core/base58.test.js +15 -0
  101. package/dist/src/core/base58.test.js.map +1 -0
  102. package/dist/src/core/blocks/data.d.ts +11 -0
  103. package/dist/src/core/blocks/data.d.ts.map +1 -0
  104. package/dist/src/core/blocks/data.js +48 -0
  105. package/dist/src/core/blocks/data.js.map +1 -0
  106. package/dist/src/core/blocks/image.d.ts +9 -0
  107. package/dist/src/core/blocks/image.d.ts.map +1 -0
  108. package/dist/src/core/blocks/image.js +9 -0
  109. package/dist/src/core/blocks/image.js.map +1 -0
  110. package/dist/src/core/blocks/text.d.ts +9 -0
  111. package/dist/src/core/blocks/text.d.ts.map +1 -0
  112. package/dist/src/core/blocks/text.js +30 -0
  113. package/dist/src/core/blocks/text.js.map +1 -0
  114. package/dist/src/core/get-checksum-address.d.ts +10 -0
  115. package/dist/src/core/get-checksum-address.d.ts.map +1 -0
  116. package/dist/src/core/get-checksum-address.js +20 -0
  117. package/dist/src/core/get-checksum-address.js.map +1 -0
  118. package/dist/src/core/ids/content.d.ts +59 -0
  119. package/dist/src/core/ids/content.d.ts.map +1 -0
  120. package/dist/src/core/ids/content.js +59 -0
  121. package/dist/src/core/ids/content.js.map +1 -0
  122. package/dist/src/core/ids/generate.d.ts +2 -0
  123. package/dist/src/core/ids/generate.d.ts.map +1 -0
  124. package/dist/src/core/ids/generate.js +4 -0
  125. package/dist/src/core/ids/generate.js.map +1 -0
  126. package/dist/src/core/ids/network.d.ts +4 -0
  127. package/dist/src/core/ids/network.d.ts.map +1 -0
  128. package/dist/src/core/ids/network.js +4 -0
  129. package/dist/src/core/ids/network.js.map +1 -0
  130. package/dist/src/core/ids/system.d.ts +212 -0
  131. package/dist/src/core/ids/system.d.ts.map +1 -0
  132. package/dist/src/core/ids/system.js +220 -0
  133. package/dist/src/core/ids/system.js.map +1 -0
  134. package/dist/src/core/image.d.ts +13 -0
  135. package/dist/src/core/image.d.ts.map +1 -0
  136. package/dist/src/core/image.js +33 -0
  137. package/dist/src/core/image.js.map +1 -0
  138. package/dist/src/core/position-strings/cursors.d.ts +56 -0
  139. package/dist/src/core/position-strings/cursors.d.ts.map +1 -0
  140. package/dist/src/core/position-strings/cursors.js +69 -0
  141. package/dist/src/core/position-strings/cursors.js.map +1 -0
  142. package/dist/src/core/position-strings/find-position.d.ts +24 -0
  143. package/dist/src/core/position-strings/find-position.d.ts.map +1 -0
  144. package/dist/src/core/position-strings/find-position.js +38 -0
  145. package/dist/src/core/position-strings/find-position.js.map +1 -0
  146. package/dist/src/core/position-strings/ids.d.ts +37 -0
  147. package/dist/src/core/position-strings/ids.d.ts.map +1 -0
  148. package/dist/src/core/position-strings/ids.js +79 -0
  149. package/dist/src/core/position-strings/ids.js.map +1 -0
  150. package/dist/src/core/position-strings/index.d.ts +5 -0
  151. package/dist/src/core/position-strings/index.d.ts.map +1 -0
  152. package/dist/src/core/position-strings/index.js +6 -0
  153. package/dist/src/core/position-strings/index.js.map +1 -0
  154. package/dist/src/core/position-strings/position-source.d.ts +128 -0
  155. package/dist/src/core/position-strings/position-source.d.ts.map +1 -0
  156. package/dist/src/core/position-strings/position-source.js +314 -0
  157. package/dist/src/core/position-strings/position-source.js.map +1 -0
  158. package/dist/src/core/position-strings/test/cursors.test.d.ts +2 -0
  159. package/dist/src/core/position-strings/test/cursors.test.d.ts.map +1 -0
  160. package/dist/src/core/position-strings/test/cursors.test.js +104 -0
  161. package/dist/src/core/position-strings/test/cursors.test.js.map +1 -0
  162. package/dist/src/core/position-strings/test/find-position.test.d.ts +2 -0
  163. package/dist/src/core/position-strings/test/find-position.test.d.ts.map +1 -0
  164. package/dist/src/core/position-strings/test/find-position.test.js +48 -0
  165. package/dist/src/core/position-strings/test/find-position.test.js.map +1 -0
  166. package/dist/src/core/position-strings/test/fuzz.test.d.ts +2 -0
  167. package/dist/src/core/position-strings/test/fuzz.test.d.ts.map +1 -0
  168. package/dist/src/core/position-strings/test/fuzz.test.js +78 -0
  169. package/dist/src/core/position-strings/test/fuzz.test.js.map +1 -0
  170. package/dist/src/core/position-strings/test/ids.test.d.ts +2 -0
  171. package/dist/src/core/position-strings/test/ids.test.d.ts.map +1 -0
  172. package/dist/src/core/position-strings/test/ids.test.js +17 -0
  173. package/dist/src/core/position-strings/test/ids.test.js.map +1 -0
  174. package/dist/src/core/position-strings/test/manual.test.d.ts +2 -0
  175. package/dist/src/core/position-strings/test/manual.test.d.ts.map +1 -0
  176. package/dist/src/core/position-strings/test/manual.test.js +307 -0
  177. package/dist/src/core/position-strings/test/manual.test.js.map +1 -0
  178. package/dist/src/core/position-strings/test/util.d.ts +6 -0
  179. package/dist/src/core/position-strings/test/util.d.ts.map +1 -0
  180. package/dist/src/core/position-strings/test/util.js +26 -0
  181. package/dist/src/core/position-strings/test/util.js.map +1 -0
  182. package/dist/src/core/position-strings/util.d.ts +8 -0
  183. package/dist/src/core/position-strings/util.d.ts.map +1 -0
  184. package/dist/src/core/position-strings/util.js +26 -0
  185. package/dist/src/core/position-strings/util.js.map +1 -0
  186. package/dist/src/core/position.d.ts +7 -0
  187. package/dist/src/core/position.d.ts.map +1 -0
  188. package/dist/src/core/position.js +7 -0
  189. package/dist/src/core/position.js.map +1 -0
  190. package/dist/src/core/relation.d.ts +30 -0
  191. package/dist/src/core/relation.d.ts.map +1 -0
  192. package/dist/src/core/relation.js +40 -0
  193. package/dist/src/core/relation.js.map +1 -0
  194. package/dist/src/core/scheme.d.ts +10 -0
  195. package/dist/src/core/scheme.d.ts.map +1 -0
  196. package/dist/src/core/scheme.js +21 -0
  197. package/dist/src/core/scheme.js.map +1 -0
  198. package/dist/src/core/triple.d.ts +14 -0
  199. package/dist/src/core/triple.d.ts.map +1 -0
  200. package/dist/src/core/triple.js +20 -0
  201. package/dist/src/core/triple.js.map +1 -0
  202. package/dist/src/encodings/get-accept-editor-arguments.d.ts +11 -0
  203. package/dist/src/encodings/get-accept-editor-arguments.d.ts.map +1 -0
  204. package/dist/src/encodings/get-accept-editor-arguments.js +23 -0
  205. package/dist/src/encodings/get-accept-editor-arguments.js.map +1 -0
  206. package/dist/src/encodings/get-accept-subspace-arguments.d.ts +11 -0
  207. package/dist/src/encodings/get-accept-subspace-arguments.d.ts.map +1 -0
  208. package/dist/src/encodings/get-accept-subspace-arguments.js +23 -0
  209. package/dist/src/encodings/get-accept-subspace-arguments.js.map +1 -0
  210. package/dist/src/encodings/get-calldata-for-space-governance-type.d.ts +8 -0
  211. package/dist/src/encodings/get-calldata-for-space-governance-type.d.ts.map +1 -0
  212. package/dist/src/encodings/get-calldata-for-space-governance-type.js +19 -0
  213. package/dist/src/encodings/get-calldata-for-space-governance-type.js.map +1 -0
  214. package/dist/src/encodings/get-process-geo-proposal-arguments.d.ts +7 -0
  215. package/dist/src/encodings/get-process-geo-proposal-arguments.d.ts.map +1 -0
  216. package/dist/src/encodings/get-process-geo-proposal-arguments.js +23 -0
  217. package/dist/src/encodings/get-process-geo-proposal-arguments.js.map +1 -0
  218. package/dist/src/encodings/get-remove-editor-arguments.d.ts +11 -0
  219. package/dist/src/encodings/get-remove-editor-arguments.d.ts.map +1 -0
  220. package/dist/src/encodings/get-remove-editor-arguments.js +23 -0
  221. package/dist/src/encodings/get-remove-editor-arguments.js.map +1 -0
  222. package/dist/src/encodings/get-remove-subspace-arguments.d.ts +11 -0
  223. package/dist/src/encodings/get-remove-subspace-arguments.d.ts.map +1 -0
  224. package/dist/src/encodings/get-remove-subspace-arguments.js +23 -0
  225. package/dist/src/encodings/get-remove-subspace-arguments.js.map +1 -0
  226. package/dist/src/encodings/index.d.ts +7 -0
  227. package/dist/src/encodings/index.d.ts.map +1 -0
  228. package/dist/src/encodings/index.js +7 -0
  229. package/dist/src/encodings/index.js.map +1 -0
  230. package/dist/src/id.d.ts +15 -0
  231. package/dist/src/id.d.ts.map +1 -0
  232. package/dist/src/id.js +21 -0
  233. package/dist/src/id.js.map +1 -0
  234. package/dist/src/image.d.ts +2 -0
  235. package/dist/src/image.d.ts.map +1 -0
  236. package/dist/src/image.js +2 -0
  237. package/dist/src/image.js.map +1 -0
  238. package/dist/src/position.d.ts +2 -0
  239. package/dist/src/position.d.ts.map +1 -0
  240. package/dist/src/position.js +2 -0
  241. package/dist/src/position.js.map +1 -0
  242. package/dist/src/proto/create-edit-proposal.d.ts +9 -0
  243. package/dist/src/proto/create-edit-proposal.d.ts.map +1 -0
  244. package/dist/src/proto/create-edit-proposal.js +54 -0
  245. package/dist/src/proto/create-edit-proposal.js.map +1 -0
  246. package/dist/src/proto/create-edit-proposal.test.d.ts +2 -0
  247. package/dist/src/proto/create-edit-proposal.test.d.ts.map +1 -0
  248. package/dist/src/proto/create-edit-proposal.test.js +140 -0
  249. package/dist/src/proto/create-edit-proposal.test.js.map +1 -0
  250. package/dist/src/proto/create-membership-proposal.d.ts +7 -0
  251. package/dist/src/proto/create-membership-proposal.d.ts.map +1 -0
  252. package/dist/src/proto/create-membership-proposal.js +26 -0
  253. package/dist/src/proto/create-membership-proposal.js.map +1 -0
  254. package/dist/src/proto/create-subspace-proposal.d.ts +7 -0
  255. package/dist/src/proto/create-subspace-proposal.d.ts.map +1 -0
  256. package/dist/src/proto/create-subspace-proposal.js +12 -0
  257. package/dist/src/proto/create-subspace-proposal.js.map +1 -0
  258. package/dist/src/proto/edit.d.ts +9 -0
  259. package/dist/src/proto/edit.d.ts.map +1 -0
  260. package/dist/src/proto/edit.js +54 -0
  261. package/dist/src/proto/edit.js.map +1 -0
  262. package/dist/src/proto/edit.test.d.ts +2 -0
  263. package/dist/src/proto/edit.test.d.ts.map +1 -0
  264. package/dist/src/proto/edit.test.js +140 -0
  265. package/dist/src/proto/edit.test.js.map +1 -0
  266. package/dist/src/proto/gen/src/proto/ipfs_pb.d.ts +404 -0
  267. package/dist/src/proto/gen/src/proto/ipfs_pb.d.ts.map +1 -0
  268. package/dist/src/proto/gen/src/proto/ipfs_pb.js +602 -0
  269. package/dist/src/proto/gen/src/proto/ipfs_pb.js.map +1 -0
  270. package/dist/src/proto/index.d.ts +2 -0
  271. package/dist/src/proto/index.d.ts.map +1 -0
  272. package/dist/src/proto/index.js +2 -0
  273. package/dist/src/proto/index.js.map +1 -0
  274. package/dist/src/relation.d.ts +2 -0
  275. package/dist/src/relation.d.ts.map +1 -0
  276. package/dist/src/relation.js +2 -0
  277. package/dist/src/relation.js.map +1 -0
  278. package/dist/src/scheme.d.ts +2 -0
  279. package/dist/src/scheme.d.ts.map +1 -0
  280. package/dist/src/scheme.js +2 -0
  281. package/dist/src/scheme.js.map +1 -0
  282. package/dist/src/system-ids.d.ts +4 -0
  283. package/dist/src/system-ids.d.ts.map +1 -0
  284. package/dist/src/system-ids.js +4 -0
  285. package/dist/src/system-ids.js.map +1 -0
  286. package/dist/src/triple.d.ts +2 -0
  287. package/dist/src/triple.d.ts.map +1 -0
  288. package/dist/src/triple.js +2 -0
  289. package/dist/src/triple.js.map +1 -0
  290. package/dist/src/types.d.ts +86 -0
  291. package/dist/src/types.d.ts.map +1 -0
  292. package/dist/src/types.js +13 -0
  293. package/dist/src/types.js.map +1 -0
  294. package/dist/tsconfig.tsbuildinfo +1 -0
  295. package/package.json +47 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"position-source.js","sourceRoot":"","sources":["../../../../src/core/position-strings/position-source.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=cursors.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursors.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/cursors.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ import { assert } from "chai";
2
+ import seedrandom from "seedrandom";
3
+ import { Cursors, IDs, PositionSource } from "../src";
4
+ describe("Cursors", () => {
5
+ let rng;
6
+ let source;
7
+ beforeEach(() => {
8
+ rng = seedrandom("42");
9
+ source = new PositionSource({ ID: IDs.pseudoRandom(rng) });
10
+ });
11
+ function testLength(len) {
12
+ let list;
13
+ describe(`length ${len}`, () => {
14
+ beforeEach(() => {
15
+ list = [];
16
+ for (let i = 0; i < len; i++) {
17
+ list.push(source.createBetween(list.at(-1), undefined));
18
+ }
19
+ });
20
+ it("present", () => {
21
+ for (let i = 0; i <= list.length; i++) {
22
+ const cursor = Cursors.fromIndex(i, list);
23
+ assert.strictEqual(Cursors.toIndex(cursor, list), i);
24
+ if (i !== 0) {
25
+ // Insert a char in the next gap to the left, shifting the cursor.
26
+ const list2 = [
27
+ ...list.slice(0, i - 1),
28
+ source.createBetween(list[i - 2], list[i - 1]),
29
+ ...list.slice(i - 1),
30
+ ];
31
+ assert.strictEqual(Cursors.toIndex(cursor, list2), i + 1);
32
+ }
33
+ if (i !== list.length) {
34
+ // Insert a char in the next gap to the right, which shouldn't shift the cursor.
35
+ const list3 = [
36
+ ...list.slice(0, i + 1),
37
+ source.createBetween(list[i], list[i + 1]),
38
+ ...list.slice(i),
39
+ ];
40
+ assert.strictEqual(Cursors.toIndex(cursor, list3), i);
41
+ }
42
+ // Insert a char in the cursor's gap, which
43
+ // still shouldn't shift the cursor, since we
44
+ // bind to the left char.
45
+ const list4 = [
46
+ ...list.slice(0, i),
47
+ source.createBetween(list[i - 1], list[i]),
48
+ ...list.slice(i),
49
+ ];
50
+ assert.strictEqual(Cursors.toIndex(cursor, list4), i);
51
+ }
52
+ });
53
+ it("not present", () => {
54
+ for (let i = 0; i <= list.length; i++) {
55
+ // Set the cursor to a new position that we "delete"
56
+ // (actually just leave not-present) in list.
57
+ const listExtended = [
58
+ ...list.slice(0, i),
59
+ source.createBetween(list[i - 1], list[i]),
60
+ ...list.slice(i),
61
+ ];
62
+ const cursor = Cursors.fromIndex(i + 1, listExtended);
63
+ // In list, the index falls back by 1 to i.
64
+ assert.strictEqual(Cursors.toIndex(cursor, list), i);
65
+ if (i !== 0) {
66
+ // Insert a char in the next gap to the left, shifting the cursor.
67
+ const list2 = [
68
+ ...list.slice(0, i - 1),
69
+ source.createBetween(list[i - 2], list[i - 1]),
70
+ ...list.slice(i - 1),
71
+ ];
72
+ assert.strictEqual(Cursors.toIndex(cursor, list2), i + 1);
73
+ }
74
+ if (i !== list.length) {
75
+ // Insert a char in the next gap to the right, which shouldn't shift the cursor.
76
+ const list3 = [
77
+ ...list.slice(0, i + 1),
78
+ source.createBetween(list[i], list[i + 1]),
79
+ ...list.slice(i),
80
+ ];
81
+ assert.strictEqual(Cursors.toIndex(cursor, list3), i);
82
+ }
83
+ // Insert a char in the cursor's gap, which
84
+ // may or may not shift the cursor, depending on how
85
+ // the new position compares to the cursor's.
86
+ const list4 = [
87
+ ...list.slice(0, i),
88
+ source.createBetween(list[i - 1], list[i]),
89
+ ...list.slice(i),
90
+ ];
91
+ const index4 = Cursors.toIndex(cursor, list4);
92
+ assert(i <= index4 && index4 <= i + 1);
93
+ }
94
+ });
95
+ });
96
+ }
97
+ testLength(32);
98
+ testLength(31);
99
+ testLength(33);
100
+ testLength(23);
101
+ testLength(1);
102
+ testLength(0);
103
+ });
104
+ //# sourceMappingURL=cursors.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cursors.test.js","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/cursors.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=find-position.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-position.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/find-position.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { assert } from 'chai';
2
+ import { beforeEach, describe, it } from 'vitest';
3
+ import { findPosition } from '../find-position.js';
4
+ import { IDs } from '../ids.js';
5
+ import { PositionSource } from '../position-source.js';
6
+ describe('findPosition', () => {
7
+ let source;
8
+ beforeEach(() => {
9
+ source = new PositionSource({ ID: IDs.random() });
10
+ });
11
+ function testLength(len) {
12
+ let list;
13
+ describe(`length ${len}`, () => {
14
+ beforeEach(() => {
15
+ list = [];
16
+ for (let i = 0; i < len; i++) {
17
+ list.push(source.createBetween(list.at(-1), undefined));
18
+ }
19
+ });
20
+ it('present', () => {
21
+ for (let i = 0; i < list.length; i++) {
22
+ assert.deepStrictEqual(findPosition(list[i], list), {
23
+ index: i,
24
+ isPresent: true,
25
+ });
26
+ }
27
+ });
28
+ it('not present', () => {
29
+ for (let i = 0; i <= list.length; i++) {
30
+ const newPos = source.createBetween(list[i - 1], list[i]);
31
+ // newPos would be at index i if present (between the current
32
+ // i - 1 & i).
33
+ assert.deepStrictEqual(findPosition(newPos, list), {
34
+ index: i,
35
+ isPresent: false,
36
+ });
37
+ }
38
+ });
39
+ });
40
+ }
41
+ testLength(32);
42
+ testLength(31);
43
+ testLength(33);
44
+ testLength(23);
45
+ testLength(1);
46
+ testLength(0);
47
+ });
48
+ //# sourceMappingURL=find-position.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find-position.test.js","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/find-position.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,IAAI,MAAuB,CAAC;IAE5B,UAAU,CAAC,GAAG,EAAE;QACd,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACpD,CAAC,CAAC,CAAC;IAEH,SAAS,UAAU,CAAC,GAAW;QAC7B,IAAI,IAAe,CAAC;QAEpB,QAAQ,CAAC,UAAU,GAAG,EAAE,EAAE,GAAG,EAAE;YAC7B,UAAU,CAAC,GAAG,EAAE;gBACd,IAAI,GAAG,EAAE,CAAC;gBACV,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;oBAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;gBAC1D,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACrC,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAW,EAAE,IAAI,CAAC,EAAE;wBAC5D,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE,IAAI;qBAChB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,EAAE,CAAC,aAAa,EAAE,GAAG,EAAE;gBACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAC1D,6DAA6D;oBAC7D,cAAc;oBACd,MAAM,CAAC,eAAe,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE;wBACjD,KAAK,EAAE,CAAC;wBACR,SAAS,EAAE,KAAK;qBACjB,CAAC,CAAC;gBACL,CAAC;YACH,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;IAED,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,UAAU,CAAC,CAAC,CAAC,CAAC;IACd,UAAU,CAAC,CAAC,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fuzz.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzz.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/fuzz.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,78 @@
1
+ import seedrandom from "seedrandom";
2
+ import { assertIsOrdered, newSources, testUniqueAfterDelete } from "./util";
3
+ describe("fuzz", () => {
4
+ describe("sequential", () => {
5
+ describe("1 user", () => sequential(1));
6
+ describe("10 users", () => sequential(10));
7
+ });
8
+ });
9
+ function sequential(numUsers) {
10
+ let rng;
11
+ beforeEach(() => {
12
+ rng = seedrandom("42");
13
+ });
14
+ it("random", () => {
15
+ const sources = newSources(rng, numUsers);
16
+ // Randomly create positions in a single list, simulating sequential access.
17
+ const list = [];
18
+ for (let i = 0; i < 1000; i++) {
19
+ const source = sources[Math.floor(rng() * sources.length)];
20
+ const index = Math.floor(rng() * (list.length + 1));
21
+ // Out-of-bounds okay.
22
+ const newPosition = source.createBetween(list[index - 1], list[index]);
23
+ list.splice(index, 0, newPosition);
24
+ }
25
+ assertIsOrdered(list);
26
+ testUniqueAfterDelete(list, sources[0]);
27
+ });
28
+ it("random LtR runs", () => {
29
+ const sources = newSources(rng, numUsers);
30
+ // Randomly create positions in a single list, simulating sequential access.
31
+ // This time, create short LtR runs at a time.
32
+ const list = [];
33
+ for (let i = 0; i < 200; i++) {
34
+ const source = sources[Math.floor(rng() * sources.length)];
35
+ const index = Math.floor(rng() * (list.length + 1));
36
+ // Out-of-bounds okay.
37
+ for (let j = 0; j < 5; j++) {
38
+ const newPosition = source.createBetween(list[index - 1 + j], list[index + j]);
39
+ list.splice(index + j, 0, newPosition);
40
+ }
41
+ }
42
+ assertIsOrdered(list);
43
+ testUniqueAfterDelete(list, sources[0]);
44
+ });
45
+ it("random RtL runs", () => {
46
+ const sources = newSources(rng, numUsers);
47
+ // Randomly create positions in a single list, simulating sequential access.
48
+ // This time, create short RtL runs at a time.
49
+ const list = [];
50
+ for (let i = 0; i < 200; i++) {
51
+ const source = sources[Math.floor(rng() * sources.length)];
52
+ const index = Math.floor(rng() * (list.length + 1));
53
+ // Out-of-bounds okay.
54
+ for (let j = 0; j < 5; j++) {
55
+ const newPosition = source.createBetween(list[index - 1], list[index]);
56
+ list.splice(index, 0, newPosition);
57
+ }
58
+ }
59
+ assertIsOrdered(list);
60
+ testUniqueAfterDelete(list, sources[0]);
61
+ });
62
+ it("biased", () => {
63
+ const sources = newSources(rng, numUsers);
64
+ // Randomly create positions in a single list, simulating sequential access.
65
+ // This time, bias towards smaller indices using a sqrt.
66
+ const list = [];
67
+ for (let i = 0; i < 1000; i++) {
68
+ const source = sources[Math.floor(Math.sqrt(rng() * sources.length * sources.length))];
69
+ const index = Math.floor(rng() * (list.length + 1));
70
+ // Out-of-bounds okay.
71
+ const newPosition = source.createBetween(list[index - 1], list[index]);
72
+ list.splice(index, 0, newPosition);
73
+ }
74
+ assertIsOrdered(list);
75
+ testUniqueAfterDelete(list, sources[0]);
76
+ });
77
+ }
78
+ //# sourceMappingURL=fuzz.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzz.test.js","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/fuzz.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ids.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/ids.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { assert } from "chai";
2
+ import { PositionSource } from "../src";
3
+ describe("IDs", () => {
4
+ describe("validate", () => {
5
+ it("rejects period", () => {
6
+ assert.throws(() => new PositionSource({ ID: "ali.ce" }));
7
+ });
8
+ it("rejects comma", () => {
9
+ assert.throws(() => new PositionSource({ ID: "ali,ce" }));
10
+ });
11
+ it("rejects LAST or greater", () => {
12
+ assert.throws(() => new PositionSource({ ID: PositionSource.LAST }));
13
+ assert.throws(() => new PositionSource({ ID: PositionSource.LAST + "alice" }));
14
+ });
15
+ });
16
+ });
17
+ //# sourceMappingURL=ids.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.test.js","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/ids.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAExC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,EAAE,CAAC,gBAAgB,EAAE,GAAG,EAAE;YACxB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;YACvB,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yBAAyB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;YACrE,MAAM,CAAC,MAAM,CACX,GAAG,EAAE,CAAC,IAAI,cAAc,CAAC,EAAE,EAAE,EAAE,cAAc,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC,CAChE,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=manual.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manual.test.d.ts","sourceRoot":"","sources":["../../../../../src/core/position-strings/test/manual.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,307 @@
1
+ import { assert } from "chai";
2
+ import seedrandom from "seedrandom";
3
+ import { IDs, PositionSource } from "../src";
4
+ import { assertIsOrdered, testUniqueAfterDelete } from "./util";
5
+ describe("manual", () => {
6
+ const rng = seedrandom("42");
7
+ const randomName = IDs.pseudoRandom(rng);
8
+ const randomAlice = IDs.pseudoRandom(rng);
9
+ const randomBobby = IDs.pseudoRandom(rng);
10
+ const randomBob = IDs.pseudoRandom(rng, { length: 5 });
11
+ describe("single user", () => {
12
+ describe("random ID", () => {
13
+ testSingleUser(randomName);
14
+ });
15
+ describe("alphabetic ID", () => {
16
+ testSingleUser("alice");
17
+ });
18
+ describe("numeric ID", () => {
19
+ testSingleUser("0");
20
+ });
21
+ describe("empty ID", () => {
22
+ testSingleUser("");
23
+ });
24
+ });
25
+ describe("two users", () => {
26
+ describe("random IDs", () => {
27
+ testTwoUsers(randomAlice, randomBobby);
28
+ });
29
+ describe("random IDs, unequal lengths", () => {
30
+ testTwoUsers(randomAlice, randomBob);
31
+ });
32
+ describe("random IDs, prefixes", () => {
33
+ testTwoUsers(randomBobby, randomBob);
34
+ });
35
+ describe("numeric IDs", () => {
36
+ testTwoUsers("57834", "00143");
37
+ });
38
+ describe("random and empty IDs", () => {
39
+ testTwoUsers(randomAlice, "");
40
+ });
41
+ });
42
+ });
43
+ function testSingleUser(ID) {
44
+ let alice;
45
+ beforeEach(() => {
46
+ alice = new PositionSource({ ID });
47
+ });
48
+ it("LtR", () => {
49
+ let previous = PositionSource.FIRST;
50
+ const list = [];
51
+ for (let i = 0; i < 20; i++) {
52
+ previous = alice.createBetween(previous, PositionSource.LAST);
53
+ list.push(previous);
54
+ }
55
+ assertIsOrdered(list);
56
+ });
57
+ it("RtL", () => {
58
+ let previous = PositionSource.LAST;
59
+ const list = [];
60
+ for (let i = 0; i < 20; i++) {
61
+ previous = alice.createBetween(PositionSource.FIRST, previous);
62
+ list.unshift(previous);
63
+ }
64
+ assertIsOrdered(list);
65
+ });
66
+ it("restart", () => {
67
+ const list = [];
68
+ for (let j = 0; j < 5; j++) {
69
+ let previous = PositionSource.FIRST;
70
+ let after = list[0]; // Out-of-bounds okay
71
+ for (let i = 0; i < 10; i++) {
72
+ previous = alice.createBetween(previous, after);
73
+ list.splice(i, 0, previous);
74
+ }
75
+ }
76
+ assertIsOrdered(list);
77
+ });
78
+ it("LtR long", () => {
79
+ let previous = PositionSource.FIRST;
80
+ const list = [];
81
+ for (let i = 0; i < 1000; i++) {
82
+ previous = alice.createBetween(previous, PositionSource.LAST);
83
+ list.push(previous);
84
+ }
85
+ assertIsOrdered(list);
86
+ // Efficiency check.
87
+ assert.isBelow(list.at(-1).length, 30);
88
+ });
89
+ it("RtL long", () => {
90
+ let previous = PositionSource.LAST;
91
+ const list = [];
92
+ for (let i = 0; i < 1000; i++) {
93
+ previous = alice.createBetween(PositionSource.FIRST, previous);
94
+ list.unshift(previous);
95
+ }
96
+ assertIsOrdered(list);
97
+ });
98
+ it("LtR, mid LtR", () => {
99
+ let previous = PositionSource.FIRST;
100
+ const list = [];
101
+ for (let i = 0; i < 20; i++) {
102
+ previous = alice.createBetween(previous, PositionSource.LAST);
103
+ list.push(previous);
104
+ }
105
+ const midRight = list[10];
106
+ previous = list[9];
107
+ for (let i = 0; i < 20; i++) {
108
+ previous = alice.createBetween(previous, midRight);
109
+ list.splice(10 + i, 0, previous);
110
+ }
111
+ assertIsOrdered(list);
112
+ });
113
+ it("LtR, mid RtL", () => {
114
+ let previous = PositionSource.FIRST;
115
+ const list = [];
116
+ for (let i = 0; i < 20; i++) {
117
+ previous = alice.createBetween(previous, PositionSource.LAST);
118
+ list.push(previous);
119
+ }
120
+ const midLeft = list[9];
121
+ previous = list[10];
122
+ for (let i = 0; i < 20; i++) {
123
+ previous = alice.createBetween(midLeft, previous);
124
+ list.splice(10, 0, previous);
125
+ }
126
+ assertIsOrdered(list);
127
+ });
128
+ it("unique after delete", () => {
129
+ let previous = PositionSource.FIRST;
130
+ const list = [];
131
+ for (let i = 0; i < 20; i++) {
132
+ previous = alice.createBetween(previous, PositionSource.LAST);
133
+ list.push(previous);
134
+ }
135
+ const midLeft = list[9];
136
+ previous = list[10];
137
+ for (let i = 0; i < 20; i++) {
138
+ previous = alice.createBetween(midLeft, previous);
139
+ list.splice(10, 0, previous);
140
+ }
141
+ testUniqueAfterDelete(list, alice);
142
+ });
143
+ }
144
+ function testTwoUsers(ID1, ID2) {
145
+ let alice;
146
+ let bob;
147
+ beforeEach(() => {
148
+ alice = new PositionSource({ ID: ID1 });
149
+ bob = new PositionSource({ ID: ID2 });
150
+ });
151
+ it("LtR sequential", () => {
152
+ let previous = PositionSource.FIRST;
153
+ const list = [];
154
+ for (let i = 0; i < 40; i++) {
155
+ const user = i >= 20 ? bob : alice;
156
+ previous = user.createBetween(previous, PositionSource.LAST);
157
+ list.push(previous);
158
+ }
159
+ assertIsOrdered(list);
160
+ });
161
+ it("LtR alternating", () => {
162
+ let previous = PositionSource.FIRST;
163
+ const list = [];
164
+ for (let i = 0; i < 40; i++) {
165
+ const user = i % 2 == 0 ? bob : alice;
166
+ previous = user.createBetween(previous, PositionSource.LAST);
167
+ list.push(previous);
168
+ }
169
+ assertIsOrdered(list);
170
+ });
171
+ it("RtL sequential", () => {
172
+ let previous = PositionSource.LAST;
173
+ const list = [];
174
+ for (let i = 0; i < 40; i++) {
175
+ const user = i >= 20 ? bob : alice;
176
+ previous = user.createBetween(PositionSource.FIRST, previous);
177
+ list.unshift(previous);
178
+ }
179
+ assertIsOrdered(list);
180
+ });
181
+ it("RtL alternating", () => {
182
+ let previous = PositionSource.LAST;
183
+ const list = [];
184
+ for (let i = 0; i < 40; i++) {
185
+ const user = i % 2 == 0 ? bob : alice;
186
+ previous = user.createBetween(PositionSource.FIRST, previous);
187
+ list.unshift(previous);
188
+ }
189
+ assertIsOrdered(list);
190
+ });
191
+ it("restart alternating", () => {
192
+ const list = [];
193
+ for (let j = 0; j < 5; j++) {
194
+ let previous = PositionSource.FIRST;
195
+ let after = list[0]; // out-of-bounds okay
196
+ for (let i = 0; i < 10; i++) {
197
+ const user = i % 2 === 0 ? bob : alice;
198
+ previous = user.createBetween(previous, after);
199
+ list.splice(i, 0, previous);
200
+ }
201
+ }
202
+ assertIsOrdered(list);
203
+ });
204
+ it("LtR concurrent", () => {
205
+ let previous = undefined;
206
+ const list1 = [];
207
+ for (let i = 0; i < 20; i++) {
208
+ previous = alice.createBetween(previous, undefined);
209
+ list1.push(previous);
210
+ }
211
+ previous = undefined;
212
+ const list2 = [];
213
+ for (let i = 0; i < 20; i++) {
214
+ previous = bob.createBetween(previous, undefined);
215
+ list2.push(previous);
216
+ }
217
+ // list1 and list2 should be sorted one after the other, according
218
+ // to their first element (non-interleaving).
219
+ let list;
220
+ if (list1[0] < list2[0]) {
221
+ // list1 < list2
222
+ list = [...list1, ...list2];
223
+ }
224
+ else
225
+ list = [...list2, ...list1];
226
+ assertIsOrdered(list);
227
+ });
228
+ it("RtL concurrent", () => {
229
+ let previous = undefined;
230
+ const list1 = [];
231
+ for (let i = 0; i < 20; i++) {
232
+ previous = alice.createBetween(undefined, previous);
233
+ list1.unshift(previous);
234
+ }
235
+ previous = undefined;
236
+ const list2 = [];
237
+ for (let i = 0; i < 20; i++) {
238
+ previous = bob.createBetween(undefined, previous);
239
+ list2.unshift(previous);
240
+ }
241
+ // list1 and list2 should be sorted one after the other, according
242
+ // to their first element (non-interleaving).
243
+ let list;
244
+ if (list1[0] < list2[0]) {
245
+ // list1 < list2
246
+ list = [...list1, ...list2];
247
+ }
248
+ else
249
+ list = [...list2, ...list1];
250
+ assertIsOrdered(list);
251
+ });
252
+ it("insert between concurrent", () => {
253
+ // "Hard case" from the blog post - see
254
+ // https://mattweidner.com/2022/10/05/basic-list-crdt.html#between-concurrent
255
+ const a = alice.createBetween(undefined, undefined);
256
+ const b = alice.createBetween(a, undefined);
257
+ let c = alice.createBetween(a, b);
258
+ let d = bob.createBetween(a, b);
259
+ // Order so c < d.
260
+ if (d < c)
261
+ [c, d] = [d, c];
262
+ // Try making e on both alice and bob.
263
+ let e1 = alice.createBetween(c, d);
264
+ let e2 = bob.createBetween(c, d);
265
+ assert.notEqual(e1, e2);
266
+ assertIsOrdered([a, c, e1, d, b]);
267
+ assertIsOrdered([a, c, e2, d, b]);
268
+ });
269
+ it("unique after delete", () => {
270
+ const list = [];
271
+ for (let j = 0; j < 5; j++) {
272
+ let previous = PositionSource.FIRST;
273
+ let after = list[0]; // out-of-bounds okay
274
+ for (let i = 0; i < 10; i++) {
275
+ const user = i % 2 === 0 ? bob : alice;
276
+ previous = user.createBetween(previous, after);
277
+ list.splice(i, 0, previous);
278
+ }
279
+ }
280
+ assertIsOrdered(list);
281
+ testUniqueAfterDelete(list, alice);
282
+ testUniqueAfterDelete(list, bob);
283
+ });
284
+ it("left children", () => {
285
+ const gParent = alice.createBetween();
286
+ // Each parent is a child of gParent with the same waypoint but
287
+ // a range of valueIndex's.
288
+ const parents = [];
289
+ let previous = gParent;
290
+ for (let i = 0; i < 500; i++) {
291
+ previous = bob.createBetween(previous, PositionSource.LAST);
292
+ parents.push(previous);
293
+ }
294
+ const list = [gParent, ...parents];
295
+ // Create positions between gParent and the parents; since parent
296
+ // starts with gParent, they'll be left children of parent.
297
+ // This checks that leftVersion() works on those valueSeq's.
298
+ for (let i = 0; i < parents.length; i++) {
299
+ const child = bob.createBetween(gParent, parents[i]);
300
+ list.splice(2 * i + 1, 0, child);
301
+ }
302
+ assertIsOrdered(list);
303
+ testUniqueAfterDelete(list, alice);
304
+ testUniqueAfterDelete(list, bob);
305
+ });
306
+ }
307
+ //# sourceMappingURL=manual.test.js.map