use clock_curve_math::*;
#[test]
fn test_field_element_consistency() {
let fe1 = FieldElement::from_u64(42);
let fe2 = FieldElement::from_u64(58);
let sum = fe1.add(&fe2);
assert!(sum.is_valid());
let sum2 = fe2.add(&fe1);
assert_eq!(sum, sum2);
let product = fe1.mul(&fe2);
assert!(product.is_valid());
}
#[test]
fn test_scalar_bigint_integration() {
let scalar1 = Scalar::from_u64(12345);
let scalar2 = Scalar::from_u64(67890);
let sum = scalar1.add(&scalar2);
let expected_sum = Scalar::from_u64(12345 + 67890);
assert_eq!(sum, expected_sum);
let product = scalar1.mul(&scalar2);
assert!(product.is_valid());
}
#[test]
fn test_basic_field_operations() {
let fe1 = FieldElement::from_u64(1000);
let fe2 = FieldElement::from_u64(2000);
let sum = fe1.add(&fe2);
assert!(sum.is_valid());
let sum2 = fe2.add(&fe1);
assert_eq!(sum, sum2);
let product = fe1.mul(&fe2);
assert!(product.is_valid());
}
#[test]
fn test_field_scalar_arithmetic_properties() {
let x = Scalar::from_u64(5);
let y = Scalar::from_u64(7);
let z = Scalar::from_u64(11);
let s_left = x.add(&y).add(&z);
let s_right = x.add(&y.add(&z));
assert_eq!(s_left, s_right);
assert!(s_left.is_valid());
assert!(s_right.is_valid());
}
#[test]
fn test_error_handling_integration() {
let mut large_bytes = [0xFFu8; 32];
large_bytes[31] = 0xFF; assert!(FieldElement::from_bytes(&large_bytes).is_err());
assert!(Scalar::from_bytes(&large_bytes).is_err());
let valid_bytes = [0u8; 32];
assert!(FieldElement::from_bytes(&valid_bytes).is_ok());
assert!(Scalar::from_bytes(&valid_bytes).is_ok());
}
#[test]
fn test_mixed_operations() {
let fe = FieldElement::from_u64(42);
let scalar = Scalar::from_u64(42);
let fe_result = fe.add(&FieldElement::from_u64(8));
let scalar_result = scalar.add(&Scalar::from_u64(8));
assert!(fe_result.is_valid());
assert!(scalar_result.is_valid());
}
#[cfg(feature = "bigint-backend")]
#[test]
fn test_bigint_backend_integration() {
use clock_curve_math::bigint::BigInt;
use clock_curve_math::{ONE, ZERO};
let a = BigInt::from_u64(12345);
let b = BigInt::from_u64(67890);
let sum = a.add(&b);
let expected_sum = BigInt::from_u64(12345 + 67890);
assert_eq!(sum, expected_sum);
let product = a.mul(&b);
assert!(!product.is_zero());
assert!(ZERO().is_zero());
assert!(!ONE().is_zero());
assert!(!a.is_zero());
assert_eq!(ONE(), BigInt::from_u64(1));
}
#[cfg(feature = "custom-limbs")]
#[test]
fn test_custom_limbs_backend_integration() {
use clock_curve_math::bigint::{BigInt, BigIntOps};
use clock_curve_math::{ONE, ZERO};
let a = BigInt::from_u64(12345);
let b = BigInt::from_u64(67890);
let sum = a.add(&b);
let expected_sum = BigInt::from_u64(12345 + 67890);
assert_eq!(sum, expected_sum);
let product = a.mul(&b);
assert!(!product.is_zero());
assert!(ZERO().is_zero());
assert!(!ONE().is_zero());
assert!(!a.is_zero());
assert_eq!(ONE(), BigInt::from_u64(1));
}
#[test]
fn test_backend_consistency_basic_ops() {
let fe1 = FieldElement::from_u64(42);
let fe2 = FieldElement::from_u64(58);
let sum1 = fe1.add(&fe2);
let sum2 = fe2.add(&fe1);
assert_eq!(sum1, sum2);
assert!(sum1.is_valid());
let s1 = Scalar::from_u64(123);
let s2 = Scalar::from_u64(456);
let s_sum1 = s1.add(&s2);
let s_sum2 = s2.add(&s1);
assert_eq!(s_sum1, s_sum2);
assert!(s_sum1.is_valid());
}
#[test]
fn test_field_scalar_backend_integration() {
let field_vals = [1u64, 42, 12345, 999999];
let scalar_vals = [2u64, 58, 67890, 111111];
for &f_val in &field_vals {
for &s_val in &scalar_vals {
let fe = FieldElement::from_u64(f_val);
let scalar = Scalar::from_u64(s_val);
let fe_sum = fe.add(&FieldElement::from_u64(s_val));
let scalar_sum = scalar.add(&Scalar::from_u64(f_val));
assert!(fe_sum.is_valid());
assert!(scalar_sum.is_valid());
let fe_prod = fe.mul(&FieldElement::from_u64(s_val));
let scalar_prod = scalar.mul(&Scalar::from_u64(f_val));
assert!(fe_prod.is_valid());
assert!(scalar_prod.is_valid());
}
}
}