source: trunk/lib_ir/gen/test_llc.pytemplate.cpp @ 3985

Last change on this file since 3985 was 3985, checked in by linmengl, 5 years ago

add testcases for insert_vector_element and extract_

File size: 2.7 KB
Line 
1/******************
2 * Python template to auto gen llc test file.
3 * sudo easy_install Jinja2 to install the Jinja2 template system
4 * {{HeaderComment}}
5 */
6
7#include "utility.h"
8#include <iostream>
9#include <cstdlib>
10using namespace std;
11
12extern "C" {
13{% for name in FunctionNames %}
14  SIMD_type {{ name.c }}(SIMD_type a, SIMD_type b);
15{% endfor %}
16
17{% for x in range(0, 4) %}
18  SIMD_type insertelement_idx0_elt{{ x }}(SIMD_type a);
19  SIMD_type insertelement_idx1_elt{{ x }}(SIMD_type a);
20  SIMD_type insertelement_idx17_elt{{ x }}(SIMD_type a);
21{% endfor %}
22
23{% for x in [0, 1, 17] %}
24  short extractelement_idx{{ x }}(SIMD_type a);
25{% endfor %}
26}
27
28void fill_random(SIMD_type &a, SIMD_type &b)
29{
30  a = mvmd<32>::fill((int)rand() % 10000);
31  b = mvmd<32>::fill((int)rand() % 10000);
32}
33
34int main() {
35  SIMD_type a, b, c, d;
36  short x;
37
38  for (unsigned i = 0; i < 5; ++i) {
39    fill_random(a, b);
40
41    {% for name in FunctionNames %}
42    {% if name.flag == "" %}
43    c = {{ name.c }}(a, b);
44    d = {{ name.cxx }}(a, b);
45    if (Store2String(c,1) != Store2String(d,1)) {
46      cout << "{{ name.c }} faild." << endl;
47      return 1;
48    }
49
50    {% endif %}
51    {% endfor %}
52
53    //Shifting tests need special treatment
54    {% for name in FunctionNames %}
55    {% if name.flag == "shifting" %}
56    {% for x in [0, 1] %}
57    b = mvmd<2>::fill({{ x }});
58    c = {{ name.cxx }}<{{ x }}>(a);
59    d = {{ name.c }}(a, b);
60    if (Store2String(c,1) != Store2String(d,1)) {
61      cout << "{{ name.c }} faild." << endl;
62      return 1;
63    }
64
65    {% endfor %}
66    {% endif %}
67    {% endfor %}
68  }
69
70  //Testcases for insert/extract element
71  {% for x in range(0, 4) %}
72  a = mvmd<32>::fill4(0, 1, 0, 0);
73  b = mvmd<32>::fill4(0, 1, 0, {{ x }});
74  c = insertelement_idx0_elt{{ x }}(a);
75  if (Store2String(b,1) != Store2String(c,1)) {
76    cout << "insertelement_idx0_elt{{ x }} failed." << endl;
77    return 1;
78  }
79
80  b = mvmd<32>::fill4(0, 1, 0, {{ x }} << 2);
81  c = insertelement_idx1_elt{{ x }}(a);
82  if (Store2String(b,1) != Store2String(c,1)) {
83    cout << "insertelement_idx1_elt{{ x }} failed." << endl;
84    return 1;
85  }
86
87  b = mvmd<32>::fill4(0, 1, {{ x }} << 2, 0);
88  c = insertelement_idx17_elt{{ x }}(a);
89  if (Store2String(b,1) != Store2String(c,1)) {
90    cout << "insertelement_idx17_elt{{ x }} failed." << endl;
91    return 1;
92  }
93  {% endfor %}
94
95  a = mvmd<32>::fill4(0, 1, 0, 3);
96  x = extractelement_idx0(a);
97  if (x != 3) {
98    cout << "extractelement_idx0 failed." << endl;
99  }
100
101  a = mvmd<32>::fill4(0, 1, 0, 3 << 2);
102  x = extractelement_idx1(a);
103  if (x != 3) {
104    cout << "extractelement_idx1 failed." << endl;
105  }
106
107  a = mvmd<32>::fill4(0, 1, 3 << 2, 3);
108  x = extractelement_idx17(a);
109  if (x != 3) {
110    cout << "extractelement_idx17 failed." << endl;
111  }
112
113  return 0;
114}
115
Note: See TracBrowser for help on using the repository browser.