diff --git a/cairo_programs/blake2s_felts.cairo b/cairo_programs/blake2s_felts.cairo index fd913b2a..6212bb93 100644 --- a/cairo_programs/blake2s_felts.cairo +++ b/cairo_programs/blake2s_felts.cairo @@ -1,6 +1,6 @@ %builtins range_check bitwise -from starkware.cairo.common.bool import TRUE +from starkware.cairo.common.bool import TRUE, FALSE from starkware.cairo.common.alloc import alloc from starkware.cairo.common.cairo_blake2s.blake2s import blake2s_felts from starkware.cairo.common.cairo_builtins import BitwiseBuiltin @@ -26,10 +26,20 @@ func main{range_check_ptr, bitwise_ptr: BitwiseBuiltin*}() { assert inputs[15] = 74256930; let (local blake2s_ptr_start) = alloc(); let blake2s_ptr = blake2s_ptr_start; + + // Bigendian let (result) = blake2s_felts{range_check_ptr=range_check_ptr, blake2s_ptr=blake2s_ptr}( 16, inputs, TRUE ); assert result.low = 23022179997536219430502258022509199703; assert result.high = 136831746058902715979837770794974289597; + + // Little endian + let (result) = blake2s_felts{range_check_ptr=range_check_ptr, blake2s_ptr=blake2s_ptr}( + 16, inputs, FALSE + ); + assert result.low = 315510691254085211243916597439546947220; + assert result.high = 42237338665522721102428636006748876126; + return (); } diff --git a/cairo_programs/blake2s_integration_tests.cairo b/cairo_programs/blake2s_integration_tests.cairo new file mode 100644 index 00000000..a4636757 --- /dev/null +++ b/cairo_programs/blake2s_integration_tests.cairo @@ -0,0 +1,75 @@ +%builtins range_check bitwise + +from starkware.cairo.common.alloc import alloc +from starkware.cairo.common.cairo_blake2s.blake2s import blake2s, finalize_blake2s, blake2s_felts +from starkware.cairo.common.cairo_builtins import BitwiseBuiltin +from starkware.cairo.common.uint256 import Uint256 +from starkware.cairo.common.bool import TRUE + +func fill_array(array: felt*, base: felt, step: felt, array_length: felt, iterator: felt) { + if (iterator == array_length) { + return (); + } + assert array[iterator] = base + step * iterator; + return fill_array(array, base, step, array_length, iterator + 1); +} + +func test_integration{range_check_ptr, bitwise_ptr: BitwiseBuiltin*}(iter: felt, last: felt) { + alloc_locals; + if (iter == last) { + return (); + } + + let (data: felt*) = alloc(); + fill_array(data, iter, 2 * iter, 10, 0); + + let (local blake2s_ptr_start) = alloc(); + let blake2s_ptr = blake2s_ptr_start; + let (res_1: Uint256) = blake2s{range_check_ptr=range_check_ptr, blake2s_ptr=blake2s_ptr}( + data, 9 + ); + + finalize_blake2s(blake2s_ptr_start, blake2s_ptr); + + let (local blake2s_ptr_start) = alloc(); + let blake2s_ptr = blake2s_ptr_start; + + let (data_2: felt*) = alloc(); + assert data_2[0] = res_1.low; + assert data_2[1] = res_1.high; + + let (res_2) = blake2s_felts{range_check_ptr=range_check_ptr, blake2s_ptr=blake2s_ptr}( + 2, data_2, TRUE + ); + + finalize_blake2s(blake2s_ptr_start, blake2s_ptr); + + if (iter == last - 1 and last == 10) { + assert res_1.low = 327684140823325841083166505949840946643; + assert res_1.high = 28077572547397067729112288485703133566; + assert res_2.low = 323710308182296053867309835081443411626; + assert res_2.high = 159988406782415793602959692147600111481; + } + + if (iter == last - 1 and last == 100) { + assert res_1.low = 26473789897582596397897414631405692327; + assert res_1.high = 35314462001555260569814614879256292984; + assert res_2.low = 256911263205530722270005922452382996929; + assert res_2.high = 248798531786594770765531047659644061441; + } + + return test_integration(iter + 1, last); +} + +func run_tests{range_check_ptr, bitwise_ptr: BitwiseBuiltin*}(last: felt) { + alloc_locals; + test_integration(0, last); + + return (); +} + +func main{range_check_ptr, bitwise_ptr: BitwiseBuiltin*}() { + run_tests(10); + + return (); +} diff --git a/pkg/vm/cairo_run/cairo_run_test.go b/pkg/vm/cairo_run/cairo_run_test.go index 7927f305..dd870078 100644 --- a/pkg/vm/cairo_run/cairo_run_test.go +++ b/pkg/vm/cairo_run/cairo_run_test.go @@ -360,3 +360,7 @@ func TestBlake2sFelts(t *testing.T) { func TestFinalizeBlake2s(t *testing.T) { testProgram("finalize_blake2s", t) } + +func TestBlake2sIntegrationTests(t *testing.T) { + testProgram("blake2s_integration_tests", t) +}