/+ *test |% ++ test-fein-fynd-inverses ;: weld %+ expect-eq !> 0 !> (fynd:ob (fein:ob 0)) :: %+ expect-eq !> 15.663.360 !> (fynd:ob (fein:ob 15.663.360)) :: %+ expect-eq !> 1.208.402.137 !> (fynd:ob (fein:ob 1.208.402.137)) :: %+ expect-eq !> 123.456.789.012.345 !> (fynd:ob (fein:ob 123.456.789.012.345)) :: == :: ++ test-fein-fynd-match-reference-vals ;: weld %+ expect-eq !> 1.897.766.331 !> (fein:ob 123.456.789) :: %+ expect-eq !> 1.208.402.137 !> (fein:ob 15.663.360) :: %+ expect-eq !> 15.663.360 !> (fynd:ob 1.208.402.137) :: %+ expect-eq !> 123.456.789 !> (fynd:ob 1.897.766.331) :: == :: ++ test-feis-tail-inverses ;: weld %+ expect-eq !> 15.663.360 !> (tail:ob (feis:ob 15.663.360)) :: %+ expect-eq !> 1.208.402.137 !> (tail:ob (feis:ob 1.208.402.137)) :: == :: ++ test-feis-tail-match-reference-vals ;: weld %+ expect-eq !> 2.060.458.291 !> (feis:ob 123.456.789) :: %+ expect-eq !> 1.195.593.620 !> (feis:ob 15.663.360) :: %+ expect-eq !> 1.107.963.580 !> (tail:ob 123.456.789) :: %+ expect-eq !> 15.663.360 !> (tail:ob 1.195.593.620) :: == :: ++ test-exhaustive-small =/ a=(list @) ~[5 9 2 6 4 0 8 7 1 10 3 11] =/ b=(list @) ~[2 1 0 3 10 4 9 5 7 11 6 8] =/ c=(list @) ~[10 6 7 1 0 11 3 9 5 2 8 4] =/ d=(list @) ~[11 0 3 5 9 8 6 10 4 1 2 7] :: =/ prf |= [j=@ r=@] ^- @ ?: =(j 0) (snag r a) ?: =(j 1) (snag r b) ?: =(j 2) (snag r c) (snag r d) :: :: =/ feis |= arg=@ ^- @ (fee:ob 4 3 4 12 prf arg) :: =/ tail |= arg=@ ^- @ (feen:ob 4 3 4 12 prf arg) :: =/ emm=(list @) ~[0 1 2 3 4 5 6 7 8 9 10 11] =/ semm=(set @) (sy emm) :: =/ perm=(list @) (turn emm feis) =/ inv=(list @) (turn perm tail) =/ distincts=(set @) (sy perm) :: ;: weld %+ expect-eq !> (lent perm) !> (lent ~(tap in distincts)) :: %+ expect-eq !> & !> (roll perm |=([x=@ acc=?] &((~(has in semm) x) acc))) :: %+ expect-eq !> emm !> inv :: == --