Implement the 2-number math functions for MathNumber.
This commit is contained in:
		
							parent
							
								
									0a2e1b007c
								
							
						
					
					
						commit
						f783f45d24
					
				| @ -52,7 +52,21 @@ impl Sub<MathNumber> for MathNumber { | ||||
|     type Output = Option<OwnedLiteral>; | ||||
| 
 | ||||
|     fn sub(self, other: MathNumber) -> Self::Output { | ||||
|         todo!() | ||||
|         match (self, other) { | ||||
|             (MathNumber::Failure, _) | (_, MathNumber::Failure) => None, | ||||
|             (MathNumber::Integer(self_num), MathNumber::Integer(other_num)) => { | ||||
|                 math_ints(self_num, other_num, std::ops::Sub::sub) | ||||
|             } | ||||
|             (MathNumber::Decimal(self_num), MathNumber::Decimal(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat(self_num - other_num)) | ||||
|             } | ||||
|             (MathNumber::Integer(self_num), MathNumber::Decimal(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat((self_num as f64) - other_num)) | ||||
|             } | ||||
|             (MathNumber::Decimal(self_num), MathNumber::Integer(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat(self_num - (other_num as f64))) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -60,7 +74,21 @@ impl Mul<MathNumber> for MathNumber { | ||||
|     type Output = Option<OwnedLiteral>; | ||||
| 
 | ||||
|     fn mul(self, other: MathNumber) -> Self::Output { | ||||
|         todo!() | ||||
|         match (self, other) { | ||||
|             (MathNumber::Failure, _) | (_, MathNumber::Failure) => None, | ||||
|             (MathNumber::Integer(self_num), MathNumber::Integer(other_num)) => { | ||||
|                 math_ints(self_num, other_num, std::ops::Mul::mul) | ||||
|             } | ||||
|             (MathNumber::Decimal(self_num), MathNumber::Decimal(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat(self_num * other_num)) | ||||
|             } | ||||
|             (MathNumber::Integer(self_num), MathNumber::Decimal(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat((self_num as f64) * other_num)) | ||||
|             } | ||||
|             (MathNumber::Decimal(self_num), MathNumber::Integer(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat(self_num * (other_num as f64))) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -68,7 +96,21 @@ impl Div<MathNumber> for MathNumber { | ||||
|     type Output = Option<OwnedLiteral>; | ||||
| 
 | ||||
|     fn div(self, other: MathNumber) -> Self::Output { | ||||
|         todo!() | ||||
|         match (self, other) { | ||||
|             (MathNumber::Failure, _) | (_, MathNumber::Failure) => None, | ||||
|             (MathNumber::Integer(self_num), MathNumber::Integer(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat((self_num as f64) / (other_num as f64))) | ||||
|             } | ||||
|             (MathNumber::Decimal(self_num), MathNumber::Decimal(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat(self_num / other_num)) | ||||
|             } | ||||
|             (MathNumber::Integer(self_num), MathNumber::Decimal(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat((self_num as f64) / other_num)) | ||||
|             } | ||||
|             (MathNumber::Decimal(self_num), MathNumber::Integer(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat(self_num / (other_num as f64))) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| @ -76,7 +118,21 @@ impl Rem<MathNumber> for MathNumber { | ||||
|     type Output = Option<OwnedLiteral>; | ||||
| 
 | ||||
|     fn rem(self, other: MathNumber) -> Self::Output { | ||||
|         todo!() | ||||
|         match (self, other) { | ||||
|             (MathNumber::Failure, _) | (_, MathNumber::Failure) => None, | ||||
|             (MathNumber::Integer(self_num), MathNumber::Integer(other_num)) => { | ||||
|                 math_ints(self_num, other_num, std::ops::Rem::rem) | ||||
|             } | ||||
|             (MathNumber::Decimal(self_num), MathNumber::Decimal(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat(self_num % other_num)) | ||||
|             } | ||||
|             (MathNumber::Integer(self_num), MathNumber::Decimal(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat((self_num as f64) % other_num)) | ||||
|             } | ||||
|             (MathNumber::Decimal(self_num), MathNumber::Integer(other_num)) => { | ||||
|                 Some(OwnedLiteral::LFloat(self_num % (other_num as f64))) | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Tom Alexander
						Tom Alexander