Code clean up

This commit is contained in:
RunasSudo 2021-06-05 15:08:07 +10:00
parent 830362416d
commit 673149e184
No known key found for this signature in database
GPG Key ID: 7234E476BF21C61A
3 changed files with 39 additions and 39 deletions

View File

@ -60,11 +60,11 @@ impl Num for NativeFloat64 {
} }
impl Assign for NativeFloat64 { impl Assign for NativeFloat64 {
fn assign(&mut self, src: Self) { self.0 = src.0 } fn assign(&mut self, src: Self) { self.0 = src.0; }
} }
impl Assign<&NativeFloat64> for NativeFloat64 { impl Assign<&NativeFloat64> for NativeFloat64 {
fn assign(&mut self, src: &NativeFloat64) { self.0 = src.0 } fn assign(&mut self, src: &NativeFloat64) { self.0 = src.0; }
} }
impl From<usize> for NativeFloat64 { impl From<usize> for NativeFloat64 {
@ -159,21 +159,19 @@ impl ops::Rem<&NativeFloat64> for NativeFloat64 {
} }
impl ops::AddAssign for NativeFloat64 { impl ops::AddAssign for NativeFloat64 {
fn add_assign(&mut self, rhs: Self) { self.0 += rhs.0 } fn add_assign(&mut self, rhs: Self) { self.0 += rhs.0; }
} }
impl ops::SubAssign for NativeFloat64 { impl ops::SubAssign for NativeFloat64 {
fn sub_assign(&mut self, rhs: Self) { self.0 -= rhs.0 } fn sub_assign(&mut self, rhs: Self) { self.0 -= rhs.0; }
} }
impl ops::MulAssign for NativeFloat64 { impl ops::MulAssign for NativeFloat64 {
fn mul_assign(&mut self, rhs: Self) { self.0 *= rhs.0 } fn mul_assign(&mut self, rhs: Self) { self.0 *= rhs.0; }
} }
impl ops::DivAssign for NativeFloat64 { impl ops::DivAssign for NativeFloat64 {
fn div_assign(&mut self, rhs: Self) { fn div_assign(&mut self, rhs: Self) { self.0 /= &rhs.0; }
self.0 /= &rhs.0;
}
} }
impl ops::RemAssign for NativeFloat64 { impl ops::RemAssign for NativeFloat64 {
@ -183,15 +181,15 @@ impl ops::RemAssign for NativeFloat64 {
} }
impl ops::AddAssign<&NativeFloat64> for NativeFloat64 { impl ops::AddAssign<&NativeFloat64> for NativeFloat64 {
fn add_assign(&mut self, rhs: &NativeFloat64) { self.0 += &rhs.0 } fn add_assign(&mut self, rhs: &NativeFloat64) { self.0 += &rhs.0; }
} }
impl ops::SubAssign<&NativeFloat64> for NativeFloat64 { impl ops::SubAssign<&NativeFloat64> for NativeFloat64 {
fn sub_assign(&mut self, rhs: &NativeFloat64) { self.0 -= &rhs.0 } fn sub_assign(&mut self, rhs: &NativeFloat64) { self.0 -= &rhs.0; }
} }
impl ops::MulAssign<&NativeFloat64> for NativeFloat64 { impl ops::MulAssign<&NativeFloat64> for NativeFloat64 {
fn mul_assign(&mut self, rhs: &NativeFloat64) { self.0 *= &rhs.0 } fn mul_assign(&mut self, rhs: &NativeFloat64) { self.0 *= &rhs.0; }
} }
impl ops::DivAssign<&NativeFloat64> for NativeFloat64 { impl ops::DivAssign<&NativeFloat64> for NativeFloat64 {

View File

@ -17,19 +17,20 @@
use super::{Assign, From, Number}; use super::{Assign, From, Number};
use num_bigint::{BigInt, ParseBigIntError};
use num_rational::BigRational; // TODO: Can we do Ratio<IBig> and combine with ibig?
use num_traits::{Num, One, Signed, Zero}; use num_traits::{Num, One, Signed, Zero};
use std::cmp::{Ord, Ordering, PartialEq, PartialOrd}; use std::cmp::{Ord, Ordering, PartialEq, PartialOrd};
use std::fmt; use std::fmt;
use std::ops; use std::ops;
type RatioBase = num_bigint::BigInt;
type RatioType = num_rational::BigRational;
#[derive(Clone, PartialEq, PartialOrd)] #[derive(Clone, PartialEq, PartialOrd)]
pub struct Rational(BigRational); pub struct Rational(RatioType);
impl Number for Rational { impl Number for Rational {
fn new() -> Self { Self(BigRational::zero()) } fn new() -> Self { Self(RatioType::zero()) }
fn describe() -> String { "--numbers rational".to_string() } fn describe() -> String { "--numbers rational".to_string() }
@ -41,7 +42,7 @@ impl Number for Rational {
if dps == 0 { if dps == 0 {
self.0 = self.0.floor(); self.0 = self.0.floor();
} else { } else {
let factor = BigRational::from_integer(BigInt::from(10)).pow(dps as i32); let factor = RatioType::from_integer(RatioBase::from(10)).pow(dps as i32);
self.0 *= &factor; self.0 *= &factor;
self.0 = self.0.floor(); self.0 = self.0.floor();
self.0 /= factor; self.0 /= factor;
@ -52,7 +53,7 @@ impl Number for Rational {
if dps == 0 { if dps == 0 {
self.0 = self.0.ceil(); self.0 = self.0.ceil();
} else { } else {
let factor = BigRational::from_integer(BigInt::from(10)).pow(dps as i32); let factor = RatioType::from_integer(RatioBase::from(10)).pow(dps as i32);
self.0 *= &factor; self.0 *= &factor;
self.0 = self.0.ceil(); self.0 = self.0.ceil();
self.0 /= factor; self.0 /= factor;
@ -61,10 +62,10 @@ impl Number for Rational {
} }
impl Num for Rational { impl Num for Rational {
type FromStrRadixErr = ParseBigIntError; type FromStrRadixErr = <RatioBase as Num>::FromStrRadixErr;
fn from_str_radix(str: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr> { fn from_str_radix(str: &str, radix: u32) -> Result<Self, Self::FromStrRadixErr> {
match BigInt::from_str_radix(str, radix) { match RatioBase::from_str_radix(str, radix) {
Ok(value) => Ok(Self(BigRational::from_integer(value))), Ok(value) => Ok(Self(RatioType::from_integer(value))),
Err(err) => Err(err) Err(err) => Err(err)
} }
} }
@ -79,13 +80,14 @@ impl Assign<&Rational> for Rational {
} }
impl From<usize> for Rational { impl From<usize> for Rational {
fn from(n: usize) -> Self { Self(BigRational::from_integer(BigInt::from(n))) } fn from(n: usize) -> Self { Self(RatioType::from_integer(RatioBase::from(n))) }
} }
impl From<f64> for Rational { impl From<f64> for Rational {
fn from(n: f64) -> Self { fn from(n: f64) -> Self {
// FIXME: This is very broken! // FIXME: This is very broken!
return Self(BigRational::from_float(n).unwrap() * BigRational::from_integer(BigInt::from(100000)).round() / BigRational::from_integer(BigInt::from(100000))); //return Self(RatioType::from_float(n).unwrap() * RatioType::from_integer(100000).round() / RatioType::from_integer(100000));
todo!();
} }
} }
@ -96,10 +98,10 @@ impl fmt::Display for Rational {
let result = self.0.round().to_integer().to_string(); let result = self.0.round().to_integer().to_string();
return f.write_str(&result); return f.write_str(&result);
} else { } else {
let base = BigInt::from(10).pow(precision as u32); let base = RatioBase::from(10).pow(precision as u32);
let mut result = (&self.0 * base).abs().round().to_integer().to_string(); let mut result = (&self.0 * base).abs().round().to_integer().to_string();
let should_add_minus = (self.0 < BigRational::zero()) && result != "0"; let should_add_minus = (self.0 < RatioType::zero()) && result != "0";
// Add leading 0s // Add leading 0s
result = format!("{0:0>1$}", result, precision + 1); result = format!("{0:0>1$}", result, precision + 1);
@ -121,7 +123,7 @@ impl fmt::Display for Rational {
} }
impl One for Rational { impl One for Rational {
fn one() -> Self { Self(BigRational::one()) } fn one() -> Self { Self(RatioType::one()) }
} }
impl Zero for Rational { impl Zero for Rational {
@ -204,19 +206,19 @@ impl ops::Rem<&Rational> for Rational {
} }
impl ops::AddAssign for Rational { impl ops::AddAssign for Rational {
fn add_assign(&mut self, rhs: Self) { self.0 += rhs.0 } fn add_assign(&mut self, rhs: Self) { self.0 += rhs.0; }
} }
impl ops::SubAssign for Rational { impl ops::SubAssign for Rational {
fn sub_assign(&mut self, rhs: Self) { self.0 -= rhs.0 } fn sub_assign(&mut self, rhs: Self) { self.0 -= rhs.0; }
} }
impl ops::MulAssign for Rational { impl ops::MulAssign for Rational {
fn mul_assign(&mut self, rhs: Self) { self.0 *= rhs.0 } fn mul_assign(&mut self, rhs: Self) { self.0 *= rhs.0; }
} }
impl ops::DivAssign for Rational { impl ops::DivAssign for Rational {
fn div_assign(&mut self, rhs: Self) { self.0 /= &rhs.0 } fn div_assign(&mut self, rhs: Self) { self.0 /= &rhs.0; }
} }
impl ops::RemAssign for Rational { impl ops::RemAssign for Rational {
@ -226,15 +228,15 @@ impl ops::RemAssign for Rational {
} }
impl ops::AddAssign<&Rational> for Rational { impl ops::AddAssign<&Rational> for Rational {
fn add_assign(&mut self, rhs: &Rational) { self.0 += &rhs.0 } fn add_assign(&mut self, rhs: &Rational) { self.0 += &rhs.0; }
} }
impl ops::SubAssign<&Rational> for Rational { impl ops::SubAssign<&Rational> for Rational {
fn sub_assign(&mut self, rhs: &Rational) { self.0 -= &rhs.0 } fn sub_assign(&mut self, rhs: &Rational) { self.0 -= &rhs.0; }
} }
impl ops::MulAssign<&Rational> for Rational { impl ops::MulAssign<&Rational> for Rational {
fn mul_assign(&mut self, rhs: &Rational) { self.0 *= &rhs.0 } fn mul_assign(&mut self, rhs: &Rational) { self.0 *= &rhs.0; }
} }
impl ops::DivAssign<&Rational> for Rational { impl ops::DivAssign<&Rational> for Rational {

View File

@ -204,19 +204,19 @@ impl ops::Rem<&Self> for Rational {
} }
impl ops::AddAssign for Rational { impl ops::AddAssign for Rational {
fn add_assign(&mut self, rhs: Self) { self.0 += rhs.0 } fn add_assign(&mut self, rhs: Self) { self.0 += rhs.0; }
} }
impl ops::SubAssign for Rational { impl ops::SubAssign for Rational {
fn sub_assign(&mut self, rhs: Self) { self.0 -= rhs.0 } fn sub_assign(&mut self, rhs: Self) { self.0 -= rhs.0; }
} }
impl ops::MulAssign for Rational { impl ops::MulAssign for Rational {
fn mul_assign(&mut self, rhs: Self) { self.0 *= rhs.0 } fn mul_assign(&mut self, rhs: Self) { self.0 *= rhs.0; }
} }
impl ops::DivAssign for Rational { impl ops::DivAssign for Rational {
fn div_assign(&mut self, rhs: Self) { self.0 /= rhs.0 } fn div_assign(&mut self, rhs: Self) { self.0 /= rhs.0; }
} }
impl ops::RemAssign for Rational { impl ops::RemAssign for Rational {
@ -226,15 +226,15 @@ impl ops::RemAssign for Rational {
} }
impl ops::AddAssign<&Self> for Rational { impl ops::AddAssign<&Self> for Rational {
fn add_assign(&mut self, rhs: &Self) { self.0 += &rhs.0 } fn add_assign(&mut self, rhs: &Self) { self.0 += &rhs.0; }
} }
impl ops::SubAssign<&Self> for Rational { impl ops::SubAssign<&Self> for Rational {
fn sub_assign(&mut self, rhs: &Self) { self.0 -= &rhs.0 } fn sub_assign(&mut self, rhs: &Self) { self.0 -= &rhs.0; }
} }
impl ops::MulAssign<&Self> for Rational { impl ops::MulAssign<&Self> for Rational {
fn mul_assign(&mut self, rhs: &Self) { self.0 *= &rhs.0 } fn mul_assign(&mut self, rhs: &Self) { self.0 *= &rhs.0; }
} }
impl ops::DivAssign<&Self> for Rational { impl ops::DivAssign<&Self> for Rational {