trs_dataframe/dataframe/column_store/
ops.rsuse std::ops::{AddAssign, DivAssign, MulAssign, SubAssign};
use super::ColumnFrame;
impl AddAssign for ColumnFrame {
fn add_assign(&mut self, rhs: Self) {
self.data_frame.zip_mut_with(&rhs.data_frame, |x, y| {
let z = x.clone();
*x = z + y.clone();
});
}
}
impl SubAssign for ColumnFrame {
fn sub_assign(&mut self, rhs: Self) {
self.data_frame.zip_mut_with(&rhs.data_frame, |x, y| {
let z = x.clone();
*x = z - y.clone();
});
}
}
impl MulAssign for ColumnFrame {
fn mul_assign(&mut self, rhs: Self) {
self.data_frame.zip_mut_with(&rhs.data_frame, |x, y| {
let z = x.clone();
*x = z * y.clone();
});
}
}
impl DivAssign for ColumnFrame {
fn div_assign(&mut self, rhs: Self) {
self.data_frame.zip_mut_with(&rhs.data_frame, |x, y| {
let z = x.clone();
*x = z / y.clone();
});
}
}
#[cfg(test)]
mod test {
use crate::column_frame;
use super::*;
use rstest::*;
#[rstest]
#[case(
column_frame!("a" => vec![1, 2, 3]),
column_frame!("a" => vec![1, 2, 3]),
column_frame!("a" => vec![2, 4, 6])
)]
fn test_add_assign(
#[case] mut a: ColumnFrame,
#[case] b: ColumnFrame,
#[case] expected: ColumnFrame,
) {
a += b;
assert_eq!(a, expected);
}
#[rstest]
#[case(
column_frame!("a" => vec![1, 2, 3]),
column_frame!("a" => vec![1, 2, 3]),
column_frame!("a" => vec![0f32, 0f32, 0f32])
)]
fn test_sub_assign(
#[case] mut a: ColumnFrame,
#[case] b: ColumnFrame,
#[case] expected: ColumnFrame,
) {
a -= b;
assert_eq!(a, expected);
}
#[rstest]
#[case(
column_frame!("a" => vec![1, 2, 3]),
column_frame!("a" => vec![1, 2, 3]),
column_frame!("a" => vec![1f32, 4f32, 9f32])
)]
fn test_mul_assign(
#[case] mut a: ColumnFrame,
#[case] b: ColumnFrame,
#[case] expected: ColumnFrame,
) {
a *= b;
assert_eq!(a, expected);
}
#[rstest]
#[case(
column_frame!("a" => vec![1, 2, 3]),
column_frame!("a" => vec![1, 2, 3]),
column_frame!("a" => vec![1f32, 1f32, 1f32])
)]
fn test_div_assign(
#[case] mut a: ColumnFrame,
#[case] b: ColumnFrame,
#[case] expected: ColumnFrame,
) {
a /= b;
assert_eq!(a, expected);
}
}