| 435 | } |
| 436 | |
| 437 | func TestMultiReturnWithArray(t *testing.T) { |
| 438 | const definition = `[{"name" : "multi", "outputs": [{"type": "uint64[3]"}, {"type": "uint64"}]}]` |
| 439 | abi, err := JSON(strings.NewReader(definition)) |
| 440 | if err != nil { |
| 441 | t.Fatal(err) |
| 442 | } |
| 443 | buff := new(bytes.Buffer) |
| 444 | buff.Write(common.Hex2Bytes("000000000000000000000000000000000000000000000000000000000000000900000000000000000000000000000000000000000000000000000000000000090000000000000000000000000000000000000000000000000000000000000009")) |
| 445 | buff.Write(common.Hex2Bytes("0000000000000000000000000000000000000000000000000000000000000008")) |
| 446 | |
| 447 | ret1, ret1Exp := new([3]uint64), [3]uint64{9, 9, 9} |
| 448 | ret2, ret2Exp := new(uint64), uint64(8) |
| 449 | if err := abi.Unpack(&[]interface{}{ret1, ret2}, "multi", buff.Bytes()); err != nil { |
| 450 | t.Fatal(err) |
| 451 | } |
| 452 | if !reflect.DeepEqual(*ret1, ret1Exp) { |
| 453 | t.Error("array result", *ret1, "!= Expected", ret1Exp) |
| 454 | } |
| 455 | if *ret2 != ret2Exp { |
| 456 | t.Error("int result", *ret2, "!= Expected", ret2Exp) |
| 457 | } |
| 458 | } |
| 459 | |
| 460 | func TestMultiReturnWithDeeplyNestedArray(t *testing.T) { |
| 461 | // Similar to TestMultiReturnWithArray, but with a special case in mind: |