qfall_math/integer_mod_q/z_q/
cmp.rs

1// Copyright © 2025 Marvin Beckmann
2//
3// This file is part of qFALL-math.
4//
5// qFALL-math is free software: you can redistribute it and/or modify it under
6// the terms of the Mozilla Public License Version 2.0 as published by the
7// Mozilla Foundation. See <https://mozilla.org/en-US/MPL/2.0/>.
8
9//! This module contains implementations for comparison of [`Zq`].
10
11use super::Zq;
12use crate::{
13    error::MathError, integer::Z, macros::compare_base::compare_base_get_mod,
14    macros::compare_base::compare_base_impl, traits::CompareBase,
15};
16
17compare_base_get_mod!(Zq for Zq);
18impl<Integer: Into<Z>> CompareBase<Integer> for Zq {}
19
20/// Test that the [`CompareBase`] trait uses an actual implementation.
21#[cfg(test)]
22mod test_compare_base {
23    use crate::{integer::Z, integer_mod_q::Zq, traits::CompareBase};
24
25    /// Ensures that the [`CompareBase`] is available for all types it would be checked against
26    /// where no comparison is needed
27    #[test]
28    fn availability_without_comparisons() {
29        let one_1 = Zq::from(17);
30
31        assert!(one_1.compare_base(&Z::ONE));
32        assert!(one_1.compare_base(&0_i8));
33        assert!(one_1.compare_base(&0_i16));
34        assert!(one_1.compare_base(&0_i32));
35        assert!(one_1.compare_base(&0_i64));
36        assert!(one_1.compare_base(&0_u8));
37        assert!(one_1.compare_base(&0_u16));
38        assert!(one_1.compare_base(&0_u32));
39        assert!(one_1.compare_base(&0_u64));
40
41        assert!(one_1.call_compare_base_error(&Z::ONE).is_none());
42        assert!(one_1.call_compare_base_error(&0_i8).is_none());
43        assert!(one_1.call_compare_base_error(&0_i16).is_none());
44        assert!(one_1.call_compare_base_error(&0_i32).is_none());
45        assert!(one_1.call_compare_base_error(&0_i64).is_none());
46        assert!(one_1.call_compare_base_error(&0_u8).is_none());
47        assert!(one_1.call_compare_base_error(&0_u16).is_none());
48        assert!(one_1.call_compare_base_error(&0_u32).is_none());
49        assert!(one_1.call_compare_base_error(&0_u64).is_none());
50    }
51
52    /// Ensures that the [`CompareBase`] is available for all types it would be checked against
53    /// where comparison is needed
54    #[test]
55    fn availability_with_comparisons() {
56        let one_1 = Zq::from(17);
57
58        assert!(one_1.compare_base(&one_1));
59        assert!(one_1.compare_base(&Zq::from((3, 17))));
60        assert!(!one_1.compare_base(&Zq::from((3, 18))));
61
62        assert!(one_1.call_compare_base_error(&Zq::from((3, 18))).is_some());
63    }
64}