You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

59 lines
1.3 KiB

const hashCode = str =>
(
[...str].reduce((h, c) => (h = (h << 5) - h + c.charCodeAt(0)) & h, 0) >>> 0
).toString(36)
// /*/ // ⚡
export const tests = []
const t = (f) => tests.push(f)
t(({ eq }) => {
const { chain, ...block } = blockChain({ a: 1 })
return eq(block, {
index: 1,
data: { a: 1 },
prev: { index: 0, hash: '0' },
hash: '1103f27',
})
})
t(({ eq }) => {
const block = blockChain({ a: 1 }).chain({ hello: 'world' })
const chain = block
.chain({ value: 4455 })
.chain({ some: 'data' })
.chain({ cool: 'stuff' })
const fork = block
.chain({ value: 335 })
.chain({ some: 'data' })
.chain({ cool: 'stuff' })
return eq(
{
chainRoot: chain.prev.prev.prev,
forkRoot: chain.prev.prev.prev,
chainHash: chain.hash,
forkHash: fork.hash,
index: chain.index,
data: chain.data,
},
{
chainRoot: block,
forkRoot: block,
chainHash: '1qr3qfs',
forkHash: '1x9gsc1',
index: fork.index,
data: fork.data,
},
)
})
t(({ eq }) => {
const random = Math.random()
const hash = hashCode(`21103f27{"random":${random}}`)
const { prev, chain, ...block } = blockChain({ a: 1 }).chain({ random })
return eq(block, { index: 2, data: { random }, hash })
})
Object.freeze(tests)