// TestHasCanonicalPush ensures the canonicalPush function works as expected. func TestHasCanonicalPush(t *testing.T) { t.Parallel() for i := 0; i < 65535; i++ { builder := txscript.NewScriptBuilder() builder.AddInt64(int64(i)) script, err := builder.Script() if err != nil { t.Errorf("Script: test #%d unexpected error: %v\n", i, err) continue } if result := txscript.IsPushOnlyScript(script); !result { t.Errorf("IsPushOnlyScript: test #%d failed: %x\n", i, script) continue } pops, err := txscript.TstParseScript(script) if err != nil { t.Errorf("TstParseScript: #%d failed: %v", i, err) continue } for _, pop := range pops { if result := txscript.TstHasCanonicalPushes(pop); !result { t.Errorf("TstHasCanonicalPushes: test #%d "+ "failed: %x\n", i, script) break } } } for i := 0; i <= txscript.MaxScriptElementSize; i++ { builder := txscript.NewScriptBuilder() builder.AddData(bytes.Repeat([]byte{0x49}, i)) script, err := builder.Script() if err != nil { t.Errorf("StandardPushesTests test #%d unexpected error: %v\n", i, err) continue } if result := txscript.IsPushOnlyScript(script); !result { t.Errorf("StandardPushesTests IsPushOnlyScript test #%d failed: %x\n", i, script) continue } pops, err := txscript.TstParseScript(script) if err != nil { t.Errorf("StandardPushesTests #%d failed to TstParseScript: %v", i, err) continue } for _, pop := range pops { if result := txscript.TstHasCanonicalPushes(pop); !result { t.Errorf("StandardPushesTests TstHasCanonicalPushes test #%d failed: %x\n", i, script) break } } } }
// TestHasCanonicalPushes ensures the canonicalPush function properly determines // what is considered a canonical push for the purposes of removeOpcodeByData. func TestHasCanonicalPushes(t *testing.T) { t.Parallel() tests := []struct { name string script string expected bool }{ { name: "does not parse", script: "0x046708afdb0fe5548271967f1a67130b7105cd6a82" + "8e03909a67962e0ea1f61d", expected: false, }, { name: "non-canonical push", script: "PUSHDATA1 0x04 0x01020304", expected: false, }, } for i, test := range tests { script := mustParseShortForm(test.script) pops, err := txscript.TstParseScript(script) if err != nil { if test.expected { t.Errorf("TstParseScript #%d failed: %v", i, err) } continue } for _, pop := range pops { if txscript.TstHasCanonicalPushes(pop) != test.expected { t.Errorf("TstHasCanonicalPushes: #%d (%s) "+ "wrong result\ngot: %v\nwant: %v", i, test.name, true, test.expected) break } } } }