package iid import ( "testing" ) func TestDecompile(t *testing.T) { tests := []struct{ Value uint64 }{ { Value: 0b0000000000000000000000000000000000000000000000000000000000000000, }, { Value: 0b0000000000000000000000000000000000000000000000000000000000000001, }, { Value: 0b0000000000000000000000000000000000000000000000000000000000000010, }, { Value: 0b0000000000000000000000000000000000000000000000000000000000000100, }, { Value: 0b0000000000000000000000000000000000000000000000000000000000001000, }, { Value: 0b0000000000000000000000000000000000000000000000000000000000010000, }, { Value: 0b0000000000000000000000000000000000000000000000000000000000100000, }, { Value: 0b0000000000000000000000000000000000000000000000000000000001000000, }, { Value: 0b0000000000000000000000000000000000000000000000000000000010000000, }, { Value: 0b0000000000000000000000000000000000000000000000000000000100000000, }, { Value: 0b0000000000000000000000000000000000000000000000000000001000000000, }, { Value: 0b0000000000000000000000000000000000000000000000000000010000000000, }, { Value: 0b0000000000000000000000000000000000000000000000000000100000000000, }, { Value: 0b0000000000000000000000000000000000000000000000000001000000000000, }, { Value: 0b0000000000000000000000000000000000000000000000000010000000000000, }, { Value: 0b0000000000000000000000000000000000000000000000000100000000000000, }, { Value: 0b0000000000000000000000000000000000000000000000001000000000000000, }, { Value: 0b0000000000000000000000000000000000000000000000010000000000000000, }, { Value: 0b0000000000000000000000000000000000000000000000100000000000000000, }, { Value: 0b0000000000000000000000000000000000000000000001000000000000000000, }, { Value: 0b0000000000000000000000000000000000000000000010000000000000000000, }, { Value: 0b0000000000000000000000000000000000000000000100000000000000000000, }, { Value: 0b0000000000000000000000000000000000000000001000000000000000000000, }, { Value: 0b0000000000000000000000000000000000000000010000000000000000000000, }, { Value: 0b0000000000000000000000000000000000000000100000000000000000000000, }, { Value: 0b0000000000000000000000000000000000000001000000000000000000000000, }, { Value: 0b0000000000000000000000000000000000000010000000000000000000000000, }, { Value: 0b0000000000000000000000000000000000000100000000000000000000000000, }, { Value: 0b0000000000000000000000000000000000001000000000000000000000000000, }, { Value: 0b0000000000000000000000000000000000010000000000000000000000000000, }, { Value: 0b0000000000000000000000000000000000100000000000000000000000000000, }, { Value: 0b0000000000000000000000000000000001000000000000000000000000000000, }, { Value: 0b0000000000000000000000000000000010000000000000000000000000000000, }, { Value: 0b0000000000000000000000000000000100000000000000000000000000000000, }, { Value: 0b0000000000000000000000000000001000000000000000000000000000000000, }, { Value: 0b0000000000000000000000000000010000000000000000000000000000000000, }, { Value: 0b0000000000000000000000000000100000000000000000000000000000000000, }, { Value: 0b0000000000000000000000000001000000000000000000000000000000000000, }, { Value: 0b0000000000000000000000000010000000000000000000000000000000000000, }, { Value: 0b0000000000000000000000000100000000000000000000000000000000000000, }, { Value: 0b0000000000000000000000001000000000000000000000000000000000000000, }, { Value: 0b0000000000000000000000010000000000000000000000000000000000000000, }, { Value: 0b0000000000000000000000100000000000000000000000000000000000000000, }, { Value: 0b0000000000000000000001000000000000000000000000000000000000000000, }, { Value: 0b0000000000000000000010000000000000000000000000000000000000000000, }, { Value: 0b0000000000000000000100000000000000000000000000000000000000000000, }, { Value: 0b0000000000000000001000000000000000000000000000000000000000000000, }, { Value: 0b0000000000000000010000000000000000000000000000000000000000000000, }, { Value: 0b0000000000000000100000000000000000000000000000000000000000000000, }, { Value: 0b0000000000000001000000000000000000000000000000000000000000000000, }, { Value: 0b0000000000000010000000000000000000000000000000000000000000000000, }, { Value: 0b0000000000000100000000000000000000000000000000000000000000000000, }, { Value: 0b0000000000001000000000000000000000000000000000000000000000000000, }, { Value: 0b0000000000010000000000000000000000000000000000000000000000000000, }, { Value: 0b0000000000100000000000000000000000000000000000000000000000000000, }, { Value: 0b0000000001000000000000000000000000000000000000000000000000000000, }, { Value: 0b0000000010000000000000000000000000000000000000000000000000000000, }, { Value: 0b0000000100000000000000000000000000000000000000000000000000000000, }, { Value: 0b0000001000000000000000000000000000000000000000000000000000000000, }, { Value: 0b0000010000000000000000000000000000000000000000000000000000000000, }, { Value: 0b0000100000000000000000000000000000000000000000000000000000000000, }, { Value: 0b0001000000000000000000000000000000000000000000000000000000000000, }, { Value: 0b0010000000000000000000000000000000000000000000000000000000000000, }, { Value: 0b0100000000000000000000000000000000000000000000000000000000000000, }, { Value: 0b0111111111111111111111111111111111111111111111111111111111111110, }, { Value: 0b0111111111111111111111111111111111111111111111111111111111111101, }, { Value: 0b0111111111111111111111111111111111111111111111111111111111111011, }, { Value: 0b0111111111111111111111111111111111111111111111111111111111110111, }, { Value: 0b0111111111111111111111111111111111111111111111111111111111101111, }, { Value: 0b0111111111111111111111111111111111111111111111111111111111011111, }, { Value: 0b0111111111111111111111111111111111111111111111111111111110111111, }, { Value: 0b0111111111111111111111111111111111111111111111111111111101111111, }, { Value: 0b0111111111111111111111111111111111111111111111111111111011111111, }, { Value: 0b0111111111111111111111111111111111111111111111111111110111111111, }, { Value: 0b0111111111111111111111111111111111111111111111111111101111111111, }, { Value: 0b0111111111111111111111111111111111111111111111111111011111111111, }, { Value: 0b0111111111111111111111111111111111111111111111111110111111111111, }, { Value: 0b0111111111111111111111111111111111111111111111111101111111111111, }, { Value: 0b0111111111111111111111111111111111111111111111111011111111111111, }, { Value: 0b0111111111111111111111111111111111111111111111110111111111111111, }, { Value: 0b0111111111111111111111111111111111111111111111101111111111111111, }, { Value: 0b0111111111111111111111111111111111111111111111011111111111111111, }, { Value: 0b0111111111111111111111111111111111111111111110111111111111111111, }, { Value: 0b0111111111111111111111111111111111111111111101111111111111111111, }, { Value: 0b0111111111111111111111111111111111111111111011111111111111111111, }, { Value: 0b0111111111111111111111111111111111111111110111111111111111111111, }, { Value: 0b0111111111111111111111111111111111111111101111111111111111111111, }, { Value: 0b0111111111111111111111111111111111111111011111111111111111111111, }, { Value: 0b0111111111111111111111111111111111111110111111111111111111111111, }, { Value: 0b0111111111111111111111111111111111111101111111111111111111111111, }, { Value: 0b0111111111111111111111111111111111111011111111111111111111111111, }, { Value: 0b0111111111111111111111111111111111110111111111111111111111111111, }, { Value: 0b0111111111111111111111111111111111101111111111111111111111111111, }, { Value: 0b0111111111111111111111111111111111011111111111111111111111111111, }, { Value: 0b0111111111111111111111111111111110111111111111111111111111111111, }, { Value: 0b0111111111111111111111111111111101111111111111111111111111111111, }, { Value: 0b0111111111111111111111111111111011111111111111111111111111111111, }, { Value: 0b0111111111111111111111111111110111111111111111111111111111111111, }, { Value: 0b0111111111111111111111111111101111111111111111111111111111111111, }, { Value: 0b0111111111111111111111111111011111111111111111111111111111111111, }, { Value: 0b0111111111111111111111111110111111111111111111111111111111111111, }, { Value: 0b0111111111111111111111111101111111111111111111111111111111111111, }, { Value: 0b0111111111111111111111111011111111111111111111111111111111111111, }, { Value: 0b0111111111111111111111110111111111111111111111111111111111111111, }, { Value: 0b0111111111111111111111101111111111111111111111111111111111111111, }, { Value: 0b0111111111111111111111011111111111111111111111111111111111111111, }, { Value: 0b0111111111111111111110111111111111111111111111111111111111111111, }, { Value: 0b0111111111111111111101111111111111111111111111111111111111111111, }, { Value: 0b0111111111111111111011111111111111111111111111111111111111111111, }, { Value: 0b0111111111111111110111111111111111111111111111111111111111111111, }, { Value: 0b0111111111111111101111111111111111111111111111111111111111111111, }, { Value: 0b0111111111111111011111111111111111111111111111111111111111111111, }, { Value: 0b0111111111111110111111111111111111111111111111111111111111111111, }, { Value: 0b0111111111111101111111111111111111111111111111111111111111111111, }, { Value: 0b0111111111111011111111111111111111111111111111111111111111111111, }, { Value: 0b0111111111110111111111111111111111111111111111111111111111111111, }, { Value: 0b0111111111101111111111111111111111111111111111111111111111111111, }, { Value: 0b0111111111011111111111111111111111111111111111111111111111111111, }, { Value: 0b0111111110111111111111111111111111111111111111111111111111111111, }, { Value: 0b0111111101111111111111111111111111111111111111111111111111111111, }, { Value: 0b0111111011111111111111111111111111111111111111111111111111111111, }, { Value: 0b0111110111111111111111111111111111111111111111111111111111111111, }, { Value: 0b0111101111111111111111111111111111111111111111111111111111111111, }, { Value: 0b0111011111111111111111111111111111111111111111111111111111111111, }, { Value: 0b0110111111111111111111111111111111111111111111111111111111111111, }, { Value: 0b0101111111111111111111111111111111111111111111111111111111111111, }, { Value: 0b0011111111111111111111111111111111111111111111111111111111111111, }, { Value: 0b0111111111111111111111111111111111111111111111111111111111111111, }, { Value: 0b0000000000000000000000000000000000000000100000000000000000000001, }, { Value: 0b0100000000000000000000000000000000000001000000000000000000000000, }, { Value: 0b0100000000000000000000000000000000000001100000000000000000000001, }, } for testNumber, test := range tests { first, second := decompile(test.Value) actual := compile(first, second) if expected := test.Value; expected != actual { t.Errorf("For test #%d, the actual re-compiled value of the decompiled values is not what was expected.", testNumber) t.Logf("EXPECTED: %064b", expected) t.Logf("ACTUAL: %064b", actual) t.Logf("FIRST %064b", first) t.Logf("SECOND %064b", second) continue } } }