3 using System.Runtime.CompilerServices;
6 * Tests for the SIMD intrinsics in the System.Numerics.Vectors assembly.
8 public class VectorTests {
11 public static int Main (string[] args) {
12 return TestDriver.RunTests (typeof (VectorTests), args);
20 public static int test_0_vector2_ctor_1 () {
21 var v = new Vector2 (1.0f);
30 public static int test_0_vector2_ctor_2 () {
31 var v = new Vector2 (1.0f, 2.0f);
40 [MethodImplAttribute (MethodImplOptions.NoInlining)]
41 public static bool vector2_equals (Vector2 v1, Vector2 v2) {
43 return v1.Equals (v2);
46 public static int test_0_vector2_equals () {
47 var v1 = new Vector2 (1.0f, 2.0f);
48 var v2 = new Vector2 (2.0f, 2.0f);
50 if (vector2_equals (v1, v2))
52 if (!vector2_equals (v1, v1))
57 [MethodImplAttribute (MethodImplOptions.NoInlining)]
58 public static float vector2_dot (Vector2 v1, Vector2 v2) {
59 return Vector2.Dot (v1, v2);
62 public static int test_0_vector2_dot () {
63 var v1 = new Vector2 (1.0f, 1.0f);
64 var v2 = new Vector2 (2.0f, 2.0f);
66 float f = vector2_dot (v1, v2);
69 f = vector2_dot (v1, v1);
75 [MethodImplAttribute (MethodImplOptions.NoInlining)]
76 public static Vector2 vector2_min (Vector2 v1, Vector2 v2) {
77 return Vector2.Min (v1, v2);
80 public static int test_0_vector2_min () {
81 var v1 = new Vector2 (1.0f, 1.0f);
82 var v2 = new Vector2 (2.0f, 2.0f);
84 var v3 = vector2_min (v1, v2);
85 if (v3.X != 1.0f || v3.Y != 1.0f)
87 v3 = vector2_min (v2, v2);
88 if (v3.X != 2.0f || v3.Y != 2.0f)
93 [MethodImplAttribute (MethodImplOptions.NoInlining)]
94 public static Vector2 vector2_max (Vector2 v1, Vector2 v2) {
95 return Vector2.Max (v1, v2);
98 public static int test_0_vector2_max () {
99 var v1 = new Vector2 (1.0f, 1.0f);
100 var v2 = new Vector2 (2.0f, 2.0f);
102 var v3 = vector2_max (v1, v2);
103 if (v3.X != 2.0f || v3.Y != 2.0f)
105 v3 = vector2_min (v1, v1);
106 if (v3.X != 1.0f || v3.Y != 1.0f)
111 [MethodImplAttribute (MethodImplOptions.NoInlining)]
112 public static Vector2 vector2_abs (Vector2 v1) {
113 return Vector2.Abs (v1);
116 [Category ("!INTERPRETER")]
117 public static int test_0_vector2_abs () {
118 var v1 = new Vector2 (-1.0f, -2.0f);
119 var v2 = new Vector2 (1.0f, 2.0f);
121 var v3 = vector2_abs (v1);
122 if (v3.X != 1.0f || v3.Y != 2.0f)
124 v3 = vector2_abs (v2);
125 if (v3.X != 1.0f || v3.Y != 2.0f)
130 [MethodImplAttribute (MethodImplOptions.NoInlining)]
131 public static Vector2 vector2_sqrt (Vector2 v1) {
132 return Vector2.SquareRoot (v1);
135 public static int test_0_vector2_sqrt () {
136 var v1 = new Vector2 (1.0f, 0.0f);
138 var v3 = vector2_sqrt (v1);
139 if (v3.X != 1.0f || v3.Y != 0.0f)
144 [MethodImplAttribute (MethodImplOptions.NoInlining)]
145 public static Vector2 vector2_add (Vector2 v1, Vector2 v2) {
149 public static int test_0_vector2_add () {
150 var v1 = new Vector2 (1.0f, 2.0f);
151 var v2 = new Vector2 (3.0f, 4.0f);
153 var v3 = vector2_add (v1, v2);
154 if (v3.X != 4.0f || v3.Y != 6.0f)
159 [MethodImplAttribute (MethodImplOptions.NoInlining)]
160 public static Vector2 vector2_sub (Vector2 v1, Vector2 v2) {
164 public static int test_0_vector2_sub () {
165 var v1 = new Vector2 (1.0f, 2.0f);
166 var v2 = new Vector2 (3.0f, 5.0f);
168 var v3 = vector2_sub (v2, v1);
169 if (v3.X != 2.0f || v3.Y != 3.0f)
174 [MethodImplAttribute (MethodImplOptions.NoInlining)]
175 public static Vector2 vector2_mul (Vector2 v1, Vector2 v2) {
179 public static int test_0_vector2_mul () {
180 var v1 = new Vector2 (1.0f, 2.0f);
181 var v2 = new Vector2 (3.0f, 5.0f);
183 var v3 = vector2_mul (v2, v1);
184 if (v3.X != 3.0f || v3.Y != 10.0f)
189 [MethodImplAttribute (MethodImplOptions.NoInlining)]
190 public static Vector2 vector2_mul_left (float v1, Vector2 v2) {
194 public static int test_0_vector2_mul_left () {
195 var v1 = new Vector2 (3.0f, 5.0f);
197 var v3 = vector2_mul_left (2.0f, v1);
198 if (v3.X != 6.0f || v3.Y != 10.0f)
203 [MethodImplAttribute (MethodImplOptions.NoInlining)]
204 public static Vector2 vector2_mul_right (Vector2 v1, float v2) {
208 public static int test_0_vector2_mul_right () {
209 var v1 = new Vector2 (3.0f, 5.0f);
211 var v3 = vector2_mul_right (v1, 2.0f);
212 if (v3.X != 6.0f || v3.Y != 10.0f)
217 [MethodImplAttribute (MethodImplOptions.NoInlining)]
218 public static Vector2 vector2_div (Vector2 v1, Vector2 v2) {
222 public static int test_0_vector2_div () {
223 var v1 = new Vector2 (9.0f, 10.0f);
224 var v2 = new Vector2 (3.0f, 5.0f);
226 var v3 = vector2_div (v1, v2);
227 if (v3.X != 3.0f || v3.Y != 2.0f)
232 [MethodImplAttribute (MethodImplOptions.NoInlining)]
233 public static Vector2 vector2_div_right (Vector2 v1, float v2) {
237 public static int test_0_vector2_div_right () {
238 var v1 = new Vector2 (9.0f, 15.0f);
240 var v3 = vector2_div_right (v1, 3.0f);
241 if (v3.X != 3.0f || v3.Y != 5.0f)
250 public static int test_0_vector4_ctor_1 () {
251 var v = new Vector4 (1.0f);
264 public static int test_0_vector4_ctor_2 () {
265 var v = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f);
278 [MethodImplAttribute (MethodImplOptions.NoInlining)]
279 public static bool vector4_equals (Vector4 v1, Vector4 v2) {
281 return v1.Equals (v2);
284 public static int test_0_vector4_equals () {
285 var v1 = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f);
286 var v2 = new Vector4 (2.0f, 2.0f, 2.0f, 2.0f);
288 if (vector4_equals (v1, v2))
290 if (!vector4_equals (v1, v1))
295 [MethodImplAttribute (MethodImplOptions.NoInlining)]
296 public static float vector4_dot (Vector4 v1, Vector4 v2) {
297 return Vector4.Dot (v1, v2);
300 public static int test_0_vector4_dot () {
301 var v1 = new Vector4 (1.0f, 1.0f, 1.0f, 1.0f);
302 var v2 = new Vector4 (2.0f, 2.0f, 2.0f, 2.0f);
304 float f = vector4_dot (v1, v2);
307 f = vector4_dot (v1, v1);
313 [MethodImplAttribute (MethodImplOptions.NoInlining)]
314 public static Vector4 vector4_min (Vector4 v1, Vector4 v2) {
315 return Vector4.Min (v1, v2);
318 public static int test_0_vector4_min () {
319 var v1 = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f);
320 var v2 = new Vector4 (5.0f, 6.0f, 7.0f, 8.0f);
322 var v3 = vector4_min (v1, v2);
323 if (v3.X != 1.0f || v3.Y != 2.0f || v3.Z != 3.0f || v3.W != 4.0f)
325 v3 = vector4_min (v2, v2);
326 if (v3.X != 5.0f || v3.Y != 6.0f || v3.Z != 7.0f || v3.W != 8.0f)
331 [MethodImplAttribute (MethodImplOptions.NoInlining)]
332 public static Vector4 vector4_max (Vector4 v1, Vector4 v2) {
333 return Vector4.Max (v1, v2);
336 public static int test_0_vector4_max () {
337 var v1 = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f);
338 var v2 = new Vector4 (5.0f, 6.0f, 7.0f, 8.0f);
340 var v3 = vector4_max (v1, v2);
341 if (v3.X != 5.0f || v3.Y != 6.0f || v3.Z != 7.0f || v3.W != 8.0f)
343 v3 = vector4_max (v1, v1);
344 if (v3.X != 1.0f || v3.Y != 2.0f || v3.Z != 3.0f || v3.W != 4.0f)
349 [MethodImplAttribute (MethodImplOptions.NoInlining)]
350 public static Vector4 vector4_abs (Vector4 v1) {
351 return Vector4.Abs (v1);
354 [Category ("!INTERPRETER")]
355 public static int test_0_vector4_abs () {
356 var v1 = new Vector4 (-1.0f, -2.0f, -3.0f, -4.0f);
357 var v2 = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f);
359 var v3 = vector4_abs (v1);
360 if (v3.X != 1.0f || v3.Y != 2.0f || v3.Z != 3.0f || v3.W != 4.0f)
362 v3 = vector4_abs (v2);
363 if (v3.X != 1.0f || v3.Y != 2.0f || v3.Z != 3.0f || v3.W != 4.0f)
368 [MethodImplAttribute (MethodImplOptions.NoInlining)]
369 public static Vector4 vector4_sqrt (Vector4 v1) {
370 return Vector4.SquareRoot (v1);
373 public static int test_0_vector4_sqrt () {
374 var v1 = new Vector4 (1.0f, 0.0f, 1.0f, 0.0f);
376 var v3 = vector4_sqrt (v1);
377 if (v3.X != 1.0f || v3.Y != 0.0f || v3.Z != 1.0f || v3.W != 0.0f)
382 [MethodImplAttribute (MethodImplOptions.NoInlining)]
383 public static Vector4 vector4_add (Vector4 v1, Vector4 v2) {
387 public static int test_0_vector4_add () {
388 var v1 = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f);
389 var v2 = new Vector4 (5.0f, 6.0f, 7.0f, 8.0f);
391 var v3 = vector4_add (v1, v2);
392 if (v3.X != 6.0f || v3.Y != 8.0f || v3.Z != 10.0f || v3.W != 12.0f)
397 [MethodImplAttribute (MethodImplOptions.NoInlining)]
398 public static Vector4 vector4_sub (Vector4 v1, Vector4 v2) {
402 public static int test_0_vector4_sub () {
403 var v1 = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f);
404 var v2 = new Vector4 (3.0f, 5.0f, 7.0f, 9.0f);
406 var v3 = vector4_sub (v2, v1);
407 if (v3.X != 2.0f || v3.Y != 3.0f || v3.Z != 4.0f || v3.W != 5.0f)
412 [MethodImplAttribute (MethodImplOptions.NoInlining)]
413 public static Vector4 vector4_mul (Vector4 v1, Vector4 v2) {
417 public static int test_0_vector4_mul () {
418 var v1 = new Vector4 (1.0f, 2.0f, 3.0f, 4.0f);
419 var v2 = new Vector4 (3.0f, 5.0f, 6.0f, 7.0f);
421 var v3 = vector4_mul (v2, v1);
422 if (v3.X != 3.0f || v3.Y != 10.0f || v3.Z != 18.0f || v3.W != 28.0f)
427 [MethodImplAttribute (MethodImplOptions.NoInlining)]
428 public static Vector4 vector4_mul_left (float v1, Vector4 v2) {
432 public static int test_0_vector4_mul_left () {
433 var v1 = new Vector4 (3.0f, 5.0f, 6.0f, 7.0f);
435 var v3 = vector4_mul_left (2.0f, v1);
436 if (v3.X != 6.0f || v3.Y != 10.0f || v3.Z != 12.0f || v3.W != 14.0f)
441 [MethodImplAttribute (MethodImplOptions.NoInlining)]
442 public static Vector4 vector4_mul_right (Vector4 v1, float v2) {
446 public static int test_0_vector4_mul_right () {
447 var v1 = new Vector4 (3.0f, 5.0f, 6.0f, 7.0f);
449 var v3 = vector4_mul_right (v1, 2.0f);
450 if (v3.X != 6.0f || v3.Y != 10.0f || v3.Z != 12.0f || v3.W != 14.0f)
455 [MethodImplAttribute (MethodImplOptions.NoInlining)]
456 public static Vector4 vector4_div (Vector4 v1, Vector4 v2) {
460 public static int test_0_vector4_div () {
461 var v1 = new Vector4 (9.0f, 10.0f, 12.0f, 21.0f);
462 var v2 = new Vector4 (3.0f, 5.0f, 6.0f, 7.0f);
464 var v3 = vector4_div (v1, v2);
465 if (v3.X != 3.0f || v3.Y != 2.0f || v3.Z != 2.0f || v3.W != 3.0f)
470 [MethodImplAttribute (MethodImplOptions.NoInlining)]
471 public static Vector4 vector4_div_right (Vector4 v1, float v2) {
475 public static int test_0_vector4_div_right () {
476 var v1 = new Vector4 (9.0f, 15.0f, 21.0f, 30.0f);
478 var v3 = vector4_div_right (v1, 3.0f);
479 if (v3.X != 3.0f || v3.Y != 5.0f || v3.Z != 7.0f || v3.W != 10.0f)
484 public static int test_0_vector4_length () {
485 var v = new Vector4 (2.0f, 2.0f, 2.0f, 2.0f);
486 return v.Length () == 4.0f ? 0 : 1;
493 public static int test_0_vector3_ctor_1 () {
494 var v = new Vector3 (1.0f);
505 public static int test_0_vector3_ctor_2 () {
506 var v = new Vector3 (1.0f, 2.0f, 3.0f);
517 [MethodImplAttribute (MethodImplOptions.NoInlining)]
518 public static bool vector3_equals (Vector3 v1, Vector3 v2) {
520 return v1.Equals (v2);
523 public static int test_0_vector3_equals () {
524 var v1 = new Vector3 (1.0f, 2.0f, 3.0f);
525 var v2 = new Vector3 (2.0f, 2.0f, 2.0f);
527 if (vector3_equals (v1, v2))
529 if (!vector3_equals (v1, v1))
534 [MethodImplAttribute (MethodImplOptions.NoInlining)]
535 public static float vector3_dot (Vector3 v1, Vector3 v2) {
536 return Vector3.Dot (v1, v2);
539 public static int test_0_vector3_dot () {
540 var v1 = new Vector3 (1.0f, 1.0f, 1.0f);
541 var v2 = new Vector3 (2.0f, 2.0f, 2.0f);
543 float f = vector3_dot (v1, v2);
546 f = vector3_dot (v1, v1);
552 [MethodImplAttribute (MethodImplOptions.NoInlining)]
553 public static Vector3 vector3_min (Vector3 v1, Vector3 v2) {
554 return Vector3.Min (v1, v2);
557 public static int test_0_vector3_min () {
558 var v1 = new Vector3 (1.0f, 2.0f, 3.0f);
559 var v2 = new Vector3 (5.0f, 6.0f, 7.0f);
561 var v3 = vector3_min (v1, v2);
562 if (v3.X != 1.0f || v3.Y != 2.0f || v3.Z != 3.0f)
564 v3 = vector3_min (v2, v2);
565 if (v3.X != 5.0f || v3.Y != 6.0f || v3.Z != 7.0f)
570 [MethodImplAttribute (MethodImplOptions.NoInlining)]
571 public static Vector3 vector3_max (Vector3 v1, Vector3 v2) {
572 return Vector3.Max (v1, v2);
575 public static int test_0_vector3_max () {
576 var v1 = new Vector3 (1.0f, 2.0f, 3.0f);
577 var v2 = new Vector3 (5.0f, 6.0f, 7.0f);
579 var v3 = vector3_max (v1, v2);
580 if (v3.X != 5.0f || v3.Y != 6.0f || v3.Z != 7.0f)
582 v3 = vector3_max (v1, v1);
583 if (v3.X != 1.0f || v3.Y != 2.0f || v3.Z != 3.0f)
588 [MethodImplAttribute (MethodImplOptions.NoInlining)]
589 public static Vector3 vector3_abs (Vector3 v1) {
590 return Vector3.Abs (v1);
593 [Category ("!INTERPRETER")]
594 public static int test_0_vector3_abs () {
595 var v1 = new Vector3 (-1.0f, -2.0f, -3.0f);
596 var v2 = new Vector3 (1.0f, 2.0f, 3.0f);
598 var v3 = vector3_abs (v1);
599 if (v3.X != 1.0f || v3.Y != 2.0f || v3.Z != 3.0f)
601 v3 = vector3_abs (v2);
602 if (v3.X != 1.0f || v3.Y != 2.0f || v3.Z != 3.0f)
607 [MethodImplAttribute (MethodImplOptions.NoInlining)]
608 public static Vector3 vector3_sqrt (Vector3 v1) {
609 return Vector3.SquareRoot (v1);
612 public static int test_0_vector3_sqrt () {
613 var v1 = new Vector3 (1.0f, 0.0f, 1.0f);
615 var v3 = vector3_sqrt (v1);
616 if (v3.X != 1.0f || v3.Y != 0.0f || v3.Z != 1.0f)
621 [MethodImplAttribute (MethodImplOptions.NoInlining)]
622 public static Vector3 vector3_add (Vector3 v1, Vector3 v2) {
626 public static int test_0_vector3_add () {
627 var v1 = new Vector3 (1.0f, 2.0f, 3.0f);
628 var v2 = new Vector3 (5.0f, 6.0f, 7.0f);
630 var v3 = vector3_add (v1, v2);
631 if (v3.X != 6.0f || v3.Y != 8.0f || v3.Z != 10.0f)
636 [MethodImplAttribute (MethodImplOptions.NoInlining)]
637 public static Vector3 vector3_sub (Vector3 v1, Vector3 v2) {
641 public static int test_0_vector3_sub () {
642 var v1 = new Vector3 (1.0f, 2.0f, 3.0f);
643 var v2 = new Vector3 (3.0f, 5.0f, 7.0f);
645 var v3 = vector3_sub (v2, v1);
646 if (v3.X != 2.0f || v3.Y != 3.0f || v3.Z != 4.0f)
651 [MethodImplAttribute (MethodImplOptions.NoInlining)]
652 public static Vector3 vector3_mul (Vector3 v1, Vector3 v2) {
656 public static int test_0_vector3_mul () {
657 var v1 = new Vector3 (1.0f, 2.0f, 3.0f);
658 var v2 = new Vector3 (3.0f, 5.0f, 6.0f);
660 var v3 = vector3_mul (v2, v1);
661 if (v3.X != 3.0f || v3.Y != 10.0f || v3.Z != 18.0f)
666 [MethodImplAttribute (MethodImplOptions.NoInlining)]
667 public static Vector3 vector3_mul_left (float v1, Vector3 v2) {
671 public static int test_0_vector3_mul_left () {
672 var v1 = new Vector3 (3.0f, 5.0f, 6.0f);
674 var v3 = vector3_mul_left (2.0f, v1);
675 if (v3.X != 6.0f || v3.Y != 10.0f || v3.Z != 12.0f)
680 [MethodImplAttribute (MethodImplOptions.NoInlining)]
681 public static Vector3 vector3_mul_right (Vector3 v1, float v2) {
685 public static int test_0_vector3_mul_right () {
686 var v1 = new Vector3 (3.0f, 5.0f, 6.0f);
688 var v3 = vector3_mul_right (v1, 2.0f);
689 if (v3.X != 6.0f || v3.Y != 10.0f || v3.Z != 12.0f)
694 [MethodImplAttribute (MethodImplOptions.NoInlining)]
695 public static Vector3 vector3_div (Vector3 v1, Vector3 v2) {
699 public static int test_0_vector3_div () {
700 var v1 = new Vector3 (9.0f, 10.0f, 12.0f);
701 var v2 = new Vector3 (3.0f, 5.0f, 6.0f);
703 var v3 = vector3_div (v1, v2);
704 if (v3.X != 3.0f || v3.Y != 2.0f || v3.Z != 2.0f)
709 [MethodImplAttribute (MethodImplOptions.NoInlining)]
710 public static Vector3 vector3_div_right (Vector3 v1, float v2) {
714 public static int test_0_vector3_div_right () {
715 var v1 = new Vector3 (9.0f, 15.0f, 21.0f);
717 var v3 = vector3_div_right (v1, 3.0f);
718 if (v3.X != 3.0f || v3.Y != 5.0f || v3.Z != 7.0f)
727 public static int test_0_vector_t_count () {
728 // This assumes a 16 byte simd register size
729 if (Vector<byte>.Count != 16)
731 if (Vector<short>.Count != 8)
733 if (Vector<int>.Count != 4)
735 if (Vector<long>.Count != 2)
740 public static int test_0_vector_t_zero () {
741 var v = Vector<byte>.Zero;
742 for (int i = 0; i < Vector<byte>.Count; ++i)
745 var v2 = Vector<double>.Zero;
746 for (int i = 0; i < Vector<double>.Count; ++i)
752 public static int test_0_vector_t_i1_accessor () {
753 var elems = new byte [] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
754 var v = new Vector<byte> (elems, 0);
755 for (int i = 0; i < Vector<byte>.Count; ++i)
767 } catch (IndexOutOfRangeException) {
772 } catch (IndexOutOfRangeException) {
777 public static int test_0_vector_t_i4_accessor () {
778 var elems = new int [] { 1, 2, 3, 4 };
779 var v = new Vector<int> (elems, 0);
780 for (int i = 0; i < Vector<int>.Count; ++i)
792 } catch (IndexOutOfRangeException) {
795 int r = v [Vector<int>.Count];
797 } catch (IndexOutOfRangeException) {
802 public static int test_0_vector_t_i8_accessor () {
803 var elems = new long [] { 1, 2 };
804 var v = new Vector<long> (elems, 0);
805 for (int i = 0; i < Vector<long>.Count; ++i)
815 } catch (IndexOutOfRangeException) {
818 var r = v [Vector<long>.Count];
820 } catch (IndexOutOfRangeException) {
825 public static int test_0_vector_t_r8_accessor () {
826 var elems = new double [] { 1.0, 2.0 };
827 var v = new Vector<double> (elems, 0);
828 for (int i = 0; i < Vector<double>.Count; ++i)
829 if (v [i] != (double)i + 1.0)
838 } catch (IndexOutOfRangeException) {
841 var r = v [Vector<double>.Count];
843 } catch (IndexOutOfRangeException) {
848 public static int test_0_vector_t_i1_ctor_3 () {
849 var v = new Vector<byte> (5);
850 for (int i = 0; i < 16; ++i)
856 public static int test_0_vector_t_i2_ctor_3 () {
857 var v = new Vector<short> (5);
858 for (int i = 0; i < 8; ++i)
864 public static int test_0_vector_t_i4_ctor_3 () {
865 var v = new Vector<int> (0xffffeee);
866 for (int i = 0; i < 4; ++i)
867 if (v [i] != 0xffffeee)
872 public static int test_0_vector_t_i8_ctor_3 () {
873 var v = new Vector<long> (0xffffeeeeabcdefL);
874 for (int i = 0; i < 2; ++i)
875 if (v [i] != 0xffffeeeeabcdefL)
880 public static int test_0_vector_t_r4_ctor_3 () {
881 var v = new Vector<float> (0.5f);
882 for (int i = 0; i < 4; ++i) {
889 public static int test_0_vector_t_r8_ctor_3 () {
890 var v = new Vector<double> (0.5f);
891 for (int i = 0; i < 2; ++i) {
898 public static int test_0_vector_t_i1_ctor () {
899 var elems = new byte [] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
900 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 };
901 var v = new Vector<byte> (elems, 16);
902 for (int i = 0; i < 16; ++i)
906 var v2 = new Vector<byte> (elems, 16 + 4);
908 } catch (IndexOutOfRangeException) {
913 public static int test_0_vector_t_i1_ctor_2 () {
914 var elems = new byte [] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 };
915 var v = new Vector<byte> (elems);
916 for (int i = 0; i < 16; ++i)
920 var elems2 = new byte [] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
921 var v2 = new Vector<byte> (elems2);
923 } catch (IndexOutOfRangeException) {
928 public static int test_0_vector_t_r4_equal () {
929 var elems1 = new float [4] { 1.0f, 1.0f, 1.0f, 1.0f };
930 var v1 = new Vector<float> (elems1);
931 var elems2 = new float [4] { 1.0f, 2.0f, 1.0f, 2.0f };
932 var v2 = new Vector<float> (elems2);
933 Vector<int> v = Vector.Equals (v1, v2);
934 if (v [0] != -1 || v [1] != 0 || v [2] != -1 || v [3] != 0)
939 public static int test_0_vector_t_r8_equal () {
940 var elems1 = new double [] { 1.0f, 1.0f };
941 var v1 = new Vector<double> (elems1);
942 var elems2 = new double [] { 1.0f, 2.0f };
943 var v2 = new Vector<double> (elems2);
944 Vector<long> v = Vector.Equals (v1, v2);
945 if (v [0] != -1 || v [1] != 0)
950 public static int test_0_vector_t_i8_equal () {
951 var elems1 = new long [] { 1, 1 };
952 var v1 = new Vector<long> (elems1);
953 var elems2 = new long [] { 1, 2 };
954 var v2 = new Vector<long> (elems2);
955 Vector<long> v = Vector.Equals (v1, v2);
956 if (v [0] != -1 || v [1] != 0)
961 public static int test_0_vector_t_i4_equal () {
962 var elems1 = new int [] { 1, 1, 1, 1 };
963 var v1 = new Vector<int> (elems1);
964 var elems2 = new int [] { 1, 2, 1, 2 };
965 var v2 = new Vector<int> (elems2);
966 Vector<int> v = Vector.Equals (v1, v2);
967 if (v [0] != -1 || v [1] != 0 || v [2] != -1 || v[3] != 0)
973 public static int test_0_vector_t_u4_equal () {
974 var elems1 = new uint [] { 1, 1, 1, 1 };
975 var v1 = new Vector<uint> (elems1);
976 var elems2 = new uint [] { 1, 2, 1, 2 };
977 var v2 = new Vector<uint> (elems2);
978 Vector<uint> v = Vector.Equals (v1, v2);
979 if (v [0] != 0xffffffff || v [1] != 0 || v [2] != 0xffffffff || v[3] != 0)
985 public static int test_0_vector_t_i2_equal () {
986 var elems1 = new short [] { 1, 1, 1, 1, 1, 1, 1, 1 };
987 var v1 = new Vector<short> (elems1);
988 var elems2 = new short [] { 1, 2, 1, 2, 1, 2, 1, 2 };
989 var v2 = new Vector<short> (elems2);
990 Vector<short> v = Vector.Equals (v1, v2);
991 for (int i = 0; i < Vector<short>.Count; ++i) {
992 if (i % 2 == 0 && v [i] != -1)
994 if (i % 2 == 1 && v [i] != 0)
1000 public static int test_0_vector_t_u2_equal () {
1001 var elems1 = new ushort [] { 1, 1, 1, 1, 1, 1, 1, 1 };
1002 var v1 = new Vector<ushort> (elems1);
1003 var elems2 = new ushort [] { 1, 2, 1, 2, 1, 2, 1, 2 };
1004 var v2 = new Vector<ushort> (elems2);
1005 Vector<ushort> v = Vector.Equals (v1, v2);
1006 for (int i = 0; i < Vector<ushort>.Count; ++i) {
1007 if (i % 2 == 0 && v [i] != 0xffff)
1009 if (i % 2 == 1 && v [i] != 0)
1015 public static int test_0_vector_t_i1_equal () {
1016 var elems1 = new sbyte [] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
1017 var v1 = new Vector<sbyte> (elems1);
1018 var elems2 = new sbyte [] { 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 };
1019 var v2 = new Vector<sbyte> (elems2);
1020 Vector<sbyte> v = Vector.Equals (v1, v2);
1021 for (int i = 0; i < Vector<sbyte>.Count; ++i) {
1022 if (i % 2 == 0 && v [i] != -1)
1024 if (i % 2 == 1 && v [i] != 0)
1030 public static int test_0_vector_t_u1_equal () {
1031 var elems1 = new byte [] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
1032 var v1 = new Vector<byte> (elems1);
1033 var elems2 = new byte [] { 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 };
1034 var v2 = new Vector<byte> (elems2);
1035 Vector<byte> v = Vector.Equals (v1, v2);
1036 for (int i = 0; i < Vector<byte>.Count; ++i) {
1037 if (i % 2 == 0 && v [i] != 0xff)
1039 if (i % 2 == 1 && v [i] != 0)
1045 /* op_Explicit () -> Vector<int32> */
1047 public static int test_0_vector_t_cast_vector_int32 () {
1048 var v1 = new Vector<long> (new long [] { 0x123456789abcdef0L, 0x23456789abcdef01L });
1049 var v = (Vector<int>)v1;
1050 if (BitConverter.IsLittleEndian) {
1051 if ((uint)v [0] != 0x9abcdef0 || (uint)v [1] != 0x12345678)
1053 if ((uint)v [2] != 0xabcdef01 || (uint)v [3] != 0x23456789)
1056 if ((uint)v [1] != 0x9abcdef0 || (uint)v [0] != 0x12345678)
1058 if ((uint)v [3] != 0xabcdef01 || (uint)v [2] != 0x23456789)
1064 /* Vector.GreaterThanOrEqual */
1066 public static int test_0_vector_t_i1_ge () {
1067 var elems1 = new sbyte [] { 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1 };
1068 var v1 = new Vector<sbyte> (elems1);
1069 var elems2 = new sbyte [] { 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2 };
1070 var v2 = new Vector<sbyte> (elems2);
1071 Vector<sbyte> v = Vector.GreaterThanOrEqual (v1, v2);
1072 for (int i = 0; i < Vector<sbyte>.Count; ++i) {
1073 if (i % 2 == 0 && v [i] != -1)
1075 if (i % 2 == 1 && v [i] != 0)
1081 public static int test_0_vector_t_i2_ge () {
1082 var elems1 = new short [] { 1, 1, 0, 1, 1, 1, 0, 1 };
1083 var v1 = new Vector<short> (elems1);
1084 var elems2 = new short [] { 0, 2, 0, 2, 0, 2, 0, 2 };
1085 var v2 = new Vector<short> (elems2);
1086 Vector<short> v = Vector.GreaterThanOrEqual (v1, v2);
1087 for (int i = 0; i < Vector<short>.Count; ++i) {
1088 if (i % 2 == 0 && v [i] != -1)
1090 if (i % 2 == 1 && v [i] != 0)
1096 public static int test_0_vector_t_i4_ge () {
1097 var elems1 = new int [] { 1, 1, 0, 1 };
1098 var v1 = new Vector<int> (elems1);
1099 var elems2 = new int [] { 0, 2, 0, 2 };
1100 var v2 = new Vector<int> (elems2);
1101 Vector<int> v = Vector.GreaterThanOrEqual (v1, v2);
1102 if (v [0] != -1 || v [1] != 0 || v [2] != -1 || v[3] != 0)
1107 public static int test_0_vector_t_i8_ge () {
1108 var elems1 = new long [] { 1, 1 };
1109 var v1 = new Vector<long> (elems1);
1110 var elems2 = new long [] { 0, 1 };
1111 var v2 = new Vector<long> (elems2);
1112 Vector<long> v = Vector.GreaterThanOrEqual (v1, v2);
1113 if (v [0] != -1 || v [1] != -1)
1118 /* Vector.LessThan */
1120 public static int test_0_vector_t_i1_lt () {
1121 var elems1 = new sbyte [] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
1122 var v1 = new Vector<sbyte> (elems1);
1123 var elems2 = new sbyte [] { 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2 };
1124 var v2 = new Vector<sbyte> (elems2);
1125 Vector<sbyte> v = Vector.LessThan (v2, v1);
1126 for (int i = 0; i < Vector<sbyte>.Count; ++i) {
1127 if (i % 2 == 0 && v [i] != -1)
1129 if (i % 2 == 1 && v [i] != 0)
1135 /* Vector.GreaterThan */
1137 public static int test_0_vector_t_i1_gt () {
1138 var elems1 = new sbyte [] { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 };
1139 var v1 = new Vector<sbyte> (elems1);
1140 var elems2 = new sbyte [] { 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2 };
1141 var v2 = new Vector<sbyte> (elems2);
1142 Vector<sbyte> v = Vector.GreaterThan (v1, v2);
1143 for (int i = 0; i < Vector<sbyte>.Count; ++i) {
1144 if (i % 2 == 0 && v [i] != -1)
1146 if (i % 2 == 1 && v [i] != 0)
1152 /* Vector.LessThanOrEqual */
1153 public static int test_0_vector_t_i1_le () {
1154 var elems1 = new sbyte [] { 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2 };
1155 var v1 = new Vector<sbyte> (elems1);
1156 var elems2 = new sbyte [] { 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1 };
1157 var v2 = new Vector<sbyte> (elems2);
1158 Vector<sbyte> v = Vector.LessThanOrEqual (v1, v2);
1159 for (int i = 0; i < Vector<sbyte>.Count; ++i) {
1160 if (i % 2 == 0 && v [i] != -1)
1162 if (i % 2 == 1 && v [i] != 0)
1170 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1171 public static Vector<T> vector_t_abs<T> (Vector<T> v1) where T: struct {
1172 return Vector.Abs (v1);
1175 public static int test_0_vector_t_u1_abs () {
1176 var elems1 = new byte [] { 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2 };
1177 var v1 = new Vector<byte> (elems1);
1179 if (vector_t_abs (v1) != v1)
1184 public static int test_0_vector_t_u2_abs () {
1185 var elems1 = new ushort [] { 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2 };
1186 var v1 = new Vector<ushort> (elems1);
1188 if (vector_t_abs (v1) != v1)
1193 public static int test_0_vector_t_u4_abs () {
1194 var elems1 = new uint [] { 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2 };
1195 var v1 = new Vector<uint> (elems1);
1197 if (vector_t_abs (v1) != v1)
1202 public static int test_0_vector_t_u8_abs () {
1203 var elems1 = new ulong [] { 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2 };
1204 var v1 = new Vector<ulong> (elems1);
1206 if (vector_t_abs (v1) != v1)
1211 public static int test_0_vector_t_i1_abs () {
1212 var elems1 = new sbyte [] { 1, -2, 1, -2, 1, -2, 1, -2, 1, -2, 1, -2, 1, -2, 1, -2 };
1213 var v1 = new Vector<sbyte> (elems1);
1214 var elems2 = new sbyte [] { 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 };
1215 var v2 = new Vector<sbyte> (elems2);
1217 if (vector_t_abs (v1) != v2)
1223 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1224 public static Vector<T> vector_add<T> (Vector<T> v1, Vector<T> v2) where T: struct {
1228 public static int test_0_vector_byte_add () {
1229 var v1 = new Vector<byte> (new byte[] { 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 });
1230 var v2 = new Vector<byte> (new byte[] { 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4 });
1232 var res = vector_add (v1, v1);
1238 public static int test_0_vector_sbyte_add () {
1239 var v1 = new Vector<sbyte> (new sbyte[] { 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1 });
1240 var v2 = new Vector<sbyte> (new sbyte[] { 2, -2, 2, -2, 2, -2, 2, -2, 2, -2, 2, -2, 2, -2, 2, -2 });
1242 var res = vector_add (v1, v1);
1248 public static int test_0_vector_ushort_add () {
1249 var v1 = new Vector<ushort> (new ushort[] { 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 });
1250 var v2 = new Vector<ushort> (new ushort[] { 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4 });
1252 var res = vector_add (v1, v1);
1258 public static int test_0_vector_short_add () {
1259 var v1 = new Vector<short> (new short[] { 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1 });
1260 var v2 = new Vector<short> (new short[] { 2, -2, 2, -2, 2, -2, 2, -2, 2, -2, 2, -2, 2, -2, 2, -2 });
1262 var res = vector_add (v1, v1);
1268 public static int test_0_vector_uint_add () {
1269 var v1 = new Vector<uint> (new uint[] { 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 });
1270 var v2 = new Vector<uint> (new uint[] { 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4, 2, 4 });
1272 var res = vector_add (v1, v1);
1278 public static int test_0_vector_int_add () {
1279 var v1 = new Vector<int> (new int[] { 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1 });
1280 var v2 = new Vector<int> (new int[] { 2, -2, 2, -2, 2, -2, 2, -2, 2, -2, 2, 2, 2, -2, 2, -2 });
1282 var res = vector_add (v1, v1);
1288 public static int test_0_vector_double_add () {
1289 var v1 = new Vector<double> (new double[] { 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0 });
1290 var v2 = new Vector<double> (new double[] { 2.0, -2.0, 2.0, -2.0, 2.0, -2.0, 2.0, -2.0, 2.0, -2.0, 2.0, 2.0, 2.0, -2.0, 2.0, -2.0 });
1292 var res = vector_add (v1, v1);
1298 public static int test_0_vector_float_add () {
1299 var v1 = new Vector<float> (new float[] { 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f });
1300 var v2 = new Vector<float> (new float[] { 2.0f, -2.0f, 2.0f, -2.0f, 2.0f, -2.0f, 2.0f, -2.0f, 2.0f, -2.0f, 2.0f, 2.0f, 2.0f, -2.0f, 2.0f, -2.0f });
1302 var res = vector_add (v1, v1);
1308 // Vector<T>.op_Subtraction
1310 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1311 public static Vector<T> vector_sub<T> (Vector<T> v1, Vector<T> v2) where T: struct {
1315 public static int test_0_vector_byte_sub () {
1316 var v1 = new Vector<byte> (new byte[] { 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2 });
1318 var res = vector_sub (v1, v1);
1319 if (res != Vector<byte>.Zero)
1324 public static int test_0_vector_double_sub () {
1325 var v1 = new Vector<double> (new double[] { 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0 });
1327 var res = vector_sub (v1, v1);
1328 if (res != Vector<double>.Zero)
1333 public static int test_0_vector_float_sub () {
1334 var v1 = new Vector<float> (new float[] { 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f });
1336 var res = vector_sub (v1, v1);
1337 if (res != Vector<float>.Zero)
1342 // Vector<T>.op_Multiply
1343 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1344 public static Vector<T> vector_mul<T> (Vector<T> v1, Vector<T> v2) where T: struct {
1348 public static int test_0_vector_int_mul () {
1349 var v1 = new Vector<int> (new int[] { 1, 2, -1, 2, 1, 2, -1, 2, 1, -2, 1, 2, 1, 2, -1, 2 });
1350 var v2 = new Vector<int> (new int[] { 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4 });
1352 var res = vector_mul (v1, v1);
1358 public static int test_0_vector_double_mul () {
1359 var v1 = new Vector<double> (new double[] { 2.0, -1.0, 2.0, -1.0 });
1360 var v2 = new Vector<double> (new double[] { 4.0, 1.0, 4.0, 1.0 });
1362 var res = vector_mul (v1, v1);
1368 public static int test_0_vector_float_mul () {
1369 var v1 = new Vector<float> (new float[] { 2.0f, -1.0f, 2.0f, -1.0f });
1370 var v2 = new Vector<float> (new float[] { 4.0f, 1.0f, 4.0f, 1.0f });
1372 var res = vector_mul (v1, v1);
1378 // Vector<T>.op_Division
1379 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1380 public static Vector<T> vector_div<T> (Vector<T> v1, Vector<T> v2) where T: struct {
1384 public static int test_0_vector_double_div () {
1385 var v1 = new Vector<double> (new double[] { 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0, 1.0, -1.0 });
1386 var v2 = new Vector<double> (new double[] { 1.0, 1.0, 1.0, 1.0 });
1388 var res = vector_div (v1, v1);
1394 public static int test_0_vector_float_div () {
1395 var v1 = new Vector<float> (new float[] { 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f, 1.0f, -1.0f });
1396 var v2 = new Vector<float> (new float[] { 1.0f, 1.0f, 1.0f, 1.0f });
1398 var res = vector_div (v1, v1);
1405 [MethodImplAttribute (MethodImplOptions.NoInlining)]
1406 public static void vector_copyto<T> (Vector<T> v1, T[] array, int index) where T: struct {
1407 v1.CopyTo (array, index);
1410 public static int test_0_vector_byte_copyto () {
1411 var v1 = new Vector<byte> (new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16 });
1413 byte[] arr = new byte [256];
1414 vector_copyto (v1, arr, 1);
1415 for (int i = 0; i < 16; ++i)
1416 if (arr [i + 1] != (i + 1))
1418 vector_copyto (v1, arr, 240);
1420 vector_copyto (v1, arr, 241);
1422 } catch (ArgumentException) {