Files
Notes/notes-service/vendor/derive_more/tests/eq.rs
T
2026-08-01 16:11:49 +03:00

772 lines
20 KiB
Rust

#![cfg_attr(not(feature = "std"), no_std)]
#![allow(dead_code)] // some code is tested for type checking only
#[cfg(not(feature = "std"))]
extern crate alloc;
mod structs {
mod structural {
#[cfg(not(feature = "std"))]
use ::alloc::{boxed::Box, vec::Vec};
use derive_more::{Eq, __private::AssertParamIsEq};
#[test]
fn unit() {
#[derive(Eq, PartialEq)]
struct Baz;
let _: AssertParamIsEq<Baz>;
}
#[test]
fn empty_tuple() {
#[derive(Eq, PartialEq)]
struct Foo();
let _: AssertParamIsEq<Foo>;
}
#[test]
fn empty_struct() {
#[derive(Eq, PartialEq)]
struct Bar {}
let _: AssertParamIsEq<Bar>;
}
#[test]
fn multi_field_tuple() {
#[derive(Eq, PartialEq)]
struct Foo(bool, i32);
let _: AssertParamIsEq<Foo>;
}
#[test]
fn multi_field_struct() {
#[derive(Eq, PartialEq)]
struct Bar {
b: bool,
i: i32,
}
let _: AssertParamIsEq<Bar>;
}
#[test]
fn recursive_tuple() {
#[derive(Eq, PartialEq)]
struct Foo(Box<Self>, Vec<Foo>);
let _: AssertParamIsEq<Foo>;
}
#[test]
fn recursive_struct() {
#[derive(Eq, PartialEq)]
struct Bar {
b: Box<Self>,
i: Vec<Bar>,
}
let _: AssertParamIsEq<Bar>;
}
mod skip {
use derive_more::{Eq, PartialEq, __private::AssertParamIsEq};
struct NoEq;
#[test]
fn fields() {
#[derive(Eq, PartialEq)]
struct Foo(#[eq(skip)] NoEq, bool, #[eq(skip)] i32);
#[derive(Eq, PartialEq)]
struct Bar {
#[partial_eq(skip)]
a: NoEq,
i: i32,
#[partial_eq(skip)]
b: bool,
}
let _: AssertParamIsEq<Foo>;
let _: AssertParamIsEq<Bar>;
}
#[test]
fn all_fields() {
#[derive(Eq, PartialEq)]
struct Foo(#[eq(skip)] NoEq, #[eq(skip)] i32);
#[derive(Eq, PartialEq)]
struct Bar {
#[partial_eq(skip)]
a: NoEq,
#[partial_eq(skip)]
b: bool,
}
let _: AssertParamIsEq<Foo>;
let _: AssertParamIsEq<Bar>;
}
#[test]
fn empty_struct() {
#[derive(Eq, PartialEq)]
#[eq(skip)]
struct Foo;
#[derive(Eq, PartialEq)]
#[partial_eq(skip)]
struct Bar {}
let _: AssertParamIsEq<Foo>;
let _: AssertParamIsEq<Bar>;
}
#[test]
fn multifield_struct() {
#[derive(Eq, PartialEq)]
#[eq(skip)]
struct Foo(NoEq, bool);
#[derive(Eq, PartialEq)]
#[partial_eq(skip)]
struct Bar {
a: NoEq,
b: bool,
}
let _: AssertParamIsEq<Foo>;
let _: AssertParamIsEq<Bar>;
}
#[test]
fn mixed() {
#[derive(Eq, PartialEq)]
#[eq(skip)]
struct Foo(NoEq, #[eq(skip)] bool);
#[derive(Eq, PartialEq)]
#[partial_eq(skip)]
struct Bar {
a: NoEq,
#[partial_eq(skip)]
b: bool,
}
let _: AssertParamIsEq<Foo>;
let _: AssertParamIsEq<Bar>;
}
}
mod generic {
#[cfg(not(feature = "std"))]
use ::alloc::{boxed::Box, vec::Vec};
use derive_more::{Eq, PartialEq, __private::AssertParamIsEq};
trait Some {
type Assoc;
}
impl<T> Some for T {
type Assoc = bool;
}
#[test]
fn multi_field_tuple() {
#[derive(Eq, PartialEq)]
struct Foo<A: Some, B>(A::Assoc, B);
let _: AssertParamIsEq<Foo<f32, ()>>;
}
#[test]
fn multi_field_struct() {
#[derive(Eq, PartialEq)]
struct Bar<A, B: Some> {
b: B::Assoc,
i: A,
}
let _: AssertParamIsEq<Bar<u8, f32>>;
}
#[test]
fn lifetime() {
#[derive(Eq, PartialEq)]
struct Foo<'a>(&'a str, i32);
#[derive(Eq, PartialEq)]
struct Bar<'a> {
b: Foo<'a>,
i: i32,
}
let _: AssertParamIsEq<Foo>;
let _: AssertParamIsEq<Bar>;
}
#[test]
fn const_param() {
#[derive(Eq, PartialEq)]
struct Baz<const N: usize>;
#[derive(Eq, PartialEq)]
struct Foo<const N: usize>([i32; N], i8);
#[derive(Eq, PartialEq)]
struct Bar<const N: usize> {
b: Foo<N>,
i: Baz<N>,
}
let _: AssertParamIsEq<Baz<1>>;
let _: AssertParamIsEq<Foo<2>>;
let _: AssertParamIsEq<Bar<3>>;
}
#[test]
fn mixed() {
#[derive(Eq, PartialEq)]
struct Foo<'a, T, const N: usize>([&'a T; N]);
let _: AssertParamIsEq<Foo<i32, 1>>;
}
#[test]
fn recursive() {
#[derive(Eq, PartialEq)]
struct Foo<A: Some, B>(A::Assoc, B, Vec<Foo<A, B>>, Box<Self>);
let _: AssertParamIsEq<Foo<f32, ()>>;
}
mod skip {
use derive_more::{Eq, PartialEq, __private::AssertParamIsEq};
struct NoEq;
#[test]
fn fields() {
#[derive(Eq, PartialEq)]
struct Foo<A, B, C>(#[eq(skip)] A, B, #[eq(skip)] C);
#[derive(Eq, PartialEq)]
struct Bar<A, B, C> {
#[partial_eq(skip)]
a: A,
i: B,
#[partial_eq(skip)]
b: C,
}
let _: AssertParamIsEq<Foo<NoEq, bool, i32>>;
let _: AssertParamIsEq<Bar<NoEq, i32, bool>>;
}
#[test]
fn all_fields() {
#[derive(Eq, PartialEq)]
struct Foo<A, B>(#[eq(skip)] A, #[eq(skip)] B);
#[derive(Eq, PartialEq)]
struct Bar<A, B> {
#[partial_eq(skip)]
a: A,
#[partial_eq(skip)]
b: B,
}
let _: AssertParamIsEq<Foo<NoEq, i32>>;
let _: AssertParamIsEq<Bar<NoEq, bool>>;
}
#[test]
fn multifield_struct() {
#[derive(Eq, PartialEq)]
#[eq(skip)]
struct Foo<A, B>(A, B);
#[derive(Eq, PartialEq)]
#[partial_eq(skip)]
struct Bar<A, B> {
a: A,
b: B,
}
let _: AssertParamIsEq<Foo<NoEq, NoEq>>;
let _: AssertParamIsEq<Bar<NoEq, NoEq>>;
}
#[test]
fn mixed() {
#[derive(Eq, PartialEq)]
#[eq(skip)]
struct Foo<A, B>(A, #[eq(skip)] B);
#[derive(Eq, PartialEq)]
#[partial_eq(skip)]
struct Bar<A, B> {
a: A,
#[partial_eq(skip)]
b: B,
}
let _: AssertParamIsEq<Foo<NoEq, NoEq>>;
let _: AssertParamIsEq<Bar<NoEq, NoEq>>;
}
}
}
}
}
mod enums {
mod structural {
#[cfg(not(feature = "std"))]
use ::alloc::{boxed::Box, vec::Vec};
use derive_more::{Eq, __private::AssertParamIsEq};
#[test]
fn empty() {
#[derive(Eq, PartialEq)]
enum E {}
let _: AssertParamIsEq<E>;
}
#[test]
fn single_variant_unit() {
#[derive(Eq, PartialEq)]
enum E {
Baz,
}
let _: AssertParamIsEq<E>;
}
#[test]
fn single_variant_empty_tuple() {
#[derive(Eq, PartialEq)]
enum E {
Foo(),
}
let _: AssertParamIsEq<E>;
}
#[test]
fn single_variant_empty_struct() {
#[derive(Eq, PartialEq)]
enum E {
Bar {},
}
let _: AssertParamIsEq<E>;
}
#[test]
fn single_variant_multi_field_tuple() {
#[derive(Eq, PartialEq)]
enum E {
Foo(bool, i32),
}
let _: AssertParamIsEq<E>;
}
#[test]
fn single_variant_multi_field_struct() {
#[derive(Eq, PartialEq)]
enum E {
Bar { b: bool, i: i32 },
}
let _: AssertParamIsEq<E>;
}
#[test]
fn multi_variant_empty_field() {
#[derive(Eq, PartialEq)]
enum E {
Foo(),
Bar {},
Baz,
}
let _: AssertParamIsEq<E>;
}
#[test]
fn multi_variant_multi_field() {
#[derive(Eq, PartialEq)]
enum E {
Foo(bool, i32),
Bar { b: bool, i: i32 },
}
let _: AssertParamIsEq<E>;
}
#[test]
fn multi_variant_empty_and_multi_field() {
#[derive(Eq, PartialEq)]
enum E {
Foo(bool, i32),
Baz,
}
let _: AssertParamIsEq<E>;
}
#[test]
fn recursive() {
#[derive(Eq, PartialEq)]
enum E {
Foo(Box<E>),
Bar { b: Vec<Self> },
Baz,
}
let _: AssertParamIsEq<E>;
}
mod skip {
use derive_more::{Eq, PartialEq, __private::AssertParamIsEq};
struct NoEq;
#[test]
fn fields() {
#[derive(Eq, PartialEq)]
enum E {
Foo(#[eq(skip)] NoEq, bool, #[eq(skip)] i32),
Bar {
#[partial_eq(skip)]
a: NoEq,
i: i32,
#[partial_eq(skip)]
b: bool,
},
}
let _: AssertParamIsEq<E>;
}
#[test]
fn all_fields() {
#[derive(Eq, PartialEq)]
enum E {
Foo(#[partial_eq(skip)] NoEq, #[partial_eq(skip)] i32),
Bar {
#[partial_eq(skip)]
a: NoEq,
#[partial_eq(skip)]
b: bool,
},
}
let _: AssertParamIsEq<E>;
}
#[test]
fn variants() {
#[derive(Eq, PartialEq)]
enum E {
Foo(bool, i32),
#[eq(skip)]
Bar {
a: NoEq,
b: bool,
},
}
let _: AssertParamIsEq<E>;
}
#[test]
fn all_variants() {
#[derive(Eq, PartialEq)]
enum E {
#[eq(skip)]
Foo(bool, i32),
#[partial_eq(skip)]
Bar { a: NoEq, b: bool },
#[eq(skip)]
Baz,
}
let _: AssertParamIsEq<E>;
}
#[test]
fn single_variant() {
#[derive(Eq, PartialEq)]
enum E {
#[eq(skip)]
Bar { a: NoEq, b: bool },
}
let _: AssertParamIsEq<E>;
}
#[test]
fn all_but_single_empty_variant() {
#[derive(Eq, PartialEq)]
enum E {
#[eq(skip)]
Foo(bool, i32),
#[partial_eq(skip)]
Bar {
a: NoEq,
b: bool,
},
Baz,
}
let _: AssertParamIsEq<E>;
}
#[test]
fn mixed() {
#[derive(Eq, PartialEq)]
enum E {
#[eq(skip)]
Foo(bool, i32),
Bar {
#[partial_eq(skip)]
a: NoEq,
b: bool,
},
Baz,
}
let _: AssertParamIsEq<E>;
}
}
mod generic {
#[cfg(not(feature = "std"))]
use ::alloc::{boxed::Box, vec::Vec};
use derive_more::{Eq, PartialEq, __private::AssertParamIsEq};
trait Some {
type Assoc;
}
impl<T> Some for T {
type Assoc = bool;
}
#[test]
fn single_variant_multi_field_tuple() {
#[derive(Eq, PartialEq)]
enum E<A: Some, B> {
Foo(A::Assoc, B),
}
let _: AssertParamIsEq<E<f32, ()>>;
}
#[test]
fn single_variant_multi_field_struct() {
#[derive(Eq, PartialEq)]
enum E<A, B: Some> {
Bar { b: B::Assoc, i: A },
}
let _: AssertParamIsEq<E<&'static str, f64>>;
}
#[test]
fn multi_variant_empty_and_multi_field() {
#[derive(Eq, PartialEq)]
enum E<A, B: Some> {
Foo(B::Assoc, A),
Bar { b: B::Assoc, i: A },
Baz,
}
let _: AssertParamIsEq<E<i64, f64>>;
}
#[test]
fn lifetime() {
#[derive(Eq, PartialEq)]
enum E1<'a> {
Foo(&'a str, i32),
}
#[derive(Eq, PartialEq)]
enum E2<'a> {
Bar { b: E1<'a>, i: i32 },
}
let _: AssertParamIsEq<E1>;
let _: AssertParamIsEq<E2>;
}
#[test]
fn const_param() {
#[derive(Eq, PartialEq)]
enum E3<const N: usize> {
Baz,
}
#[derive(Eq, PartialEq)]
enum E1<const N: usize> {
Foo([i32; N], i8),
}
#[derive(Eq, PartialEq)]
enum E2<const N: usize> {
Bar { b: E1<N>, i: E3<N> },
}
let _: AssertParamIsEq<E3<1>>;
let _: AssertParamIsEq<E1<2>>;
let _: AssertParamIsEq<E2<0>>;
}
#[test]
fn mixed() {
#[derive(Eq, PartialEq)]
enum E<'a, A, B: Some, const N: usize> {
Foo([&'a A; N]),
Baz([B::Assoc; N]),
}
let _: AssertParamIsEq<E<i32, f64, 1>>;
}
#[test]
fn recursive() {
#[derive(Eq, PartialEq)]
enum E<A, B: Some> {
Foo(B::Assoc, Vec<Self>),
Bar { b: Box<E<A, B>>, i: A },
Baz,
}
let _: AssertParamIsEq<E<i64, f64>>;
}
mod skip {
use derive_more::{Eq, PartialEq, __private::AssertParamIsEq};
struct NoEq;
#[test]
fn fields() {
#[derive(Eq, PartialEq)]
enum E<A, B, C> {
Foo(#[partial_eq(skip)] A, B, #[partial_eq(skip)] C),
Bar {
#[partial_eq(skip)]
a: A,
i: C,
#[partial_eq(skip)]
b: B,
},
}
let _: AssertParamIsEq<E<NoEq, bool, i32>>;
}
#[test]
fn all_fields() {
#[derive(Eq, PartialEq)]
enum E<A, B, C> {
Foo(#[partial_eq(skip)] A, #[partial_eq(skip)] B),
Bar {
#[partial_eq(skip)]
a: A,
#[partial_eq(skip)]
b: C,
},
}
let _: AssertParamIsEq<E<NoEq, bool, i32>>;
}
#[test]
fn variants() {
#[derive(Eq, PartialEq)]
enum E<A, B, C> {
Foo(A, B),
#[eq(skip)]
Bar {
a: C,
b: A,
},
}
let _: AssertParamIsEq<E<i32, bool, NoEq>>;
}
#[test]
fn all_variants() {
#[derive(Eq, PartialEq)]
enum E<A, B, C> {
#[eq(skip)]
Foo(A, B),
#[partial_eq(skip)]
Bar { a: C, b: A },
#[eq(skip)]
Baz,
}
let _: AssertParamIsEq<E<NoEq, NoEq, f32>>;
}
#[test]
fn single_variant() {
#[derive(Eq, PartialEq)]
enum E<A, B> {
#[eq(skip)]
Bar { a: A, b: B },
}
let _: AssertParamIsEq<E<NoEq, NoEq>>;
}
#[test]
fn all_but_single_empty_variant() {
#[derive(Eq, PartialEq)]
enum E<A, B, C> {
#[eq(skip)]
Foo(A, B),
#[partial_eq(skip)]
Bar {
a: C,
b: A,
},
Baz,
}
let _: AssertParamIsEq<E<NoEq, NoEq, f32>>;
}
#[test]
fn mixed() {
#[derive(Eq, PartialEq)]
enum E<A, B, C> {
#[eq(skip)]
Foo(A, B),
Bar {
#[partial_eq(skip)]
a: C,
b: A,
},
Baz,
}
let _: AssertParamIsEq<E<i32, NoEq, f32>>;
}
}
}
}
}