--- /dev/null
+package compiler
+
+import (
+ "encoding/hex"
+ "strings"
+ "testing"
+
+ chainjson "github.com/vapor/encoding/json"
+
+ "github.com/vapor/equity/compiler/equitytest"
+)
+
+func TestCompile(t *testing.T) {
+ cases := []struct {
+ name string
+ contract string
+ want string
+ }{
+ {
+ "TrivialLock",
+ equitytest.TrivialLock,
+ "51",
+ },
+ {
+ "LockWithPublicKey",
+ equitytest.LockWithPublicKey,
+ "ae7cac",
+ },
+ {
+ "LockWithPublicKeyHash",
+ equitytest.LockWithPKHash,
+ "5279aa887cae7cac",
+ },
+ {
+ "LockWith2of3Keys",
+ equitytest.LockWith2of3Keys,
+ "537a547a526bae71557a536c7cad",
+ },
+ {
+ "LockToOutput",
+ equitytest.LockToOutput,
+ "00c3c251547ac1",
+ },
+ {
+ "TradeOffer",
+ equitytest.TradeOffer,
+ "547a6413000000007b7b51547ac1631a000000547a547aae7cac",
+ },
+ {
+ "EscrowedTransfer",
+ equitytest.EscrowedTransfer,
+ "537a641a000000537a7cae7cac6900c3c251557ac16328000000537a7cae7cac6900c3c251547ac1",
+ },
+ {
+ "RevealPreimage",
+ equitytest.RevealPreimage,
+ "7caa87",
+ },
+ {
+ "PriceChanger",
+ equitytest.PriceChanger,
+ "557a6432000000557a5479ae7cac6900c3c25100597a89587a89587a89587a89557a890274787e008901c07ec1633a000000007b537a51567ac1",
+ },
+ {
+ "TestDefineVar",
+ equitytest.TestDefineVar,
+ "52797b937b7887916987",
+ },
+ {
+ "TestAssignVar",
+ equitytest.TestAssignVar,
+ "7b7b9387",
+ },
+ {
+ "TestSigIf",
+ equitytest.TestSigIf,
+ "53797b879169765379a09161641c00000052795279a0696321000000765279a069",
+ },
+ {
+ "TestIfAndMultiClause",
+ equitytest.TestIfAndMultiClause,
+ "7b641f0000007087916976547aa09161641a000000765379a06963240000007b7bae7cac",
+ },
+ {
+ "TestIfNesting",
+ equitytest.TestIfNesting,
+ "7b644400000054795279879169765579a09161643500000052795479a091616429000000765379a06952795579879169633a000000765479a06953797b8791635c0000007654798791695279a091616459000000527978a0697d8791",
+ },
+ {
+ "TestConstantMath",
+ equitytest.TestConstantMath,
+ "765779577a935a93887c0431323330aa887c06737472696e67aa887c91697b011493879a",
+ },
+ }
+ for _, c := range cases {
+ t.Run(c.name, func(t *testing.T) {
+ r := strings.NewReader(c.contract)
+ compiled, err := Compile(r)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ contract := compiled[len(compiled)-1]
+ got := []byte(contract.Body)
+
+ want, err := hex.DecodeString(c.want)
+ if err != nil {
+ t.Fatal(err)
+ }
+
+ if string(got) != string(want) {
+ t.Errorf("%s got %s\nwant %s", c.name, hex.EncodeToString(got), hex.EncodeToString(want))
+ }
+ })
+ }
+}
+
+func mustDecodeHex(h string) *chainjson.HexBytes {
+ bits, err := hex.DecodeString(h)
+ if err != nil {
+ panic(err)
+ }
+ result := chainjson.HexBytes(bits)
+ return &result
+}