1#[macro_export]
79macro_rules! vector {
80 ($elem:expr; $n:expr) => (
81 $crate::types::vector::Vector::from([$elem; $n])
82 );
83 ($($x:expr),+ $(,)?) => (
84 $crate::types::vector::Vector::from([$($x),+])
85 );
86}
87
88#[macro_export]
172macro_rules! try_vector {
173 ($elem:expr) => {
174 $crate::types::vector::Vector::try_from($elem)
175 };
176}
177
178#[cfg(test)]
179mod tests {
180 use crate::Vector;
181 #[allow(unused_imports)]
182 use approx::{assert_relative_eq, assert_relative_ne};
183 #[allow(unused_imports)]
184 use num::complex::Complex;
185 #[allow(unused_imports)]
186 use pretty_assertions::{assert_eq, assert_ne};
187
188 #[test]
189 fn macro_vector_usize() {
190 let v1 = vector![1 as usize, 2 as usize, 3 as usize];
191 let v2: Vector<usize, 3> = vector![1, 2, 3];
192 let v3: Vector<usize, 3> = vector![1; 3];
193
194 assert_eq!(v1.len(), 3);
195 assert_eq!(v1[0], 1 as usize);
196 assert_eq!(v1[1], 2 as usize);
197 assert_eq!(v1[2], 3 as usize);
198
199 assert_eq!(v2.len(), 3);
200 assert_eq!(v2[0], 1 as usize);
201 assert_eq!(v2[1], 2 as usize);
202 assert_eq!(v2[2], 3 as usize);
203
204 assert_eq!(v3.len(), 3);
205 assert_eq!(v3[0], 1 as usize);
206 assert_eq!(v3[1], 1 as usize);
207 assert_eq!(v3[2], 1 as usize);
208 }
209
210 #[test]
211 fn macro_vector_u8() {
212 let v1 = vector![1 as u8, 2 as u8, 3 as u8];
213 let v2: Vector<u8, 3> = vector![1, 2, 3];
214 let v3: Vector<u8, 3> = vector![1; 3];
215
216 assert_eq!(v1.len(), 3);
217 assert_eq!(v1[0], 1 as u8);
218 assert_eq!(v1[1], 2 as u8);
219 assert_eq!(v1[2], 3 as u8);
220
221 assert_eq!(v2.len(), 3);
222 assert_eq!(v2[0], 1 as u8);
223 assert_eq!(v2[1], 2 as u8);
224 assert_eq!(v2[2], 3 as u8);
225
226 assert_eq!(v3.len(), 3);
227 assert_eq!(v3[0], 1 as u8);
228 assert_eq!(v3[1], 1 as u8);
229 assert_eq!(v3[2], 1 as u8);
230 }
231
232 #[test]
233 fn macro_vector_u16() {
234 let v1 = vector![1 as u16, 2 as u16, 3 as u16];
235 let v2: Vector<u16, 3> = vector![1, 2, 3];
236 let v3: Vector<u16, 3> = vector![1; 3];
237
238 assert_eq!(v1.len(), 3);
239 assert_eq!(v1[0], 1 as u16);
240 assert_eq!(v1[1], 2 as u16);
241 assert_eq!(v1[2], 3 as u16);
242
243 assert_eq!(v2.len(), 3);
244 assert_eq!(v2[0], 1 as u16);
245 assert_eq!(v2[1], 2 as u16);
246 assert_eq!(v2[2], 3 as u16);
247
248 assert_eq!(v3.len(), 3);
249 assert_eq!(v3[0], 1 as u16);
250 assert_eq!(v3[1], 1 as u16);
251 assert_eq!(v3[2], 1 as u16);
252 }
253
254 #[test]
255 fn macro_vector_u32() {
256 let v1 = vector![1 as u32, 2 as u32, 3 as u32];
257 let v2: Vector<u32, 3> = vector![1, 2, 3];
258 let v3: Vector<u32, 3> = vector![1; 3];
259
260 assert_eq!(v1.len(), 3);
261 assert_eq!(v1[0], 1 as u32);
262 assert_eq!(v1[1], 2 as u32);
263 assert_eq!(v1[2], 3 as u32);
264
265 assert_eq!(v2.len(), 3);
266 assert_eq!(v2[0], 1 as u32);
267 assert_eq!(v2[1], 2 as u32);
268 assert_eq!(v2[2], 3 as u32);
269
270 assert_eq!(v3.len(), 3);
271 assert_eq!(v3[0], 1 as u32);
272 assert_eq!(v3[1], 1 as u32);
273 assert_eq!(v3[2], 1 as u32);
274 }
275
276 #[test]
277 fn macro_vector_u64() {
278 let v1 = vector![1 as u64, 2 as u64, 3 as u64];
279 let v2: Vector<u64, 3> = vector![1, 2, 3];
280 let v3: Vector<u64, 3> = vector![1; 3];
281
282 assert_eq!(v1.len(), 3);
283 assert_eq!(v1[0], 1 as u64);
284 assert_eq!(v1[1], 2 as u64);
285 assert_eq!(v1[2], 3 as u64);
286
287 assert_eq!(v2.len(), 3);
288 assert_eq!(v2[0], 1 as u64);
289 assert_eq!(v2[1], 2 as u64);
290 assert_eq!(v2[2], 3 as u64);
291
292 assert_eq!(v3.len(), 3);
293 assert_eq!(v3[0], 1 as u64);
294 assert_eq!(v3[1], 1 as u64);
295 assert_eq!(v3[2], 1 as u64);
296 }
297
298 #[test]
299 fn macro_vector_u128() {
300 let v1 = vector![1 as u128, 2 as u128, 3 as u128];
301 let v2: Vector<u128, 3> = vector![1, 2, 3];
302 let v3: Vector<u128, 3> = vector![1; 3];
303
304 assert_eq!(v1.len(), 3);
305 assert_eq!(v1[0], 1 as u128);
306 assert_eq!(v1[1], 2 as u128);
307 assert_eq!(v1[2], 3 as u128);
308
309 assert_eq!(v2.len(), 3);
310 assert_eq!(v2[0], 1 as u128);
311 assert_eq!(v2[1], 2 as u128);
312 assert_eq!(v2[2], 3 as u128);
313
314 assert_eq!(v3.len(), 3);
315 assert_eq!(v3[0], 1 as u128);
316 assert_eq!(v3[1], 1 as u128);
317 assert_eq!(v3[2], 1 as u128);
318 }
319
320 #[test]
321 fn macro_vector_isize() {
322 let v1 = vector![1 as isize, 2 as isize, 3 as isize];
323 let v2: Vector<isize, 3> = vector![1, 2, 3];
324 let v3: Vector<isize, 3> = vector![1; 3];
325
326 assert_eq!(v1.len(), 3);
327 assert_eq!(v1[0], 1 as isize);
328 assert_eq!(v1[1], 2 as isize);
329 assert_eq!(v1[2], 3 as isize);
330
331 assert_eq!(v2.len(), 3);
332 assert_eq!(v2[0], 1 as isize);
333 assert_eq!(v2[1], 2 as isize);
334 assert_eq!(v2[2], 3 as isize);
335
336 assert_eq!(v3.len(), 3);
337 assert_eq!(v3[0], 1 as isize);
338 assert_eq!(v3[1], 1 as isize);
339 assert_eq!(v3[2], 1 as isize);
340 }
341
342 #[test]
343 fn macro_vector_i8() {
344 let v1 = vector![1 as i8, 2 as i8, 3 as i8];
345 let v2: Vector<i8, 3> = vector![1, 2, 3];
346 let v3: Vector<i8, 3> = vector![1; 3];
347
348 assert_eq!(v1.len(), 3);
349 assert_eq!(v1[0], 1 as i8);
350 assert_eq!(v1[1], 2 as i8);
351 assert_eq!(v1[2], 3 as i8);
352
353 assert_eq!(v2.len(), 3);
354 assert_eq!(v2[0], 1 as i8);
355 assert_eq!(v2[1], 2 as i8);
356 assert_eq!(v2[2], 3 as i8);
357
358 assert_eq!(v3.len(), 3);
359 assert_eq!(v3[0], 1 as i8);
360 assert_eq!(v3[1], 1 as i8);
361 assert_eq!(v3[2], 1 as i8);
362 }
363
364 #[test]
365 fn macro_vector_i16() {
366 let v1 = vector![1 as i16, 2 as i16, 3 as i16];
367 let v2: Vector<i16, 3> = vector![1, 2, 3];
368 let v3: Vector<i16, 3> = vector![1; 3];
369
370 assert_eq!(v1.len(), 3);
371 assert_eq!(v1[0], 1 as i16);
372 assert_eq!(v1[1], 2 as i16);
373 assert_eq!(v1[2], 3 as i16);
374
375 assert_eq!(v2.len(), 3);
376 assert_eq!(v2[0], 1 as i16);
377 assert_eq!(v2[1], 2 as i16);
378 assert_eq!(v2[2], 3 as i16);
379
380 assert_eq!(v3.len(), 3);
381 assert_eq!(v3[0], 1 as i16);
382 assert_eq!(v3[1], 1 as i16);
383 assert_eq!(v3[2], 1 as i16);
384 }
385
386 #[test]
387 fn macro_vector_i32() {
388 let v1 = vector![1 as i32, 2 as i32, 3 as i32];
389 let v2: Vector<i32, 3> = vector![1, 2, 3];
390 let v3: Vector<i32, 3> = vector![1; 3];
391
392 assert_eq!(v1.len(), 3);
393 assert_eq!(v1[0], 1 as i32);
394 assert_eq!(v1[1], 2 as i32);
395 assert_eq!(v1[2], 3 as i32);
396
397 assert_eq!(v2.len(), 3);
398 assert_eq!(v2[0], 1 as i32);
399 assert_eq!(v2[1], 2 as i32);
400 assert_eq!(v2[2], 3 as i32);
401
402 assert_eq!(v3.len(), 3);
403 assert_eq!(v3[0], 1 as i32);
404 assert_eq!(v3[1], 1 as i32);
405 assert_eq!(v3[2], 1 as i32);
406 }
407
408 #[test]
409 fn macro_vector_i64() {
410 let v1 = vector![1 as i64, 2 as i64, 3 as i64];
411 let v2: Vector<i64, 3> = vector![1, 2, 3];
412 let v3: Vector<i64, 3> = vector![1; 3];
413
414 assert_eq!(v1.len(), 3);
415 assert_eq!(v1[0], 1 as i64);
416 assert_eq!(v1[1], 2 as i64);
417 assert_eq!(v1[2], 3 as i64);
418
419 assert_eq!(v2.len(), 3);
420 assert_eq!(v2[0], 1 as i64);
421 assert_eq!(v2[1], 2 as i64);
422 assert_eq!(v2[2], 3 as i64);
423
424 assert_eq!(v3.len(), 3);
425 assert_eq!(v3[0], 1 as i64);
426 assert_eq!(v3[1], 1 as i64);
427 assert_eq!(v3[2], 1 as i64);
428 }
429
430 #[test]
431 fn macro_vector_i128() {
432 let v1 = vector![1 as i128, 2 as i128, 3 as i128];
433 let v2: Vector<i128, 3> = vector![1, 2, 3];
434 let v3: Vector<i128, 3> = vector![1; 3];
435
436 assert_eq!(v1.len(), 3);
437 assert_eq!(v1[0], 1 as i128);
438 assert_eq!(v1[1], 2 as i128);
439 assert_eq!(v1[2], 3 as i128);
440
441 assert_eq!(v2.len(), 3);
442 assert_eq!(v2[0], 1 as i128);
443 assert_eq!(v2[1], 2 as i128);
444 assert_eq!(v2[2], 3 as i128);
445
446 assert_eq!(v3.len(), 3);
447 assert_eq!(v3[0], 1 as i128);
448 assert_eq!(v3[1], 1 as i128);
449 assert_eq!(v3[2], 1 as i128);
450 }
451
452 #[test]
453 fn macro_vector_f32() {
454 let v1 = vector![1. as f32, 2. as f32, 3. as f32];
455 let v2: Vector<f32, 3> = vector![1., 2., 3.];
456 let v3: Vector<f32, 3> = vector![1.; 3];
457
458 assert_eq!(v1.len(), 3);
459 assert_relative_eq!(v1[0], 1.0 as f32);
460 assert_relative_eq!(v1[1], 2.0 as f32);
461 assert_relative_eq!(v1[2], 3.0 as f32);
462
463 assert_eq!(v2.len(), 3);
464 assert_relative_eq!(v2[0], 1.0 as f32);
465 assert_relative_eq!(v2[1], 2.0 as f32);
466 assert_relative_eq!(v2[2], 3.0 as f32);
467
468 assert_eq!(v3.len(), 3);
469 assert_relative_eq!(v3[0], 1.0 as f32);
470 assert_relative_eq!(v3[1], 1.0 as f32);
471 assert_relative_eq!(v3[2], 1.0 as f32);
472 }
473
474 #[test]
475 fn macro_vector_f64() {
476 let v1 = vector![1. as f64, 2. as f64, 3. as f64];
477 let v2: Vector<f64, 3> = vector![1., 2., 3.];
478 let v3: Vector<f64, 3> = vector![1.; 3];
479
480 assert_eq!(v1.len(), 3);
481 assert_relative_eq!(v1[0], 1.0 as f64);
482 assert_relative_eq!(v1[1], 2.0 as f64);
483 assert_relative_eq!(v1[2], 3.0 as f64);
484
485 assert_eq!(v2.len(), 3);
486 assert_relative_eq!(v2[0], 1.0 as f64);
487 assert_relative_eq!(v2[1], 2.0 as f64);
488 assert_relative_eq!(v2[2], 3.0 as f64);
489
490 assert_eq!(v3.len(), 3);
491 assert_relative_eq!(v3[0], 1.0 as f64);
492 assert_relative_eq!(v3[1], 1.0 as f64);
493 assert_relative_eq!(v3[2], 1.0 as f64);
494 }
495
496 #[test]
497 fn macro_vector_complex_i32() {
498 let v1 = vector![Complex::new(1 as i32, -2 as i32), Complex::new(-1 as i32, 2 as i32)];
499 let v2: Vector<Complex<i32>, 2> = vector![Complex::new(1, -2), Complex::new(-1, 2)];
500 let v3: Vector<Complex<i32>, 2> = vector![Complex::new(1, -2); 2];
501
502 assert_eq!(v1.len(), 2);
503 assert_eq!(v1[0].re, 1 as i32);
504 assert_eq!(v1[0].im, -2 as i32);
505 assert_eq!(v1[1].re, -1 as i32);
506 assert_eq!(v1[1].im, 2 as i32);
507
508 assert_eq!(v2.len(), 2);
509 assert_eq!(v2[0].re, 1 as i32);
510 assert_eq!(v2[0].im, -2 as i32);
511 assert_eq!(v2[1].re, -1 as i32);
512 assert_eq!(v2[1].im, 2 as i32);
513
514 assert_eq!(v3.len(), 2);
515 assert_eq!(v3[0].re, 1 as i32);
516 assert_eq!(v3[0].im, -2 as i32);
517 assert_eq!(v3[1].re, 1 as i32);
518 assert_eq!(v3[1].im, -2 as i32);
519 }
520
521 #[test]
522 fn macro_vector_complex_f64() {
523 let v1 = vector![Complex::new(1. as f64, -2. as f64), Complex::new(-1. as f64, 2. as f64)];
524 let v2: Vector<Complex<f64>, 2> = vector![Complex::new(1., -2.), Complex::new(-1., 2.)];
525 let v3: Vector<Complex<f64>, 2> = vector![Complex::new(1., -2.); 2];
526
527 assert_eq!(v1.len(), 2);
528 assert_relative_eq!(v1[0].re, 1. as f64);
529 assert_relative_eq!(v1[0].im, -2. as f64);
530 assert_relative_eq!(v1[1].re, -1. as f64);
531 assert_relative_eq!(v1[1].im, 2. as f64);
532
533 assert_eq!(v2.len(), 2);
534 assert_relative_eq!(v2[0].re, 1. as f64);
535 assert_relative_eq!(v2[0].im, -2. as f64);
536 assert_relative_eq!(v2[1].re, -1. as f64);
537 assert_relative_eq!(v2[1].im, 2. as f64);
538
539 assert_eq!(v3.len(), 2);
540 assert_relative_eq!(v3[0].re, 1. as f64);
541 assert_relative_eq!(v3[0].im, -2. as f64);
542 assert_relative_eq!(v3[1].re, 1. as f64);
543 assert_relative_eq!(v3[1].im, -2. as f64);
544 }
545
546 #[test]
547 fn macro_try_vector_i32() {
548 let slv = vec![1_i32, 2_i32, 3_i32];
549 let v: Vector<i32, 3> = try_vector!(slv).unwrap();
550
551 assert_eq!(v[0], 1_i32);
552 assert_eq!(v[1], 2_i32);
553 assert_eq!(v[2], 3_i32);
554
555 let slv = vec![1_i32, 2_i32, 3_i32];
556 let v: Vector<i32, 3> = try_vector!(&slv).unwrap();
557
558 assert_eq!(v[0], 1_i32);
559 assert_eq!(v[1], 2_i32);
560 assert_eq!(v[2], 3_i32);
561
562 let slv = vec![1_i32, 2_i32, 3_i32];
563 let v: Vector<i32, 3> = try_vector!(&slv[..]).unwrap();
564
565 assert_eq!(v[0], 1_i32);
566 assert_eq!(v[1], 2_i32);
567 assert_eq!(v[2], 3_i32);
568 }
569
570 #[test]
571 fn macro_try_vector_f64() {
572 let slv = vec![1.0_f64, 2.0_f64, 3.0_f64];
573 let v: Vector<f64, 3> = try_vector!(slv).unwrap();
574
575 assert_relative_eq!(v[0], 1.0_f64);
576 assert_relative_eq!(v[1], 2.0_f64);
577 assert_relative_eq!(v[2], 3.0_f64);
578
579 let slv = vec![1.0_f64, 2.0_f64, 3.0_f64];
580 let v: Vector<f64, 3> = try_vector!(&slv).unwrap();
581
582 assert_relative_eq!(v[0], 1.0_f64);
583 assert_relative_eq!(v[1], 2.0_f64);
584 assert_relative_eq!(v[2], 3.0_f64);
585
586 let slv = vec![1.0_f64, 2.0_f64, 3.0_f64];
587 let v: Vector<f64, 3> = try_vector!(&slv[..]).unwrap();
588
589 assert_relative_eq!(v[0], 1.0_f64);
590 assert_relative_eq!(v[1], 2.0_f64);
591 assert_relative_eq!(v[2], 3.0_f64);
592 }
593
594 #[test]
595 fn macro_try_vector_complex_i32() {
596 let slv = vec![Complex::new(1_i32, 2_i32), Complex::new(3_i32, 4_i32)];
597 let v: Vector<Complex<i32>, 2> = try_vector!(slv).unwrap();
598
599 assert_eq!(v[0].re, 1_i32);
600 assert_eq!(v[0].im, 2_i32);
601 assert_eq!(v[1].re, 3_i32);
602 assert_eq!(v[1].im, 4_i32);
603
604 let slv = vec![Complex::new(1_i32, 2_i32), Complex::new(3_i32, 4_i32)];
605 let v: Vector<Complex<i32>, 2> = try_vector!(&slv).unwrap();
606
607 assert_eq!(v[0].re, 1_i32);
608 assert_eq!(v[0].im, 2_i32);
609 assert_eq!(v[1].re, 3_i32);
610 assert_eq!(v[1].im, 4_i32);
611
612 let slv = vec![Complex::new(1_i32, 2_i32), Complex::new(3_i32, 4_i32)];
613 let v: Vector<Complex<i32>, 2> = try_vector!(&slv[..]).unwrap();
614
615 assert_eq!(v[0].re, 1_i32);
616 assert_eq!(v[0].im, 2_i32);
617 assert_eq!(v[1].re, 3_i32);
618 assert_eq!(v[1].im, 4_i32);
619 }
620
621 #[test]
622 fn macro_try_vector_complex_f64() {
623 let slv = vec![Complex::new(1.0_f64, 2.0_f64), Complex::new(3.0_f64, 4.0_f64)];
624 let v: Vector<Complex<f64>, 2> = try_vector!(slv).unwrap();
625
626 assert_relative_eq!(v[0].re, 1.0_f64);
627 assert_relative_eq!(v[0].im, 2.0_f64);
628 assert_relative_eq!(v[1].re, 3.0_f64);
629 assert_relative_eq!(v[1].im, 4.0_f64);
630
631 let slv = vec![Complex::new(1.0_f64, 2.0_f64), Complex::new(3.0_f64, 4.0_f64)];
632 let v: Vector<Complex<f64>, 2> = try_vector!(&slv).unwrap();
633
634 assert_relative_eq!(v[0].re, 1.0_f64);
635 assert_relative_eq!(v[0].im, 2.0_f64);
636 assert_relative_eq!(v[1].re, 3.0_f64);
637 assert_relative_eq!(v[1].im, 4.0_f64);
638
639 let slv = vec![Complex::new(1.0_f64, 2.0_f64), Complex::new(3.0_f64, 4.0_f64)];
640 let v: Vector<Complex<f64>, 2> = try_vector!(&slv[..]).unwrap();
641
642 assert_relative_eq!(v[0].re, 1.0_f64);
643 assert_relative_eq!(v[0].im, 2.0_f64);
644 assert_relative_eq!(v[1].re, 3.0_f64);
645 assert_relative_eq!(v[1].im, 4.0_f64);
646 }
647}