Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/rust/derive_more/tests/   (Browser von der Mozilla Stiftung Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 2 kB image not shown  

Quelle  try_unwrap.rs   Sprache: unbekannt

 
Spracherkennung für: .rs vermutete Sprache: Unknown {[0] [0] [0]} [Methode: Schwerpunktbildung, einfache Gewichte, sechs Dimensionen]

#![cfg_attr(not(feature = "std"), no_std)]
#![allow(dead_code)]

#[cfg(not(feature = "std"))]
extern crate alloc;

#[cfg(not(feature = "std"))]
use alloc::string::ToString;

use derive_more::TryUnwrap;

#[derive(TryUnwrap)]
enum Either<TLeft, TRight> {
    Left(TLeft),
    Right(TRight),
}

#[derive(TryUnwrap)]
#[derive(Debug, PartialEq)]
#[try_unwrap(ref, ref_mut)]
enum Maybe<T> {
    Nothing,
    Just(T),
}

#[derive(TryUnwrap)]
enum Color {
    RGB(u8, u8, u8),
    CMYK(u8, u8, u8, u8),
}

/// With lifetime
#[derive(TryUnwrap)]
enum Nonsense<'a, T> {
    Ref(&'a T),
    NoRef,
    #[try_unwrap(ignore)]
    NoRefIgnored,
}

#[derive(TryUnwrap)]
enum WithConstraints<T>
where
    T: Copy,
{
    One(T),
    Two,
}

#[derive(TryUnwrap)]
enum KitchenSink<'a, 'b, T1: Copy, T2: Clone>
where
    T2: Into<T1> + 'b,
{
    Left(&'a T1),
    Right(&'b T2),
    OwnBoth(T1, T2),
    Empty,
    NeverMind(),
    NothingToSeeHere(),
}

/// Single variant enum
#[derive(TryUnwrap)]
enum Single {
    Value(i32),
}

#[derive(TryUnwrap)]
#[derive(Debug, PartialEq)]
#[try_unwrap(ref, ref_mut)]
enum Tuple<T> {
    None,
    Single(T),
    Double(T, T),
    Triple(T, T, T),
}

#[test]
pub fn test_try_unwrap() {
    assert_eq!(Maybe::<()>::Nothing.try_unwrap_nothing().ok(), Some(()));
    assert_eq!((&Maybe::Just(1)).try_unwrap_just_ref().ok(), Some(&1));
    assert_eq!(
        (&mut Maybe::Just(42)).try_unwrap_just_mut().ok(),
        Some(&mut 42)
    );

    assert_eq!(
        Maybe::<()>::Nothing.try_unwrap_just().map_err(|e| e.input),
        Err(Maybe::<()>::Nothing),
    );
    assert_eq!(
        (&Maybe::Just(1))
            .try_unwrap_nothing_ref()
            .map_err(|e| e.input),
        Err(&Maybe::Just(1)),
    );
    assert_eq!(
        (&mut Maybe::Just(42))
            .try_unwrap_nothing_mut()
            .map_err(|e| e.to_string()),
        Err(
            "Attempt to call `Maybe::try_unwrap_nothing_mut()` on a `Maybe::Just` value"
                .to_string()
        ),
    );
}

#[test]
pub fn test_try_unwrap_mut_1() {
    let mut value = Tuple::Double(1, 12);

    if let Ok((a, b)) = value.try_unwrap_double_mut() {
        *a = 9;
        *b = 10;
    }

    assert_eq!(value, Tuple::Double(9, 10));
}

#[test]
pub fn test_try_unwrap_mut_2() {
    let mut value = Tuple::Single(128);

    if let Ok(x) = value.try_unwrap_single_mut() {
        *x *= 2;
    }

    if let Err(e) = value.try_unwrap_none_mut() {
        let x = *e.input.try_unwrap_single_ref().unwrap_or(&0);
        *e.input = Tuple::Double(x - 1, x);
    }

    assert_eq!(value, Tuple::Double(255, 256));
}

[ Dauer der Verarbeitung: 0.27 Sekunden  ]