Skip to content

Commit

Permalink
Replace old felt127 generation with constant (#317)
Browse files Browse the repository at this point in the history
* Replace old felt127 generation with constant

* Code refactor
  • Loading branch information
MaksymMalicki committed Mar 20, 2024
1 parent ce40eaf commit 9ddf3a6
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 25 deletions.
3 changes: 1 addition & 2 deletions pkg/hintrunner/zero/zerohint_uint256.go
Original file line number Diff line number Diff line change
Expand Up @@ -259,9 +259,8 @@ func newUint256SignedNNHint(a hinter.ResOperander) hinter.Hinter {
return err
}
var v memory.MemoryValue
felt127 := new(fp.Element).SetBigInt(new(big.Int).Lsh(big.NewInt(1), 127))

if utils.FeltLt(aHigh, felt127) {
if utils.FeltLt(aHigh, &utils.Felt127) {
v = memory.MemoryValueFromFieldElement(&utils.FeltOne)
} else {
v = memory.MemoryValueFromFieldElement(&utils.FeltZero)
Expand Down
42 changes: 19 additions & 23 deletions pkg/hintrunner/zero/zerohint_uint256_test.go
Original file line number Diff line number Diff line change
@@ -1,25 +1,21 @@
package zero

import (
"math/big"
"testing"

"github.com/NethermindEth/cairo-vm-go/pkg/hintrunner/hinter"
"github.com/NethermindEth/cairo-vm-go/pkg/utils"
"github.com/consensys/gnark-crypto/ecc/stark-curve/fp"
)

func TestZeroHintUint256(t *testing.T) {
// Values used in the test cases
// 1 << 127
felt127 := new(fp.Element).SetBigInt(new(big.Int).Lsh(big.NewInt(1), 127))

runHinterTests(t, map[string][]hintTestCase{
"Uint256Add": {
{
operanders: []*hintOperander{
{Name: "a.low", Kind: fpRelative, Value: felt127},
{Name: "a.low", Kind: fpRelative, Value: &utils.Felt127},
{Name: "a.high", Kind: fpRelative, Value: feltUint64(0)},
{Name: "b.low", Kind: apRelative, Value: felt127},
{Name: "b.low", Kind: apRelative, Value: &utils.Felt127},
{Name: "b.high", Kind: apRelative, Value: feltUint64(0)},
{Name: "carry_low", Kind: uninitialized},
{Name: "carry_high", Kind: uninitialized},
Expand All @@ -34,10 +30,10 @@ func TestZeroHintUint256(t *testing.T) {
},
{
operanders: []*hintOperander{
{Name: "a.low", Kind: fpRelative, Value: felt127},
{Name: "a.high", Kind: fpRelative, Value: felt127},
{Name: "b.low", Kind: apRelative, Value: felt127},
{Name: "b.high", Kind: apRelative, Value: felt127},
{Name: "a.low", Kind: fpRelative, Value: &utils.Felt127},
{Name: "a.high", Kind: fpRelative, Value: &utils.Felt127},
{Name: "b.low", Kind: apRelative, Value: &utils.Felt127},
{Name: "b.high", Kind: apRelative, Value: &utils.Felt127},
{Name: "carry_low", Kind: uninitialized},
{Name: "carry_high", Kind: uninitialized},
},
Expand All @@ -52,9 +48,9 @@ func TestZeroHintUint256(t *testing.T) {
{
operanders: []*hintOperander{
{Name: "a.low", Kind: fpRelative, Value: feltUint64(0)},
{Name: "a.high", Kind: fpRelative, Value: felt127},
{Name: "a.high", Kind: fpRelative, Value: &utils.Felt127},
{Name: "b.low", Kind: apRelative, Value: feltUint64(0)},
{Name: "b.high", Kind: apRelative, Value: felt127},
{Name: "b.high", Kind: apRelative, Value: &utils.Felt127},
{Name: "carry_low", Kind: uninitialized},
{Name: "carry_high", Kind: uninitialized},
},
Expand All @@ -68,10 +64,10 @@ func TestZeroHintUint256(t *testing.T) {
},
{
operanders: []*hintOperander{
{Name: "a.low", Kind: fpRelative, Value: felt127},
{Name: "a.low", Kind: fpRelative, Value: &utils.Felt127},
{Name: "a.high", Kind: fpRelative, Value: feltUint64(0)},
{Name: "b.low", Kind: apRelative, Value: feltUint64(0)},
{Name: "b.high", Kind: apRelative, Value: felt127},
{Name: "b.high", Kind: apRelative, Value: &utils.Felt127},
{Name: "carry_low", Kind: uninitialized},
{Name: "carry_high", Kind: uninitialized},
},
Expand Down Expand Up @@ -103,7 +99,7 @@ func TestZeroHintUint256(t *testing.T) {
// `low` is zero
{
operanders: []*hintOperander{
{Name: "a", Kind: fpRelative, Value: felt127},
{Name: "a", Kind: fpRelative, Value: &utils.Felt127},
{Name: "low", Kind: uninitialized},
{Name: "high", Kind: uninitialized},
},
Expand Down Expand Up @@ -179,8 +175,8 @@ func TestZeroHintUint256(t *testing.T) {
},
{
operanders: []*hintOperander{
{Name: "n.low", Kind: fpRelative, Value: felt127},
{Name: "n.high", Kind: fpRelative, Value: felt127},
{Name: "n.low", Kind: fpRelative, Value: &utils.Felt127},
{Name: "n.high", Kind: fpRelative, Value: &utils.Felt127},
{Name: "root.low", Kind: uninitialized},
{Name: "root.high", Kind: uninitialized},
},
Expand All @@ -197,7 +193,7 @@ func TestZeroHintUint256(t *testing.T) {
{
operanders: []*hintOperander{
{Name: "a.low", Kind: fpRelative, Value: feltUint64(0)},
{Name: "a.high", Kind: fpRelative, Value: felt127},
{Name: "a.high", Kind: fpRelative, Value: &utils.Felt127},
},
makeHinter: func(ctx *hintTestContext) hinter.Hinter {
return newUint256SignedNNHint(ctx.operanders["a.low"])
Expand Down Expand Up @@ -239,9 +235,9 @@ func TestZeroHintUint256(t *testing.T) {
},
{
operanders: []*hintOperander{
{Name: "a.low", Kind: fpRelative, Value: felt127},
{Name: "a.low", Kind: fpRelative, Value: &utils.Felt127},
{Name: "a.high", Kind: fpRelative, Value: feltUint64(0)},
{Name: "div.low", Kind: fpRelative, Value: felt127},
{Name: "div.low", Kind: fpRelative, Value: &utils.Felt127},
{Name: "div.high", Kind: fpRelative, Value: feltUint64(0)},
{Name: "quotient.low", Kind: uninitialized},
{Name: "quotient.high", Kind: uninitialized},
Expand All @@ -261,9 +257,9 @@ func TestZeroHintUint256(t *testing.T) {
{
operanders: []*hintOperander{
{Name: "a.low", Kind: fpRelative, Value: feltUint64(5)},
{Name: "a.high", Kind: fpRelative, Value: felt127},
{Name: "a.high", Kind: fpRelative, Value: &utils.Felt127},
{Name: "div.low", Kind: fpRelative, Value: feltUint64(0)},
{Name: "div.high", Kind: fpRelative, Value: felt127},
{Name: "div.high", Kind: fpRelative, Value: &utils.Felt127},
{Name: "quotient.low", Kind: uninitialized},
{Name: "quotient.high", Kind: uninitialized},
{Name: "remainder.low", Kind: uninitialized},
Expand Down
4 changes: 4 additions & 0 deletions pkg/utils/constant.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,10 @@ var FeltOne = fp.Element{
18446744073709551585, 18446744073709551615, 18446744073709551615, 576460752303422960,
}

// 1 << 127
// same as 2 ** 127
var Felt127 = fp.Element{18446744073704816641, 8703, 18446744073709551600, 576460752222928912}

// 1 << 128
// same as 2 ** 128
var FeltMax128 = fp.Element{18446744073700081665, 17407, 18446744073709551584, 576460752142434320}
Expand Down

0 comments on commit 9ddf3a6

Please sign in to comment.