From 880069897192da171365d242ac982637746ebd33 Mon Sep 17 00:00:00 2001 From: fmoletta <99273364+fmoletta@users.noreply.github.com> Date: Tue, 12 Dec 2023 11:30:59 +0200 Subject: [PATCH] Add a cairo program that uses `u512_safe_div_mod_by_u256` libfunc + remove it from not yet implemented list (#364) * Add test program * Add test case * Remove libfunc from list --- README.md | 1 - tests/cases.rs | 1 + .../cases/uint/u512_safe_divmod_by_u256.cairo | 21 +++++++++++++++++++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 tests/cases/uint/u512_safe_divmod_by_u256.cairo diff --git a/README.md b/README.md index 5f66dc3ba..e040c1e17 100644 --- a/README.md +++ b/README.md @@ -222,7 +222,6 @@ This is a list of the current progress implementing each **libfunc**. 1. `set_transaction_hash` (StarkNet, testing) 1. `set_version` (StarkNet, testing) 1. `struct_snapshot_deconstruct` -1. `u512_safe_divmod_by_u256` 1. `i128_diff` 1. `i16_diff` 1. `i32_diff` diff --git a/tests/cases.rs b/tests/cases.rs index 024d77e82..74aa3dec5 100644 --- a/tests/cases.rs +++ b/tests/cases.rs @@ -41,6 +41,7 @@ mod common; #[test_case("tests/cases/uint/uint_try_from_felt.cairo")] #[test_case("tests/cases/uint/upcasts.cairo")] #[test_case("tests/cases/uint/wide_mul.cairo")] +#[test_case("tests/cases/uint/u512_safe_divmod_by_u256.cairo")] // structs #[test_case("tests/cases/structs/basic.cairo")] #[test_case("tests/cases/structs/bigger.cairo")] diff --git a/tests/cases/uint/u512_safe_divmod_by_u256.cairo b/tests/cases/uint/u512_safe_divmod_by_u256.cairo new file mode 100644 index 000000000..8ad4f5d4f --- /dev/null +++ b/tests/cases/uint/u512_safe_divmod_by_u256.cairo @@ -0,0 +1,21 @@ +use integer::{u512, u512_safe_div_rem_by_u256}; + +fn main() { + let zero = u512 { limb0: 0, limb1: 0, limb2: 0, limb3: 0 }; + let one = u512 { limb0: 1, limb1: 0, limb2: 0, limb3: 0 }; + + let (q, r) = u512_safe_div_rem_by_u256(zero, integer::u256_as_non_zero(1)); + assert(q == zero, '0 / 1 != 0'); + assert(r == 0, '0 % 1 != 0'); + + let (q, r) = u512_safe_div_rem_by_u256(one, integer::u256_as_non_zero(1)); + assert(q == one, '1 / 1 != 1'); + assert(r == 0, '1 % 1 != 0'); + + let two = u512 {limb0: 0, limb1: 0, limb2: 0, limb3: 2}; + let (q, r) = u512_safe_div_rem_by_u256(two, integer::u256_as_non_zero(1)); + assert(q == two, '2/1 != 2'); + assert(r == 0, '2/1 != 0'); + + return (); +}