::  tests for keygen-hoon
::
::  largely copied from keygen-js here:
::  https://github.com/urbit/keygen-js/blob/master/test/test.js
::
/+  *test, keygen
=,  keygen
::
|%
++  test-child-seed-from-seed-0
  %+  expect-eq
    !>  ;:  weld
          "bonus favorite swallow panther frequent random "
          "essence loop motion apology skull ginger "
          "subject exchange please series meadow tree "
          "latin smile bring process excite tornado"
        ==
    !>  %+  from-entropy:bip39  32
        %+  seed:ds
          ^-  byts
          :-  32
          0xb2bd.f8de.8452.b18f.0219.5b6e.7bfc.82b9.
            00fb.cc25.681f.07ae.10f3.8f11.e5af.53af
        "management"
::
++  test-child-seed-from-seed-1
  %+  expect-eq
    !>  ;:  weld
          "impact keep magnet two rice country "
          "girl jungle cabin mystery usual tree "
          "horn skull winter palace supreme reform "
          "sphere cabbage cry athlete puppy misery"
        ==
    !>  %+  from-entropy:bip39  32
        %+  seed:ds
          ^-  byts
          :-  32
          0xb2bd.f8de.8452.b18f.0219.5b6e.7bfc.82b9.
            00fb.cc25.681f.07ae.10f3.8f11.e5af.53af
        "ownership"
::
++  test-urbit-keys-from-seed-0
  %+  expect-eq
    !>  :-  :-  0x9a09.b7e8.1646.7b10.ebdc.d47d.7186.1a2d.
                  0896.189f.2e66.690b.636a.d3bd.f8fc.c343
                0x52c8.30cd.009a.4c65.9977.8b25.8fa8.898c.
                  b8b4.9dd7.1279.c7ca.502c.b04c.2f53.0d7a
            :-  0xf718.7602.dff5.e3ee.a27b.4c46.3686.0110.
                  6916.d704.a2ef.2e45.1838.d4ea.80b3.95e0
                0x9c51.3a22.7951.4766.1234.eea1.3ee5.fa5b.
                  1a8b.9bed.1aa4.b1cf.87f6.bcf3.53af.a8bb
    !>  %-  urbit:ds
        0x8835.9ba6.1d76.6e1c.2ec9.5988.3166.8d42.
          33b0.f8f5.8b29.da8c.f33d.25b2.590d.62a0
::
++  test-urbit-keys-from-seed-1
  %+  expect-eq
    !>  :-  :-  0x76fa.3a85.8dfe.b18f.d7cd.1a63.b2fe.84f9.
                  5840.e3e5.b19e.0e69.5069.2cbd.c55f.3821
                0x2561.9a9c.e945.8f86.9f06.4ca5.6937.8528.
                  3a20.aa7a.8433.baf5.fccc.bb0a.84f7.6cae
            :-  0xfade.a0a3.7e6d.111e.b080.6648.fa66.d689.
                  f200.f38c.fd1e.3fe6.83fc.148d.76c6.9d27
                0x972b.d3bc.056a.c414.a3c3.8bc9.48a7.4506.
                  120b.2fc8.4ae2.2ba6.05c9.eeef.2b7c.c1db
    !>  %-  urbit:ds
        0x52dc.7422.d68c.0209.6105.02e7.1009.d6e9.
          f054.da2a.ccaf.b612.180c.853f.3f77.d606
::
++  test-generate-wallet-0
  %+  expect-eq
    !>  ^-  vault
        :*  ::  ownership
            ^-  node
            :+  "ownership"
              ;:  weld
                "fabric impulse bone solar six turkey "
                "midnight loud pizza catalog diet slice "
                "problem hover market type light shift "
                "response fit fantasy glory member wisdom"
              ==
            :+  :-  0x2.53e3.cfd7.4b20.ac63.3d35.defa.4d42.1b8a.
                        99cc.5dbd.d180.b149.fe8b.dff8.f394.7c70
                0xbc48.4a9d.6056.1386.75fd.8f24.e5c1.bdda.
                  649c.7acb.3fcf.bc95.52ff.fcf1.4a20.023f
              0x9988.685f.c1e5.c407.9aae.a6a4.05e0.f289.56b1.bbbe
            0x6544.c8c4.3d87.5da4.b3bb.9871.d0d2.d1b8.
              253d.c6a1.e2c1.666b.ca86.5fe1.8543.828b
            ::  voting
            ^-  node
            :+  "voting"
              ;:  weld
                "noise vote enter doctor double charge "
                "above car tomato brick dutch miracle "
                "narrow seed aware harsh bottom armor "
                "bonus property census hybrid target symbol"
              ==
            :+  :-  0x2.8df2.5e7f.abe0.b2c7.4d9d.65dc.c800.7598.
                        a560.f863.498c.98b4.90da.420a.58e1.15c1
                0x479f.d82a.0695.563d.29b3.942b.f180.f461.
                  4a67.36f1.b731.b9df.3389.4bb6.6a79.ca28
              0x38a9.e280.124b.3ba1.eaac.4466.43b6.0752.a066.3769
            0x4f0.d00f.571a.833e.bd62.5764.24fd.0841.
              94c3.e148.8c16.2bb9.7922.7a03.fdc3.8d16
            ::  management
            ^-  node
            :+  "management"
              ;:  weld
                "veteran flash code abuse course front "
                "better grace fabric chef puzzle outside "
                "visual sauce spice auction cactus galaxy "
                "need view tomorrow spirit chimney course"
              ==
            :+  :-  0x3.bc94.9927.1df2.7b4e.90cd.13a6.3ba6.f48b.
                        88aa.aca7.5ed9.a7ed.9742.9ef9.d7bb.4dea
                0x5bed.7cc5.0cb7.4cd8.0a79.8bdb.2bc4.c7ef.
                  fb7d.6875.a60d.0d0d.6ec8.1efd.90fc.e724
              0x177.441d.1b78.faee.ee95.c217.bebd.f02d.eb2c.e5ba
            0x1135.c11e.8478.9663.0c8b.d3c3.5609.7f93.
              7b6d.f92d.88e2.c239.f517.fa06.53ab.205a
            ::  transfer
            ^-  node
            :+  "transfer"
              ;:  weld
                "pill ensure explain submit rifle street "
                "ranch holiday slot carpet memory market "
                "stamp asset prefer black promote insane "
                "green lemon tornado across stem talent"
              ==
            :+  :-  0x2.ba44.096a.396f.1d8c.922f.dacf.5648.47a1.
                        d8e8.5a6a.44d9.ba03.e162.4413.21e0.6e8b
                0xc260.5506.df25.f841.dc00.b43c.1359.65f7.
                  ffc9.5f7e.15c1.98ef.e59b.47bc.8fd9.35e4
              0x6cb2.540c.39e6.7313.8881.744f.00c2.dfc2.382e.75c2
            0x1603.e233.be5f.8c05.88ef.783e.ec46.d86d.
              88ad.f253.ebab.5920.0073.a5bf.187e.9c48
            ::  spawn
            ^-  node
            :+  "spawn"
              ;:  weld
                "confirm act become tortoise vocal session "
                "nuclear enemy auction dirt elephant produce "
                "outside symptom involve attack course receive "
                "grit solid stand expand brisk ranch"
              ==
            :+  :-  0x2.3c12.4789.c98e.8fea.ef80.e467.ad00.cfd7.
                        5973.4824.8b31.8859.813c.e383.0a22.1d86
                0x74cb.bc06.a433.9ce8.b72e.d7e8.4597.d6eb.
                  6b2e.3d90.e672.dded.5048.b200.0ed9.e33e
              0xd0f7.d562.9067.5609.d37f.c75f.8413.535f.7aa5.db04
            0x6374.0b42.257a.eb76.ef53.9fd2.08e5.7bc0.
              d15f.2d34.b27a.9972.9fab.2025.a977.1387
            ::  network
            *uode
          ==
    !>  =-  -(network *uode)
        %-  full-wallet-from-ticket
        :+  ~nec  ::  1
          4^.~doznec-marbud
        [0 ~]
::
++  test-generate-wallet-1
  %+  expect-eq
    !>  ^-  vault
        :*  ::  ownership
            ^-  node
            :+  "ownership"
              ;:  weld
                "polar rich inch innocent image swear "
                "among sense rent kit bench scissors "
                "menu coil sunny plate virus robot "
                "neutral craft have attend wish pig"
              ==
            :+  :-  0x3.5274.be52.86fe.d3f2.9391.c90a.f9b2.2c9e.
                        0458.c3ed.93b0.b119.1ce1.0c4c.083c.878b
                0x907.827f.7709.0a9d.2e71.8f67.1e78.8567.
                  2bd9.242a.cbc7.e607.1ccf.baf0.c30a.2939
              0x88f.d420.0d66.71c3.95c9.a1d3.1d07.b6db.c416.ba80
            0xd6cb.6883.c443.2813.cc5c.a921.5147.ea94.
              82ea.4cc9.000d.44a1.ace6.c931.4782.bf6b
            ::  voting
            *node
            ::  management
            ^-  node
            :+  "management"
              ;:  weld
                "know legal prefer express valve minor "
                "tornado three have future bean acoustic "
                "sound helmet crane bronze also royal "
                "choice expire dust priority nation wide"
              ==
            :+  :-  0x3.0182.61db.f21d.1785.9b27.b42c.c02e.f68a.
                        82ee.10af.b70b.3ff0.c2bd.fdc1.31ee.4921
                0xeb3c.de29.0801.0f01.8a9f.b0ec.9566.209d.
                  38a2.9bf5.ad3e.42fe.a393.2e5b.ee33.7519
              0xc3df.999b.5424.d27d.f303.5b58.e9e3.ffd8.6692.eb6d
            0xb883.c3f7.1d40.1721.17b4.e260.563f.c048.
              313a.0740.7774.c621.812e.ae20.3498.47a3
            ::  transfer
            ^-  node
            :+  "transfer"
              ;:  weld
                "worth decrease silly hint hurdle fiction "
                "lunar brush habit soda caught wisdom "
                "rifle talk insane approve athlete glory "
                "choice glance kidney latin clown employ"
              ==
            :+  :-  0x3.27f3.65a6.52bb.7431.d3a2.36cf.9cb4.12c9.
                        96bc.7cea.17a2.b101.6d78.34d0.3cc2.b7e0
                0xb5dc.5724.c072.5a37.a85f.9a8b.d55c.d3f6.
                  6312.7c72.ead8.35c4.733a.f8d1.0ebe.396d
              0xce3.c04f.ff81.238f.59c8.9cd3.3ab9.bdf0.5410.8e25
            0x80d1.2b9c.5f15.5258.6982.6ad9.1da1.549b.
              d5a8.6065.5f4d.3303.5a56.c9aa.5d8a.a8d4
            ::  spawn
            ^-  node
            :+  "spawn"
              ;:  weld
                "shine noise foil stage walnut shell "
                "police slogan video humor use tower "
                "ostrich offer thank cook include business "
                "online cream ring mobile that access"
              ==
            :+  :-  0x2.fdab.05be.5bb2.70f8.cdc5.dbf8.db5c.6cab.
                        d3e0.d5f9.7fdf.5655.1dd9.3e1a.6b9b.9597
                0x3085.571d.bbce.342d.b210.4a0a.7684.cf6b.
                  ab99.58f6.ac03.eb49.5638.e2ab.eb26.1251
              0xdb27.8eb8.332b.d905.f008.e784.865f.88bc.f82a.dfdf
            0x19da.8efe.9f29.0ea8.48b3.4835.c3ea.ab37.
              8ed7.8259.2a67.de87.bc77.2c93.e50f.7915
            ::  network
            ^-  uode
            :+  0
              0xbd9d.88d3.0966.03b5.de36.2259.e97b.78b4.
                d9ca.21c8.d4e2.64ac.698c.abde.683b.936a
            :-  :-  0x25bd.0bb6.2018.1c1c.80f8.07a0.4bb7.d770.
                      1711.bdf6.793d.dbf9.ed49.d6f0.3fbb.a34f
                    0x4bd5.0bfd.a11f.f126.23b5.6a4c.20bb.9821.
                      ea41.a2f4.b125.e9af.0b19.5c4d.f833.fe7c
                :-  0x6889.eede.9463.4a06.0d34.03ca.0653.1bc3.
                      8bb4.a44a.c68e.6cea.99c2.c3b7.e76f.3a8a
                    0xcc33.8853.7bf9.1f94.1a7a.af2b.007a.e010.
                      bee5.94ce.5814.ad93.0c2e.1c72.e8b1.1e3f
          ==
    !>  ^-  vault
        =-  -(voting *node)
        %-  full-wallet-from-ticket
        :+  ~matbyr  ::  65.012
          8^.~marbud-tidsev-litsut-hidfep
        [0 ~]
::
++  test-generate-wallet-2
  %+  expect-eq
    !>  ^-  vault
        :*  ::  ownership
            ^-  node
            :+  "ownership"
              ;:  weld
                "today submit park slow present junior "
                "fall metal spend misery begin together "
                "buffalo enroll rebuild dash cry dove "
                "notable sniff morning forum else pizza"
              ==
            :+  :-  0x3.f70d.c088.7e14.8945.a66a.09b5.f261.db67.
                        669b.7eda.4d92.ce34.6081.7710.b294.04f4
                0x865a.ac06.8660.526f.021e.9cce.dfd1.e91a.
                  59bd.266b.b02d.cdd6.7d35.785a.716b.8ad8
              0x8bb9.d38a.2b40.a673.06d1.c1c9.a3fc.7a20.ee97.2841
            0xdcc7.bd8d.a07b.b80c.dff0.5539.e2c9.b8bd.
              d41a.a016.8efb.4cb1.ad91.d442.356c.7e5a
            ::  voting
            *node
            ::  management
            ^-  node
            :+  "management"
              ;:  weld
                "ramp stem peanut away relax improve "
                "school excess era loan razor crane "
                "cruise shift junk piece regret immune "
                "pencil inspire lab core enforce ball"
              ==
            :+  :-  0x3.9ce0.93db.f3eb.f742.e836.db1b.f76c.bf58.
                        4c3f.d015.6157.05a7.ab87.da36.0576.e598
                0x445e.2ed7.b485.19a5.1f03.489e.0a8d.72b3.
                  c7b8.d326.2a7e.af30.5325.cec4.500c.928c
              0xd73.bd00.8a2b.5201.dd2e.8db3.1371.769d.2005.6614
            0x1c5f.1486.38d0.0ccb.a199.5209.5f59.0262.
              9bc4.370e.3e8a.0c77.4096.682d.ccaa.7c85
            ::  transfer
            ^-  node
            :+  "transfer"
              ;:  weld
                "shove proof ceiling energy phone dumb "
                "offer hidden lava seminar autumn design "
                "unfair either gentle salmon magic account "
                "weather rapid antenna skill noise enough"
              ==
            :+  :-  0x2.3382.d237.b7fa.4270.5a60.64d0.6cfa.6128.
                        e9c8.8f15.9c1e.12ea.f775.c879.a335.2dfe
                0x712f.4a83.9303.daf1.12bf.3b75.81bd.1a51.
                  1f86.6c7c.4f34.1c83.3344.9c53.e605.743f
              0x2d95.a6b6.63ca.4781.889c.81d1.e432.2e6e.89e8.ec23
            0xe316.4110.6e4b.5c76.2118.7c58.c52d.1d37.
              c590.c8e4.f4bc.ae52.cb59.6cbe.2a33.6c9c
            ::  spawn
            ^-  node
            :+  "spawn"
              ;:  weld
                "magnet nose valve saddle chicken become "
                "ice scorpion sting top claw media "
                "ghost bamboo charge agent volume hidden "
                "sudden impose hand nephew canoe yard"
              ==
            :+  :-  0x3.db2f.c991.8be0.f132.6c48.50c2.ce52.ab6e.
                        5b85.873e.2cf3.1775.93a1.80d4.6ddd.af5c
                0xebba.82ca.e8b7.af26.268a.7114.2326.5b9d.
                  9cfb.579e.ae75.a4b9.8700.57ed.a183.4b40
              0x7989.e11f.9855.f2be.7ca4.ac7d.485a.1a77.337b.b602
            0x7a3c.9445.c476.7623.eb6e.9c98.92c9.b9fb.
              13e8.2d3c.5443.62c7.7033.ad62.343e.a92e
            ::  network
            *uode
          ==
    !>  ^-  vault
        =-  -(voting *node, network *uode)
        %-  full-wallet-from-ticket
        :+  ~zod
          :-  48
          .~wacfus-dabpex-danted-mosfep-pasrud-lavmer-
            nodtex-taslus-pactyp-milpub-pildeg-fornev-
            ralmed-dinfeb-fopbyr-sanbet-sovmyl-dozsut-
            mogsyx-mapwyc-sorrup-ricnec-marnys-lignex
        [6 `'froot loops']
::
++  test-derive-network-seed-rev-0
  %+  expect-eq
    !>  (seed:ds 64^0x5eed "network0")
    !>  (derive-network-seed 0x5eed 0)
::
++  test-derive-network-seed-rev-up
  %+  expect-eq
    !>  |
    !>  .=  (seed:ds 64^0x5eed "network1")
        (derive-network-seed 0x5eed 1)
--