Skip to content

Commit

Permalink
feat: default & neg traits (#39)
Browse files Browse the repository at this point in the history
* feat: Default

* feat: Neg for signed

* chore: cleanup

* chore: fmt
  • Loading branch information
milancermak authored Sep 2, 2024
1 parent 326b6ef commit 431eb6a
Show file tree
Hide file tree
Showing 4 changed files with 89 additions and 0 deletions.
9 changes: 9 additions & 0 deletions src/tests/test_wadray.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -401,3 +401,12 @@ fn test_display_and_debug() {
assert_eq!(format!("{}", r), "456", "Ray display");
assert_eq!(format!("{:?}", r), "456", "Ray debug");
}

#[test]
fn test_default() {
let w: Wad = Default::default();
assert_eq!(w.val, 0, "Wad default");

let r: Ray = Default::default();
assert_eq!(r.val, 0, "Ray default");
}
38 changes: 38 additions & 0 deletions src/tests/test_wadray_signed.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -501,4 +501,42 @@ mod test_wadray_signed {
let rr: SignedRay = StorePacking::unpack(StorePacking::pack(r));
assert_eq!(r, rr, "SignedRay packing 4");
}

#[test]
fn test_default() {
let w: SignedWad = Default::default();
assert_eq!(w.val, 0, "SignedWad default val");
assert!(w.sign == false, "SignedWad default sign");

let r: SignedRay = Default::default();
assert_eq!(r.val, 0, "SignedRay default val");
assert!(r.sign == false, "SignedRay default sign");
}

#[test]
fn test_neg() {
let wp = SignedWad { val: 123, sign: false };
let wpn = -wp;
assert_eq!(wpn.val, 123, "SignedWad neg val");
assert!(wpn.sign, "SignedWad neg sign");
assert_eq!(-wpn, wp, "SignedWad double neg");

let wp0 = SignedWad { val: 0, sign: false };
let wpn0 = -wp0;
assert_eq!(wpn0.val, 0, "SignedWad zero neg val");
assert!(wpn0.sign, "SignedWad zero neg sign");
assert_eq!(-wpn0, wp0, "SignedWad zero double neg");

let rp = SignedRay { val: 123, sign: false };
let rpn = -rp;
assert_eq!(rpn.val, 123, "SignedRay neg val");
assert!(rpn.sign, "SignedRay neg sign");
assert_eq!(-rpn, rp, "SignedRay double neg");

let rp0 = SignedRay { val: 0, sign: false };
let rpn0 = -rp0;
assert_eq!(rpn0.val, 0, "SignedRay zero neg val");
assert!(rpn0.sign, "SignedRay zero neg sign");
assert_eq!(-rpn0, rp0, "SignedRay zero double neg");
}
}
14 changes: 14 additions & 0 deletions src/wadray.cairo
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use core::fmt::{Debug, Display, Error, Formatter};
use core::num::traits::{One, Zero, Bounded};
use core::ops::{AddAssign, SubAssign, MulAssign, DivAssign};
use core::traits::Default;


pub const WAD_DECIMALS: u8 = 18;
Expand Down Expand Up @@ -482,3 +483,16 @@ pub impl DebugRay of Debug<Ray> {
Display::fmt(self, ref f)
}
}

// Default
pub impl DefaultWad of Default<Wad> {
fn default() -> Wad {
Wad { val: 0 }
}
}

pub impl DefaultRay of Default<Ray> {
fn default() -> Ray {
Ray { val: 0 }
}
}
28 changes: 28 additions & 0 deletions src/wadray_signed.cairo
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
use core::fmt::{Debug, Display, Error, Formatter};
use core::num::traits::{One, Zero, Bounded};
use core::ops::{AddAssign, SubAssign, MulAssign, DivAssign};
use core::traits::{Default, Neg};
use starknet::storage_access::StorePacking;
use wadray::wadray::{DIFF, Ray, RAY_ONE, u128_rdiv, u128_rmul, u128_wdiv, u128_wmul, Wad, WAD_ONE};

Expand Down Expand Up @@ -545,3 +546,30 @@ pub impl DebugSignedRay of Debug<SignedRay> {
Display::fmt(self, ref f)
}
}

// Default
pub impl DefaultSignedWad of Default<SignedWad> {
fn default() -> SignedWad {
SignedWad { val: 0, sign: false }
}
}

pub impl DefaultSignedRay of Default<SignedRay> {
fn default() -> SignedRay {
SignedRay { val: 0, sign: false }
}
}

// Neg
pub impl SignedWadNeg of Neg<SignedWad> {
fn neg(a: SignedWad) -> SignedWad {
SignedWad { val: a.val, sign: !a.sign }
}
}


pub impl SignedRayNeg of Neg<SignedRay> {
fn neg(a: SignedRay) -> SignedRay {
SignedRay { val: a.val, sign: !a.sign }
}
}

0 comments on commit 431eb6a

Please sign in to comment.