use super::MultilinearExtension;
use crate::base::{database::Column, scalar::test_scalar::TestScalar};
use bumpalo::Bump;
#[test]
fn allocated_slices_must_have_different_ids_even_when_one_is_empty() {
let alloc = Bump::new();
let foo = alloc.alloc_slice_fill_default(5) as &[TestScalar];
let bar = alloc.alloc_slice_fill_default(0) as &[TestScalar];
assert_ne!(
MultilinearExtension::<TestScalar>::id(&foo),
MultilinearExtension::<TestScalar>::id(&bar)
);
}
#[test]
fn we_can_use_multilinear_extension_methods_for_i64_slice() {
let slice: &[i64] = &[2, 3, 4, 5, 6];
let evaluation_vec: Vec<TestScalar> =
vec![101.into(), 102.into(), 103.into(), 104.into(), 105.into()];
assert_eq!(
slice.inner_product(&evaluation_vec),
(2 * 101 + 3 * 102 + 4 * 103 + 5 * 104 + 6 * 105).into()
);
let mut res = evaluation_vec.clone();
slice.mul_add(&mut res, &10.into());
assert_eq!(
res,
vec![121.into(), 132.into(), 143.into(), 154.into(), 165.into()]
);
assert_eq!(
*MultilinearExtension::<TestScalar>::to_sumcheck_term(&slice, 3),
vec![
2.into(),
3.into(),
4.into(),
5.into(),
6.into(),
0.into(),
0.into(),
0.into()
]
);
assert_ne!(
MultilinearExtension::<TestScalar>::id(&slice),
MultilinearExtension::<TestScalar>::id(&&evaluation_vec)
);
}
#[test]
fn we_can_use_multilinear_extension_methods_for_column() {
let slice = Column::BigInt(&[2, 3, 4, 5, 6]);
let evaluation_vec: Vec<TestScalar> =
vec![101.into(), 102.into(), 103.into(), 104.into(), 105.into()];
assert_eq!(
slice.inner_product(&evaluation_vec),
(2 * 101 + 3 * 102 + 4 * 103 + 5 * 104 + 6 * 105).into()
);
let mut res = evaluation_vec.clone();
slice.mul_add(&mut res, &10.into());
assert_eq!(
res,
vec![121.into(), 132.into(), 143.into(), 154.into(), 165.into()]
);
assert_eq!(
*MultilinearExtension::<TestScalar>::to_sumcheck_term(&slice, 3),
vec![
2.into(),
3.into(),
4.into(),
5.into(),
6.into(),
0.into(),
0.into(),
0.into()
]
);
assert_ne!(
MultilinearExtension::<TestScalar>::id(&slice),
MultilinearExtension::<TestScalar>::id(&&evaluation_vec)
);
}
#[test]
fn we_can_use_multilinear_extension_methods_for_i64_vec() {
let slice: &Vec<i64> = &vec![2, 3, 4, 5, 6];
let evaluation_vec: Vec<TestScalar> =
vec![101.into(), 102.into(), 103.into(), 104.into(), 105.into()];
assert_eq!(
slice.inner_product(&evaluation_vec),
(2 * 101 + 3 * 102 + 4 * 103 + 5 * 104 + 6 * 105).into()
);
let mut res = evaluation_vec.clone();
slice.mul_add(&mut res, &10.into());
assert_eq!(
res,
vec![121.into(), 132.into(), 143.into(), 154.into(), 165.into()]
);
assert_eq!(
*MultilinearExtension::<TestScalar>::to_sumcheck_term(&slice, 3),
vec![
2.into(),
3.into(),
4.into(),
5.into(),
6.into(),
0.into(),
0.into(),
0.into()
]
);
assert_ne!(
MultilinearExtension::<TestScalar>::id(&slice),
MultilinearExtension::<TestScalar>::id(&&evaluation_vec)
);
}