]>
git.proxmox.com Git - rustc.git/blob - vendor/generic-array/tests/mod.rs
1 #![recursion_limit = "128"]
4 extern crate generic_array
;
6 use core
::ops
::{Add, Drop}
;
7 use generic_array
::GenericArray
;
8 use generic_array
::functional
::*;
9 use generic_array
::sequence
::*;
10 use generic_array
::typenum
::{U1, U3, U4, U97}
;
14 let mut list97
= [0; 97];
18 let l
: GenericArray
<i32, U97
> = GenericArray
::clone_from_slice(&list97
);
21 assert_eq
!(l
[32], 32);
22 assert_eq
!(l
[56], 56);
28 struct TestDrop
<'a
>(&'a Cell
<u32>);
30 impl<'a
> Drop
for TestDrop
<'a
> {
32 self.0.set(self.0.get() + 1);
36 let drop_counter
= Cell
::new(0);
38 let _
: GenericArray
<TestDrop
, U3
> = arr
![TestDrop
; TestDrop(&drop_counter
),
39 TestDrop(&drop_counter
),
40 TestDrop(&drop_counter
)];
42 assert_eq
!(drop_counter
.get(), 3);
47 let test
: GenericArray
<u32, U3
> = arr
![u32; 1, 2, 3];
48 assert_eq
!(test
[1], 2);
53 let test
= arr
![u32; 1, 2, 3];
55 // if GenericArray is not copy, this should fail as a use of a moved value
56 assert_eq
!(test
[1], 2);
57 assert_eq
!(test2
[0], 1);
60 #[derive(Debug, PartialEq, Eq)]
64 fn test_from_slice() {
65 let arr
= [1, 2, 3, 4];
66 let gen_arr
= GenericArray
::<_
, U3
>::from_slice(&arr
[..3]);
67 assert_eq
!(&arr
[..3], gen_arr
.as_slice());
68 let arr
= [NoClone(1u32), NoClone(2), NoClone(3), NoClone(4)];
69 let gen_arr
= GenericArray
::<_
, U3
>::from_slice(&arr
[..3]);
70 assert_eq
!(&arr
[..3], gen_arr
.as_slice());
74 fn test_from_mut_slice() {
75 let mut arr
= [1, 2, 3, 4];
77 let gen_arr
= GenericArray
::<_
, U3
>::from_mut_slice(&mut arr
[..3]);
80 assert_eq
!(arr
, [1, 2, 10, 4]);
81 let mut arr
= [NoClone(1u32), NoClone(2), NoClone(3), NoClone(4)];
83 let gen_arr
= GenericArray
::<_
, U3
>::from_mut_slice(&mut arr
[..3]);
84 gen_arr
[2] = NoClone(10);
86 assert_eq
!(arr
, [NoClone(1), NoClone(2), NoClone(10), NoClone(4)]);
91 let arr
= GenericArray
::<u8, U1
>::default();
92 assert_eq
!(arr
[0], 0);
97 let data
= [(1, 2, 3), (4, 5, 6), (7, 8, 9)];
98 let garray
: GenericArray
<(usize, usize, usize), U3
> = data
.into();
99 assert_eq
!(&data
, garray
.as_slice());
103 fn test_unit_macro() {
104 let arr
= arr
![f32; 3.14];
105 assert_eq
!(arr
[0], 3.14);
109 fn test_empty_macro() {
110 let _arr
= arr
![f32;];
115 arr
![u8; 0x00].cmp(&arr
![u8; 0x00]);
118 /// This test should cause a helpful compile error if uncommented.
120 // fn test_empty_macro2(){
123 #[cfg(feature = "serde")]
125 extern crate serde_json
;
127 use generic_array
::GenericArray
;
128 use generic_array
::typenum
::U6
;
131 fn test_serde_implementation() {
132 let array
: GenericArray
<f64, U6
> = arr
![f64; 0.0, 5.0, 3.0, 7.07192, 76.0, -9.0];
133 let string
= serde_json
::to_string(&array
).unwrap();
134 assert_eq
!(string
, "[0.0,5.0,3.0,7.07192,76.0,-9.0]");
136 let test_array
: GenericArray
<f64, U6
> = serde_json
::from_str(&string
).unwrap();
137 assert_eq
!(test_array
, array
);
143 let b
: GenericArray
<i32, U4
> = GenericArray
::generate(|i
| i
as i32 * 4).map(|x
| x
- 3);
145 assert_eq
!(b
, arr
![i32; -3, 1, 5, 9]);
150 let a
: GenericArray
<_
, U4
> = GenericArray
::generate(|i
| i
+ 1);
151 let b
: GenericArray
<_
, U4
> = GenericArray
::generate(|i
| i
as i32 * 4);
153 // Uses reference and non-reference arguments
154 let c
= (&a
).zip(b
, |r
, l
| *r
as i32 + l
);
156 assert_eq
!(c
, arr
![i32; 1, 6, 11, 16]);
161 fn test_from_iter_short() {
162 use core
::iter
::repeat
;
164 let a
: GenericArray
<_
, U4
> = repeat(11).take(3).collect();
166 assert_eq
!(a
, arr
![i32; 11, 11, 11, 0]);
170 fn test_from_iter() {
171 use core
::iter
::{once, repeat}
;
173 let a
: GenericArray
<_
, U4
> = repeat(11).take(3).chain(once(0)).collect();
175 assert_eq
!(a
, arr
![i32; 11, 11, 11, 0]);
181 use core
::mem
::{size_of, size_of_val}
;
183 #[derive(Debug, Copy, Clone)]
194 assert_eq
!(size_of
::<Test
>(), 14);
196 assert_eq
!(size_of_val(&arr
![u8; 1, 2, 3]), size_of
::<u8>() * 3);
197 assert_eq
!(size_of_val(&arr
![u32; 1]), size_of
::<u32>() * 1);
198 assert_eq
!(size_of_val(&arr
![u64; 1, 2, 3, 4]), size_of
::<u64>() * 4);
200 assert_eq
!(size_of
::<GenericArray
<Test
, U97
>>(), size_of
::<Test
>() * 97);
205 let a
= arr
![i32; 1, 2, 3];
209 assert_eq
!(b
, arr
![i32; 1, 2, 3, 4]);
214 let a
= arr
![i32; 1, 2, 3];
216 let b
= a
.prepend(4);
218 assert_eq
!(b
, arr
![i32; 4, 1, 2, 3]);
223 let a
= arr
![i32; 1, 2, 3, 4];
225 let (init
, last
) = a
.pop_back();
227 assert_eq
!(init
, arr
![i32; 1, 2, 3]);
230 let (head
, tail
) = a
.pop_front();
233 assert_eq
!(tail
, arr
![i32; 2, 3, 4]);
238 let a
= arr
![i32; 1, 2, 3, 4];
240 let (b
, c
) = a
.split();
242 assert_eq
!(b
, arr
![i32; 1]);
243 assert_eq
!(c
, arr
![i32; 2, 3, 4]);
245 let (e
, f
) = a
.split();
247 assert_eq
!(e
, arr
![i32; 1, 2]);
248 assert_eq
!(f
, arr
![i32; 3, 4]);
253 let a
= arr
![i32; 1, 2];
254 let b
= arr
![i32; 3, 4];
258 assert_eq
!(c
, arr
![i32; 1, 2, 3, 4]);
260 let (d
, e
) = c
.split();
262 assert_eq
!(d
, arr
![i32; 1]);
263 assert_eq
!(e
, arr
![i32; 2, 3, 4]);
268 let a
= arr
![i32; 1, 2, 3, 4];
270 assert_eq
!(10, a
.fold(0, |a
, x
| a
+ x
));
273 fn sum_generic
<S
>(s
: S
) -> i32
275 S
: FunctionalSequence
<i32>,
276 S
::Item
: Add
<i32, Output
= i32>, // `+`
277 i32: Add
<S
::Item
, Output
= i32>, // reflexive
279 s
.fold(0, |a
, x
| a
+ x
)
284 let a
= sum_generic(arr
![i32; 1, 2, 3, 4]);