mirror of
https://git.proxmox.com/git/rustc
synced 2026-03-27 14:11:13 +00:00
108 lines
2.8 KiB
Rust
108 lines
2.8 KiB
Rust
#[macro_use]
|
|
extern crate pretty_assertions;
|
|
#[macro_use]
|
|
extern crate derive_builder;
|
|
|
|
#[derive(Debug, PartialEq, Default, Builder, Clone)]
|
|
#[builder(pattern = "immutable")]
|
|
struct Lorem {
|
|
immutable: u32,
|
|
#[builder(pattern = "mutable")]
|
|
mutable_override: u32,
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Default, Builder, Clone)]
|
|
#[builder(pattern = "mutable")]
|
|
struct Ipsum {
|
|
mutable: u32,
|
|
#[builder(pattern = "owned")]
|
|
owned_override: u32,
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Default, Builder, Clone)]
|
|
#[builder(pattern = "owned")]
|
|
struct Dolor {
|
|
#[builder(pattern = "immutable")]
|
|
immutable_override: u32,
|
|
owned: u32,
|
|
}
|
|
|
|
#[derive(Debug, PartialEq, Default, Builder, Clone)]
|
|
struct Sit {
|
|
default: u32,
|
|
}
|
|
|
|
type ImmutableSetter<T, U> = fn(&T, U) -> T;
|
|
type OwnedSetter<T, U> = fn(T, U) -> T;
|
|
type MutableSetter<T, U> = fn(&mut T, U) -> &mut T;
|
|
|
|
#[test]
|
|
fn mutable_by_default() {
|
|
// the setter must have the correct signature
|
|
let mutable_setter: MutableSetter<SitBuilder, u32> = SitBuilder::default;
|
|
|
|
let mut old = <SitBuilder as Default>::default();
|
|
mutable_setter(&mut old, 42);
|
|
assert_eq!(old.default, Some(42));
|
|
}
|
|
|
|
#[test]
|
|
fn mutable() {
|
|
// the setter must have the correct signature
|
|
let mutable_setter: MutableSetter<IpsumBuilder, u32> = IpsumBuilder::mutable;
|
|
|
|
let mut old = IpsumBuilder::default();
|
|
mutable_setter(&mut old, 42);
|
|
assert_eq!(old.mutable, Some(42));
|
|
}
|
|
|
|
#[test]
|
|
fn mutable_override() {
|
|
// the setter must have the correct signature
|
|
let mutable_setter: MutableSetter<LoremBuilder, u32> = LoremBuilder::mutable_override;
|
|
|
|
let mut old = LoremBuilder::default();
|
|
mutable_setter(&mut old, 42);
|
|
assert_eq!(old.mutable_override, Some(42));
|
|
}
|
|
|
|
#[test]
|
|
fn immutable() {
|
|
// the setter must have the correct signature
|
|
let immutable_setter: ImmutableSetter<LoremBuilder, u32> = LoremBuilder::immutable;
|
|
|
|
let old = LoremBuilder::default();
|
|
let new = immutable_setter(&old, 42);
|
|
assert_eq!(new.immutable, Some(42));
|
|
}
|
|
|
|
#[test]
|
|
fn immutable_override() {
|
|
// the setter must have the correct signature
|
|
let immutable_setter: ImmutableSetter<DolorBuilder, u32> = DolorBuilder::immutable_override;
|
|
|
|
let old = DolorBuilder::default();
|
|
let new = immutable_setter(&old, 42);
|
|
assert_eq!(new.immutable_override, Some(42));
|
|
}
|
|
|
|
#[test]
|
|
fn owned() {
|
|
// the setter must have the correct signature
|
|
let owned_setter: OwnedSetter<DolorBuilder, u32> = DolorBuilder::owned;
|
|
|
|
let old = DolorBuilder::default();
|
|
let new = owned_setter(old, 42);
|
|
assert_eq!(new.owned, Some(42));
|
|
}
|
|
|
|
#[test]
|
|
fn owned_override() {
|
|
// the setter must have the correct signature
|
|
let owned_setter: OwnedSetter<IpsumBuilder, u32> = IpsumBuilder::owned_override;
|
|
|
|
let old = IpsumBuilder::default();
|
|
let new = owned_setter(old, 42);
|
|
assert_eq!(new.owned_override, Some(42));
|
|
}
|