2021-11-08 05:10:49 +00:00
|
|
|
package xim
|
2021-11-07 07:56:21 +00:00
|
|
|
|
|
|
|
import (
|
|
|
|
"testing"
|
|
|
|
)
|
|
|
|
|
|
|
|
func TestCompile(t *testing.T) {
|
|
|
|
|
|
|
|
tests := []struct{
|
|
|
|
First uint64
|
|
|
|
Second uint64
|
|
|
|
Expected uint64
|
|
|
|
}{
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000001,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000001000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000010,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000010000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000100,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000100000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000001000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000001000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000010000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000010000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000100000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000100000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000001000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000001000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000010000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000010000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000100000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000100000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000001000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000001000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000010000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000010000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000100000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000100000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000001000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000001000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000010000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000010000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000100000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000100000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000001000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000001000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000010000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000010000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000100000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000100000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000001000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000001000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000010000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000010000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000000100000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000100000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000001000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000001000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000010000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000010000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000000100000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000100000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000001000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000001000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000010000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000010000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000000100000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000100000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000001000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000001000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000010000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000010000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000000100000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000100000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000001000000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000001000000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000010000000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000010000000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000000100000000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000100000000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000001000000000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000001000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000010000000000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000010000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000000100000000000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000100000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000001000000000000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0001000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000010000000000000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0010000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
{
|
|
|
|
// v
|
|
|
|
First: 0b0000000000000000000000000100000000000000000000000000000000000000,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0100000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// ^
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0100000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0010000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0001000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000100000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000010000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000001000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000100000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000010000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000001000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000100000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000010000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000001000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000100000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000010000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000001000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000100000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000010000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000001000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000100000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000010000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000001000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000100000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000010000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000001000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000100000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000010000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000001000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000100000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000010000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000001000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000100000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000010000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000001000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000100000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000010000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000001000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000100000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000010000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000001000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000100000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000100000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000010000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000010000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000001000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000001000000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000100000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000100000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000010000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000010000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000001000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000001000000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000100000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000100000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000010000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000010000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000001000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000001000000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000100000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000100000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000010000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000010000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000001000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000001000000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000100000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000100000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000010000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000010000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000001000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000001000000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000100000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000100000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000010000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000010000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000001000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000001000000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000100000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000100000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000010000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000010000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000001000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000001000,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000100,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000100,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000010,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000010,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000001,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000001,
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
// v v
|
|
|
|
First: 0b0000000000000000000000000100000000000000000000000000000000000001,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0100000000000000000000000000000000000001000000000000000000000000,
|
|
|
|
// ^ ^
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
// v v
|
|
|
|
Second: 0b0100000000000000000000001000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
// v v
|
|
|
|
First: 0b0000000000000000000000000100000000000000000000000000000000000001,
|
|
|
|
// v v
|
|
|
|
Second: 0b0000000000000000000000000000000000000000100000000000000000000001,
|
|
|
|
Expected: 0b0100000000000000000000000000000000000001100000000000000000000001,
|
|
|
|
// ^ ^^ ^
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111011111111111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000011111111111111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111101111111111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000101111111111111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111110111111111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000110111111111111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111011111111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111011111111111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111101111111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111101111111111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111110111111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111110111111111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111011111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111011111111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111101111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111101111111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111110111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111110111111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111011111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111011111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111101111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111101111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111110111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111110111111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111011111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111011111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111101111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111101111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111110111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111110111111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111011111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111011111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111101111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111101111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111110111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111110111111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111111011111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111111011111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111111101111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111111101111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111111110111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111111110111,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111111111011,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111111111011,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111111111101,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111111111101,
|
|
|
|
},
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111111111110,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111111111110,
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Second: 0b0111111111111111111111111111111111111111111111111111111111111111,
|
|
|
|
Expected: 0b0000000000000000000000000000000000000000111111111111111111111111,
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
{
|
|
|
|
First: 0b0000000000000000000000000111111111111111111111111111111111111111,
|
|
|
|
Second: 0b0000000000000000000000000000000000000000000000000000000000000000,
|
|
|
|
Expected: 0b0111111111111111111111111111111111111111000000000000000000000000,
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
for testNumber, test := range tests {
|
|
|
|
|
|
|
|
var actual uint64 = compile(test.First, test.Second)
|
|
|
|
if expected := test.Expected; expected != actual {
|
|
|
|
t.Errorf("For test #%d, the actual compiled result if not what was expected.", testNumber)
|
|
|
|
t.Logf("FIRST: %064b", test.First)
|
|
|
|
t.Logf("SECOND: %064b", test.Second)
|
|
|
|
t.Logf("EXPECTED: %064b", expected)
|
|
|
|
t.Logf("ACTUAL: %064b", actual)
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|