library: core: color: add Mul-like ops by self
This commit is contained in:
parent
2dd5c675af
commit
48b3f03d40
|
@ -1,4 +1,5 @@
|
||||||
use derive_more::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign};
|
use derive_more::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign};
|
||||||
|
use std::ops::{Div, DivAssign, Mul, MulAssign};
|
||||||
|
|
||||||
#[derive(
|
#[derive(
|
||||||
Debug, Clone, PartialEq, Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign,
|
Debug, Clone, PartialEq, Add, AddAssign, Div, DivAssign, Mul, MulAssign, Sub, SubAssign,
|
||||||
|
@ -30,6 +31,42 @@ impl Default for LinearColor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl Mul for LinearColor {
|
||||||
|
type Output = LinearColor;
|
||||||
|
|
||||||
|
fn mul(self, other: Self) -> Self::Output {
|
||||||
|
LinearColor {
|
||||||
|
r: self.r * other.r,
|
||||||
|
g: self.g * other.g,
|
||||||
|
b: self.b * other.b,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MulAssign for LinearColor {
|
||||||
|
fn mul_assign(&mut self, other: Self) {
|
||||||
|
*self = self.clone() * other
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Div for LinearColor {
|
||||||
|
type Output = LinearColor;
|
||||||
|
|
||||||
|
fn div(self, other: Self) -> Self::Output {
|
||||||
|
LinearColor {
|
||||||
|
r: self.r / other.r,
|
||||||
|
g: self.g / other.g,
|
||||||
|
b: self.b / other.b,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl DivAssign for LinearColor {
|
||||||
|
fn div_assign(&mut self, other: Self) {
|
||||||
|
*self = self.clone() / other
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod test {
|
mod test {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -145,6 +182,34 @@ mod test {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn mul_by_color_works() {
|
||||||
|
let lhs = LinearColor::new(0.125, 0.25, 0.0625);
|
||||||
|
let rhs = LinearColor::new(1.0, 0.5, 2.0);
|
||||||
|
assert_eq!(lhs * rhs, LinearColor::new(0.125, 0.125, 0.125))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn div_by_color_works() {
|
||||||
|
let lhs = LinearColor::new(1.0, 0.5, 0.25);
|
||||||
|
let rhs = LinearColor::new(4.0, 2.0, 1.0);
|
||||||
|
assert_eq!(lhs / rhs, LinearColor::new(0.25, 0.25, 0.25))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn mulassign_by_color_works() {
|
||||||
|
let mut lhs = LinearColor::new(0.125, 0.25, 0.0625);
|
||||||
|
lhs *= LinearColor::new(1.0, 0.5, 2.0);
|
||||||
|
assert_eq!(lhs, LinearColor::new(0.125, 0.125, 0.125))
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn divassign_by_color_works() {
|
||||||
|
let mut lhs = LinearColor::new(1.0, 0.5, 0.25);
|
||||||
|
lhs /= LinearColor::new(4.0, 2.0, 1.0);
|
||||||
|
assert_eq!(lhs, LinearColor::new(0.25, 0.25, 0.25))
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn add_works() {
|
fn add_works() {
|
||||||
let lhs = LinearColor::new(1., 0., 0.125);
|
let lhs = LinearColor::new(1., 0., 0.125);
|
||||||
|
|
Loading…
Reference in a new issue