@@ -927,3 +927,74 @@ func TestOpMCopy(t *testing.T) {
927
927
}
928
928
}
929
929
}
930
+
931
+ func TestPush (t * testing.T ) {
932
+
933
+ code := common .FromHex ("0011223344556677889900aabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a19181716151413121" )
934
+
935
+ push32 := makePush (32 , 32 )
936
+
937
+ scope := & ScopeContext {
938
+ Memory : nil ,
939
+ Stack : newstack (),
940
+ Contract : & Contract {
941
+ Code : code ,
942
+ },
943
+ }
944
+ for i , want := range []string {
945
+ "0x11223344556677889900aabbccddeeff0102030405060708090a0b0c0d0e0ff1" ,
946
+ "0x223344556677889900aabbccddeeff0102030405060708090a0b0c0d0e0ff1e1" ,
947
+ "0x3344556677889900aabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1" ,
948
+ "0x44556677889900aabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1" ,
949
+ "0x556677889900aabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1" ,
950
+ "0x6677889900aabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a1" ,
951
+ "0x77889900aabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a191" ,
952
+ "0x889900aabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a19181" ,
953
+ "0x9900aabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a1918171" ,
954
+ "0xaabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a191817161" ,
955
+ "0xaabbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a19181716151" ,
956
+ "0xbbccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a1918171615141" ,
957
+ "0xccddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a191817161514131" ,
958
+ "0xddeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a19181716151413121" ,
959
+ "0xeeff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a1918171615141312100" ,
960
+ "0xff0102030405060708090a0b0c0d0e0ff1e1d1c1b1a191817161514131210000" ,
961
+ "0x102030405060708090a0b0c0d0e0ff1e1d1c1b1a19181716151413121000000" ,
962
+ "0x2030405060708090a0b0c0d0e0ff1e1d1c1b1a1918171615141312100000000" ,
963
+ "0x30405060708090a0b0c0d0e0ff1e1d1c1b1a191817161514131210000000000" ,
964
+ "0x405060708090a0b0c0d0e0ff1e1d1c1b1a19181716151413121000000000000" ,
965
+ "0x5060708090a0b0c0d0e0ff1e1d1c1b1a1918171615141312100000000000000" ,
966
+ "0x60708090a0b0c0d0e0ff1e1d1c1b1a191817161514131210000000000000000" ,
967
+ "0x708090a0b0c0d0e0ff1e1d1c1b1a19181716151413121000000000000000000" ,
968
+ "0x8090a0b0c0d0e0ff1e1d1c1b1a1918171615141312100000000000000000000" ,
969
+ "0x90a0b0c0d0e0ff1e1d1c1b1a191817161514131210000000000000000000000" ,
970
+ "0xa0b0c0d0e0ff1e1d1c1b1a19181716151413121000000000000000000000000" ,
971
+ "0xb0c0d0e0ff1e1d1c1b1a1918171615141312100000000000000000000000000" ,
972
+ "0xc0d0e0ff1e1d1c1b1a191817161514131210000000000000000000000000000" ,
973
+ "0xd0e0ff1e1d1c1b1a19181716151413121000000000000000000000000000000" ,
974
+ "0xe0ff1e1d1c1b1a1918171615141312100000000000000000000000000000000" ,
975
+ "0xff1e1d1c1b1a191817161514131210000000000000000000000000000000000" ,
976
+ "0xf1e1d1c1b1a19181716151413121000000000000000000000000000000000000" ,
977
+ "0xe1d1c1b1a1918171615141312100000000000000000000000000000000000000" ,
978
+ "0xd1c1b1a191817161514131210000000000000000000000000000000000000000" ,
979
+ "0xc1b1a19181716151413121000000000000000000000000000000000000000000" ,
980
+ "0xb1a1918171615141312100000000000000000000000000000000000000000000" ,
981
+ "0xa191817161514131210000000000000000000000000000000000000000000000" ,
982
+ "0x9181716151413121000000000000000000000000000000000000000000000000" ,
983
+ "0x8171615141312100000000000000000000000000000000000000000000000000" ,
984
+ "0x7161514131210000000000000000000000000000000000000000000000000000" ,
985
+ "0x6151413121000000000000000000000000000000000000000000000000000000" ,
986
+ "0x5141312100000000000000000000000000000000000000000000000000000000" ,
987
+ "0x4131210000000000000000000000000000000000000000000000000000000000" ,
988
+ "0x3121000000000000000000000000000000000000000000000000000000000000" ,
989
+ "0x2100000000000000000000000000000000000000000000000000000000000000" ,
990
+ "0x0" ,
991
+ } {
992
+ pc := new (uint64 )
993
+ * pc = uint64 (i )
994
+ push32 (pc , nil , scope )
995
+ res := scope .Stack .pop ()
996
+ if have := res .Hex (); have != want {
997
+ t .Fatalf ("case %d, have %v want %v" , i , have , want )
998
+ }
999
+ }
1000
+ }
0 commit comments