tuplities_reverse/
lib.rs

1#![no_std]
2
3//! [tuplities](https://github.com/lucacappelletti94/tuplities) suite crate providing the `TupleReverse` trait.
4
5#[tuplities_derive::impl_reverse]
6/// A trait for reversing the elements of a tuple.
7///
8/// This trait provides a method to reverse the order of elements in a tuple.
9///
10/// # Examples
11///
12/// ```rust
13/// use tuplities_reverse::TupleReverse;
14///
15/// let tuple = (1, "hello", 3.14);
16/// let reversed = tuple.reverse();
17/// assert_eq!(reversed, (3.14, "hello", 1));
18/// ```
19///
20/// Part of the [`tuplities`](https://docs.rs/tuplities/latest/tuplities/) crate.
21pub trait TupleReverse {
22    /// The type of the tuple with elements in reverse order.
23    type Output;
24
25    /// Consumes the tuple and returns a new tuple with elements in reverse order.
26    fn reverse(self) -> Self::Output;
27}
28
29#[cfg(test)]
30mod tests {
31    use super::TupleReverse;
32
33    #[test]
34    fn test_reverse_empty_tuple() {
35        let tuple = ();
36        let _reversed: () = tuple.reverse();
37    }
38
39    #[test]
40    fn test_reverse_single_element() {
41        let tuple = (42,);
42        let reversed = tuple.reverse();
43        assert_eq!(reversed, (42,));
44    }
45
46    #[test]
47    fn test_reverse_two_elements() {
48        let tuple = (1, 2);
49        let reversed = tuple.reverse();
50        assert_eq!(reversed, (2, 1));
51    }
52
53    #[test]
54    fn test_reverse_three_elements() {
55        let tuple = (1, 2, 3);
56        let reversed = tuple.reverse();
57        assert_eq!(reversed, (3, 2, 1));
58    }
59}