package Ġorg . star coin . si ri us . core Ċ Ċ import Ġcom . google . common . collect . Lists Ċ import Ġorg . junit . Assert Ċ import Ġorg . junit . Test Ċ import Ġorg . star coin . si ri us . crypto . Crypto Service Ċ import Ġorg . star coin . si ri us . util . Mock Utils Ċ import Ġjava . math . BigInteger Ċ import Ġjava . util .* Ċ Ċ class ĠAM Tree Test Ġ{ ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest AM Tree () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe on Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġaccounts Ġ= ĠArrayList < Hub Account >() ĊĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġ 4 ĊĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġcount ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠHub Account ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCrypto Service . generate Crypto Key (). key Pair . public , ĠUpdate ( eon , Ġ 0 , Ġ 5 , Ġ 1 0 , ĠHash . random ()), Ġ 5 . to BigInteger () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaccounts . add ( a ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġtree Ġ= ĠAM Tree ( eon , Ġaccounts ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( tree . hash ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( BigInteger . ZERO , Ġtree . offset ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( 1 0 . to BigInteger () Ġ* Ġcount . to BigInteger (), Ġtree . al lot ment ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Membership Proof () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtree Ġ= ĠAM Tree . random ( Mock Utils . nextInt ( 1 0 , Ġ 5 0 )) ĊĠĠĠĠĠĠĠ Ġval Ġnode Ġ= Ġtree . random Leaf Node () !! ĊĠĠĠĠĠĠĠ Ġval Ġproof Ġ= Ġtree . get Membership Proof OrNull (( node . info Ġas ĠAM Tree Leaf NodeInfo ). address Hash ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( AM Tree . verify Membership Proof ( tree . root . to AM Tree Path Node (), Ġproof )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Membership Proof Many () Ġ{ ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 .. 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtest Membership Proof () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Empty List Hash () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtree 0 Ġ= ĠAM Tree ( 0 , Ġmutable ListOf ()) ĊĠĠĠĠĠĠĠ Ġval Ġtree 1 Ġ= ĠAM Tree ( 0 , Ġmutable ListOf ()) ĊĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( tree 0 . hash (), Ġtree 1 . hash ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Empty List Root () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtree 0 Ġ= ĠAM Tree ( 0 , Ġmutable ListOf ()) ĊĠĠĠĠĠĠĠ Ġval Ġtree 1 Ġ= ĠAM Tree ( 0 , Ġmutable ListOf ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( tree 0 . root ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( tree 0 . root . is Internal Node ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( tree 0 . root . info ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( tree 0 . root , Ġtree 1 . root ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Single Node () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġe on Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval Ġa Ġ= ĠHub Account . mock () ĊĠĠĠĠĠĠĠ Ġval Ġtree Ġ= ĠAM Tree ( eon , ĠLists . newArrayList ( a )) ĊĠĠĠĠĠĠĠ Ġval Ġproof Ġ= Ġtree . get Membership Proof OrNull ( a . address ) !! ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( AM Tree . verify Membership Proof ( tree . root . to AM Tree Path Node (), Ġproof )) ĊĊĠĠĠĠĠĠĠ Ġ// Ġtest Ġverify Ġafter Ġmarshal ĊĠĠĠĠĠĠĠ Ġval Ġroot Bytes Ġ= Ġtree . root . to AM Tree Path Node (). to Protobuf () ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= ĠAM Tree Path Node . parseFrom Protobuf ( root Bytes ) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( tree . root . to AM Tree Path Node (), Ġroot ) ĊĊĠĠĠĠĠĠĠ Ġval Ġproof 1 Ġ= ĠAM Tree Proof . parseFrom Protobuf ( proof . to Protobuf ()) ĊĠĠĠĠĠĠĠ ĠAssert . assertEquals ( proof , Ġproof 1 ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( AM Tree . verify Membership Proof ( root , Ġproof 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Empty Tree () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtree Ġ= ĠAM Tree () ĊĠĠĠĠĠĠĠ ĠAssert . assertNotNull ( tree . root ) ĊĠĠĠĠĠĠĠ ĠAssert . assertTrue ( tree . root . is Internal Node ) ĊĠĠĠĠĠĠĠ ĠAssert . assertNull ( tree . get Membership Proof OrNull ( Address . random ())) ĊĠĠĠ Ġ} Ċ } Ċ