(ss1, ss2)
| 510 | * @param {import('../src/internals.js').StructStore} ss2 |
| 511 | */ |
| 512 | export const compareStructStores = (ss1, ss2) => { |
| 513 | t.assert(ss1.clients.size === ss2.clients.size) |
| 514 | for (const [client, structs1] of ss1.clients) { |
| 515 | const structs2 = /** @type {Array<Y.AbstractStruct>} */ (ss2.clients.get(client)) |
| 516 | t.assert(structs2 !== undefined && structs1.length === structs2.length) |
| 517 | for (let i = 0; i < structs1.length; i++) { |
| 518 | const s1 = structs1[i] |
| 519 | const s2 = structs2[i] |
| 520 | // checks for abstract struct |
| 521 | if ( |
| 522 | s1.constructor !== s2.constructor || |
| 523 | !Y.compareIDs(s1.id, s2.id) || |
| 524 | s1.deleted !== s2.deleted || |
| 525 | // @ts-ignore |
| 526 | s1.length !== s2.length |
| 527 | ) { |
| 528 | t.fail('Structs dont match') |
| 529 | } |
| 530 | if (s1 instanceof Y.Item) { |
| 531 | if ( |
| 532 | !(s2 instanceof Y.Item) || |
| 533 | !((s1.left === null && s2.left === null) || (s1.left !== null && s2.left !== null && Y.compareIDs(s1.left.lastId, s2.left.lastId))) || |
| 534 | !compareItemIDs(s1.right, s2.right) || |
| 535 | !Y.compareIDs(s1.origin, s2.origin) || |
| 536 | !Y.compareIDs(s1.rightOrigin, s2.rightOrigin) || |
| 537 | s1.parentSub !== s2.parentSub |
| 538 | ) { |
| 539 | return t.fail('Items dont match') |
| 540 | } |
| 541 | // make sure that items are connected correctly |
| 542 | t.assert(s1.left === null || s1.left.right === s1) |
| 543 | t.assert(s1.right === null || s1.right.left === s1) |
| 544 | t.assert(s2.left === null || s2.left.right === s2) |
| 545 | t.assert(s2.right === null || s2.right.left === s2) |
| 546 | } |
| 547 | } |
| 548 | } |
| 549 | } |
| 550 | |
| 551 | /** |
| 552 | * @template T |
no test coverage detected
searching dependent graphs…