mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-23 13:45:48 +00:00
* will compile as typescript * migrated test suite to use JestJS * Migrated to Jest testing framework and typescript source files * updated deps * updated prepublish * resolved 1 failing test * changed decimal .0 on four tests, it appears that these were the only four tests expecting integer values to have '.0' * added linter * added package-lock * removed tslint in favor of eslint * changed yarn to npm * updated version 2.6->3.0 * removing package lock * updated node version in nvmrc and jest version in package * removed nvmrc * removed some unused functions * replaced data driven with file from master * commitint yarn.lock * removing babel as a dependency in favor of typescript compiling to es5 * removing babel deps * resolved testing issues by migrating helper function * added partial linting functionality for test suite * updated imports for decodeLedgerData * updated test * updated yarn.lock * removed a console.log * added eslint-jest-plugin to package * reverting to old linting, will add linting in next PR * removed comments in shamap * re-adding .nvmrc * npm -> yarn * added . to .eslintrc * added .eslintrc * removing linting for this PR * Changed linting to print a message so that linting doesnt fail in CI * changing back * added newline so diff wont show * removed eslint deps, since linting will be dealt with in a later PR * changed function calls to describe(...)
88 lines
2.5 KiB
JavaScript
88 lines
2.5 KiB
JavaScript
const { ShaMap } = require('../dist/shamap.js')
|
|
const { binary, HashPrefix } = require('../dist/coretypes')
|
|
const { coreTypes } = require('../dist/types')
|
|
const { loadFixture } = require('./utils')
|
|
|
|
function now () {
|
|
return (Number(Date.now())) / 1000
|
|
}
|
|
|
|
const ZERO =
|
|
'0000000000000000000000000000000000000000000000000000000000000000'
|
|
|
|
function makeItem (indexArg) {
|
|
let str = indexArg
|
|
while (str.length < 64) {
|
|
str += '0'
|
|
}
|
|
const index = coreTypes.Hash256.from(str)
|
|
const item = {
|
|
toBytesSink (sink) {
|
|
index.toBytesSink(sink)
|
|
},
|
|
hashPrefix () {
|
|
return [1, 3, 3, 7]
|
|
}
|
|
}
|
|
return [index, item]
|
|
}
|
|
|
|
describe('ShaMap', () => {
|
|
now()
|
|
|
|
test('hashes to zero when empty', () => {
|
|
const map = new ShaMap()
|
|
expect(map.hash().toHex()).toBe(ZERO)
|
|
})
|
|
test('creates the same hash no matter which order items are added', () => {
|
|
let map = new ShaMap()
|
|
const items = [
|
|
'0',
|
|
'1',
|
|
'11',
|
|
'7000DE445E22CB9BB7E1717589FA858736BAA5FD192310E20000000000000000',
|
|
'7000DE445E22CB9BB7E1717589FA858736BAA5FD192310E21000000000000000',
|
|
'7000DE445E22CB9BB7E1717589FA858736BAA5FD192310E22000000000000000',
|
|
'7000DE445E22CB9BB7E1717589FA858736BAA5FD192310E23000000000000000',
|
|
'12',
|
|
'122'
|
|
]
|
|
items.forEach(i => map.addItem(...makeItem(i)))
|
|
const h1 = map.hash()
|
|
expect(h1.eq(h1)).toBe(true)
|
|
map = new ShaMap()
|
|
items.reverse().forEach(i => map.addItem(...makeItem(i)))
|
|
expect(map.hash()).toStrictEqual(h1)
|
|
})
|
|
function factory (fixture) {
|
|
test(`recreate account state hash from ${fixture}`, () => {
|
|
const map = new ShaMap()
|
|
const ledger = loadFixture(fixture)
|
|
// const t = now();
|
|
const leafNodePrefix = HashPrefix.accountStateEntry
|
|
ledger.accountState.map((e, i) => {
|
|
if (i > 1000 & (i % 1000) === 0) {
|
|
console.log(e.index)
|
|
console.log(i)
|
|
}
|
|
const bytes = binary.serializeObject(e)
|
|
return {
|
|
index: coreTypes.Hash256.from(e.index),
|
|
hashPrefix () {
|
|
return leafNodePrefix
|
|
},
|
|
toBytesSink (sink) {
|
|
sink.put(bytes)
|
|
}
|
|
}
|
|
}).forEach(so => map.addItem(so.index, so))
|
|
expect(map.hash().toHex()).toBe(ledger.account_hash)
|
|
// console.log('took seconds: ', (now() - t));
|
|
})
|
|
}
|
|
factory('ledger-full-38129.json')
|
|
factory('ledger-full-40000.json')
|
|
// factory('ledger-4320277.json');
|
|
// factory('14280680.json');
|
|
})
|