bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); vector<s> G(size); vector<int> Gi(size); vector<double> Gd(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); Concurrency::array<int, 1> aA(e, A.begin(), rv); Concurrency::array<s, 1> aG(e, G.begin(), rv); Concurrency::array<int, 1> aGi(e, Gi.begin(), rv); Concurrency::array<double, 1> aGd(e, Gd.begin(), rv); parallel_for_each(aA.get_extent(), [&](index<1>idx) __GPU { s* volatile ps = &aG[idx]; int * volatile pi1 = &aGi[idx]; double * volatile pd1 = &aGd[idx]; // not allowed here aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); Concurrency::array<int, 1> aA(e, A.begin(), rv); parallel_for_each(aA.get_extent(), [&](index<1>idx) __GPU { type v1; v1 = 0; type &p = v1; p = (type)1; if (!Equal(v1, (type)1)) aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); vector<int> G(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; G[i] = 1; } extent<1> e(size); array<int, 1> aA(e, A.begin(), rv); array<int, 1> *paG = new array<int, 1>(e, G.begin(), rv); parallel_for_each(aA.extent, [&](index<1>idx) __GPU { int i = (*paG)[idx]; // not allowed here if (i != 1) aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); vector<c2> Gc(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; Gc[i].i = 1; Gc[i].d = 1; Gc[i].ul = 1; Gc[i].f = 1; } extent<1> e(size); array<int, 1> aA(e, A.begin(), rv); array<c2, 1> aGc(e, Gc.begin(), rv); parallel_for_each(aA.get_extent(), [&](index<1>idx) __GPU { int *pi = NULL; void *pv1 = pi; if (pv1 != NULL) aA[idx] = 1; c1 *p = &aGc[idx]; if (!Equal(p->i, (int)1) || !Equal(p->d, (double)1) || !Equal(p->f, (float)1) || !Equal(p->ul, (unsigned long)1)) aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); array<int, 1> aA(e, A.begin(), rv); parallel_for_each(aA.get_extent().tile<1>(), [&](tiled_index<1>idx) __GPU_ONLY { tile_static int i1; i1 = 1; int *pi1 = &i1; bool *pb1 = (bool*)pi1; tile_static int i2; bool tb = *pb1; i2 = *(int *)pb1; if (i2 != 1) aA[idx] = 1; tile_static unsigned __int32 i3; i3 = 1; unsigned __int32 *pi2 = &i3; double * pd1 = (double *)pi2; double td = *pd1; tile_static unsigned __int32 i4; i4 = *(unsigned __int32 *)pd1; if (i4 != 1) aA[idx] = 1; tile_static c1 o; o.i = 1; o.d = 1; o.ul = 1; o.f = 1; tile_static bool b1; c2 *p = (c2 *)&o; if (!Equal(p->i, (int)1) || !Equal(p->d, (double)1) || !Equal(p->f, (float)1) || !Equal(p->ul, (unsigned long)1)) aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); vector<s> G1(size); vector<int> G2(size); vector<double> G3(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; G1[i].i = 2; G1[i].d = 2; G1[i].ul = 2; G1[i].f = 2; } extent<1> e(size); array<int, 1> aA(e, A.begin(), rv); array<s, 1> aG1(e, G1.begin(), rv); array<int, 1> aG2(e, G2.begin(), rv); array<double, 1> aG3(e, G3.begin(), rv); parallel_for_each(aA.get_extent(), [&](index<1>idx) __GPU { s o; o.i = 2; o.d = 2; o.ul = 2; o.f = 2; const s o2 = o; const s* ps = 0; ps = &o2; if (!Equal(ps->i, 2) || !Equal(ps->d, (double)2) || !Equal(ps->ul, (unsigned long)2) || !Equal(ps->f, (float)2)) aA[idx] = 1; const int i1 = 1; const int *pi1 = &i1; const double d1 = 1; const double *pd1 = &d1; if (!Equal(*pi1, (int)1) || !Equal(*pd1, (double)1)) aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); array<int, 1> aA(e, A.begin(), rv); parallel_for_each(aA.get_extent(), [&](index<1>idx) __GPU { s o; o.i = 2; o.d = 2; o.ul = 2; o.f = 2; const s o2 = o; const s &ps = o2; s o3 = ps; if (!Equal(o3.i, 2) || !Equal(o3.d, (double)2) || !Equal(o3.ul, (unsigned long)2) || !Equal(o3.f, (float)2)) aA[idx] = 1; const bool b1 = true; const bool &pb1 = b1; bool b2 = pb1; const int i1 = 1; const int &pi1 = i1; int i2 = pi1; const double d1 = 1; const double &pd1 = d1; double d2 = pd1; if (!Equal(b2, b1) || !Equal(i2, i1) || !Equal(d2, d1)) aA[idx] = 1; });
bool test(accelerator_view &rv) { int data[] = {0, 0, 0, 0}; vector<int> Flags(data, data + sizeof(data) / sizeof(int)); extent<1> eflags(sizeof(data) / sizeof(int)); array<int, 1> aFlag(eflags, Flags.begin(), rv); const int size = 100; vector<int> A(size); vector<c> G(size); vector<c> G2(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; G[i].i = G[i].d = G[i].ui = G[i].f = i; G2[i].i = G2[i].d = G2[i].ui = G2[i].f = i; } extent<1> e(size); extent<2> eG(10, 10); array<int, 1> aA(e, A.begin(), rv); array<c, 2> aG(eG, G.begin(), rv); array<c, 2> aG2(eG, G2.begin(), rv); parallel_for_each(aA.get_extent(), [&](index<1>idx) __GPU { c *p = NULL; if (aFlag[0] == 0) p = &aG[0][0]; else p = &aG2[0][0]; double di = 0; for (int i = 0; i < 100; i++) { if (!Equal((*p).i, (int)i) || !Equal((*p).d, di) || !Equal((*p).ui, (unsigned __int32)i) || !Equal((*p).f, (float)i)) { aA[idx] = 1; } p++; di++; } });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); array<int, 1> aA(e, A.begin(), rv); parallel_for_each(aA.extent, [&](index<1>idx) __GPU { int *p = new int; // not allowed here delete p; aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); vector<s> G(size); vector<int> Gi(size); vector<double> Gd(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); array<int, 1> aA(e, A.begin(), rv); array<s, 1> aG(e, G.begin(), rv); array<int, 1> aGi(e, Gi.begin(), rv); array<double, 1> aGd(e, Gd.begin(), rv); parallel_for_each(aA.get_extent(), [&](index<1>idx) __GPU { const s o2 = aG[idx]; const s* ps = &o2; ps->i = 1; // not allowed here ps->d = 1; ps->ul = 1; ps->f = 1; const int *pi1 = &aGi[idx]; *pi1 = 2; const double d1 = 1; const double *pd1 = &aGd[idx]; *pd1 = 2.0; aA[idx] = 1; });
bool check_bidiag(viennacl::matrix<ScalarType>& A) { const ScalarType EPS = 0.0001f; std::vector<ScalarType> aA(A.size1() * A.size2()); viennacl::fast_copy(A, &aA[0]); for(std::size_t i = 0; i < A.size1(); i++) { for(std::size_t j = 0; j < A.size2(); j++) { ScalarType val = aA[i * A.size2() + j]; if((fabs(val) > EPS) && (i != j) && ((i + 1) != j)) { std::cout << "Failed at " << i << " " << j << " " << val << std::endl; return false; } } } return true; }
bool test(accelerator_view &rv) { int data[] = {0, 0, 0, 0}; vector<int> Flags(data, data + sizeof(data) / sizeof(int)); extent<1> eflags(sizeof(data) / sizeof(int)); Concurrency::array<int, 1> aFlag(eflags, Flags.begin(), rv); const int size = 100; vector<int> A(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); Concurrency::array<int, 1> aA(e, A.begin(), rv); parallel_for_each(aA.get_extent().tile<1>(), [&](tiled_index<1>idx) __GPU_ONLY { tile_static type v1, v2; v1 = 0; v2 = 0; type *p; if (aFlag[0] == 0) p = &v1; else p = &v2; *p = (type)1; if (!Equal(v1, (type)1)) aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); vector<int> G(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; G[i] = 1; } extent<1> e(size); Concurrency::array<int, 1> aA(e, A.begin(), rv); type *p = NULL; parallel_for_each(aA.get_extent(), [&, p](index<1>idx) __GPU { type *p1 = p; // not allowed here aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); Concurrency::array<int, 1> aA(e, A.begin(), rv); parallel_for_each(aA.get_extent(), [&](index<1>idx) __GPU { volatile s &ps = (volatile s &)aA[idx]; // not allowed here volatile bool &pb1 = (volatile bool&)aA[idx]; volatile int &pi1 = (volatile int&)aA[idx];; volatile double &pd1 = (volatile double&)aA[idx]; aA[idx] = 1; });
bool test(accelerator_view &rv) { const int size = 100; vector<int> A(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); array<int, 1> aA(e, A.begin(), rv); parallel_for_each(aA.extent.tile<1>(), [&](tiled_index<1>idx) __GPU { tile_static c1 p1; // classes which have pointers are not allowed here tile_static s1 p2; tile_static u1 p3; aA[idx] = 1; });
bool test(accelerator_view &rv) { int data[] = {0, 0, 0, 0}; vector<int> Flags(data, data + sizeof(data) / sizeof(int)); extent<1> eflags(sizeof(data) / sizeof(int)); array<int, 1> aFlag(eflags, Flags.begin(), rv); const int size = 100; vector<int> A(size); for(int i = 0; i < size; i++) { A[i] = INIT_VALUE; } extent<1> e(size); array<int, 1> aA(e, A.begin(), rv); parallel_for_each(aA.extent, [&](index<1>idx) __GPU { type arr[10]; arr[0] = 0; arr[1] = 1; arr[2] = 2; arr[3] = 3; arr[4] = 4; arr[5] = 5; arr[6] = 6; arr[7] = 7; arr[8] = 8; arr[9] = 9; type *p = NULL; if (aFlag[0] == 0) p = &arr[0]; else p = &arr[1]; p++; type *p2 = p; if (!Equal(*p2, (type)1)) aA[idx] = 1; p2--; type *p3 = p2; if (!Equal(*p3, (type)0)) aA[idx] = 1; p = &arr[0]; if (aFlag[0] == 0) p2 = &arr[9]; else p2 = &arr[8]; int diff = p2 - p; if ((diff != 9) || (diff != (&arr[9] - &arr[0]))) aA[idx] = 1; p2 = p + 9; if (!Equal(*p2, (type)9)) aA[idx] = 1; });
int main(){ std::cout << "Pointer: starting unit test\n"; // int Pointer<int> a(new int(100)); Pointer<int> b(new int(200)); if(a.count() != 1) std::cout << "Pointer: unit test 1.0 failing\n"; if(b.count() != 1) std::cout << "Pointer: unit test 1.1 failing\n"; if(*a != 100) std::cout << "Pointer: unit test 1.2 failing\n"; if(*b != 200) std::cout << "Pointer: unit test 1.3 failing\n"; Pointer<int> c(a); if(a.count() != 2) std::cout << "Pointer: unit test 1.4 failing\n"; if(c.count() != 2) std::cout << "Pointer: unit test 1.5 failing\n"; if(*a != 100) std::cout << "Pointer: unit test 1.6 failing\n"; if(*c != 100) std::cout << "Pointer: unit test 1.7 failing\n"; if(a.get() != c.get()) std::cout << "Pointer: unit test 1.8 failing\n"; IPointer<int> *d = new Pointer<int>(a); if(a.count() != 3) std::cout << "Pointer: unit test 1.9 failing\n"; if(**d !=100) std::cout << "Pointer: unit test 1.10 failing\n"; delete d; if(a.count() != 2) std::cout << "Pointer: unit test 1.11 failing\n"; c = b; if(a.count() != 1) std::cout << "Pointer: unit test 1.12 failing\n"; if(b.count() != 2) std::cout << "Pointer: unit test 1.13 failing\n"; if(c.count() != 2) std::cout << "Pointer: unit test 1.14 failing\n"; if(*a != 100) std::cout << "Pointer: unit test 1.15 failing\n"; if(*b != 200) std::cout << "Pointer: unit test 1.16 failing\n"; if(*c != 200) std::cout << "Pointer: unit test 1.17 failing\n"; if(b.get() != c.get()) std::cout << "Pointer: unit test 1.18 failing\n"; a = b; if(a.count() != 3) std::cout << "Pointer: unit test 1.19 failing\n"; if(b.count() != 3) std::cout << "Pointer: unit test 1.20 failing\n"; if(c.count() != 3) std::cout << "Pointer: unit test 1.21 failing\n"; if(*a != 200) std::cout << "Pointer: unit test 1.22 failing\n"; if(*b != 200) std::cout << "Pointer: unit test 1.23 failing\n"; if(*c != 200) std::cout << "Pointer: unit test 1.24 failing\n"; if(b.get() != c.get()) std::cout << "Pointer: unit test 1.25 failing\n"; if(b.get() != a.get()) std::cout << "Pointer: unit test 1.25 failing\n"; // A Pointer<A> aA(new A(10)); Pointer<A> bA(new A(20)); if(aA.count() != 1) std::cout << "Pointer: unit test 2.0 failing\n"; if(bA.count() != 1) std::cout << "Pointer: unit test 2.1 failing\n"; if(foo(*aA) != 10) std::cout << "Pointer: unit test 2.2 failing\n"; if(foo(*bA) != 20) std::cout << "Pointer: unit test 2.3 failing\n"; if(aA->get() != 10) std::cout << "Pointer:unit test 2.4 failing\n"; if(bA->get() != 20) std::cout << "Pointer::unit test 2.5 failing\n"; Pointer<A> cA(aA); if(aA.count() != 2) std::cout << "Pointer: unit test 2.6 failing\n"; if(cA.count() != 2) std::cout << "Pointer: unit test 2.7 failing\n"; if(foo(*aA) != 10) std::cout << "Pointer: unit test 2.8 failing\n"; if(foo(*cA) != 10) std::cout << "Pointer: unit test 2.9 failing\n"; if(aA->get() != 10) std::cout << "Pointer:unit test 2.10 failing\n"; if(cA->get() != 10) std::cout << "Pointer::unit test 2.11 failing\n"; if(aA.get() != cA.get()) std::cout << "Pointer: unit test 2.12 failing\n"; IPointer<A> *dA = new Pointer<A>(aA); if(aA.count() != 3) std::cout << "Pointer: unit test 2.13 failing\n"; if(foo(**dA) != 10) std::cout << "Pointer: unit test 2.14 failing\n"; if((*dA)->get() != 10) std::cout << "Pointer: unit test 2.15 failing\n"; delete dA; if(aA.count() != 2) std::cout << "Pointer: unit test 2.16 failing\n"; cA = bA; if(aA.count() != 1) std::cout << "Pointer: unit test 2.17 failing\n"; if(bA.count() != 2) std::cout << "Pointer: unit test 2.18 failing\n"; if(cA.count() != 2) std::cout << "Pointer: unit test 2.19 failing\n"; if(foo(*aA) != 10) std::cout << "Pointer: unit test 2.20 failing\n"; if(foo(*bA) != 20) std::cout << "Pointer: unit test 2.21 failing\n"; if(foo(*cA) != 20) std::cout << "Pointer: unit test 2.22 failing\n"; if(aA->get() != 10) std::cout << "Pointer: unit test 2.23 failing\n"; if(bA->get() != 20) std::cout << "Pointer: unit test 2.24 failing\n"; if(cA->get() != 20) std::cout << "Pointer: unit test 2.25 failing\n"; if(bA.get() != cA.get()) std::cout << "Pointer: unit test 2.26 failing\n"; aA = bA; if(aA.count() != 3) std::cout << "Pointer: unit test 2.27 failing\n"; if(bA.count() != 3) std::cout << "Pointer: unit test 2.28 failing\n"; if(cA.count() != 3) std::cout << "Pointer: unit test 2.29 failing\n"; if(foo(*aA) != 20) std::cout << "Pointer: unit test 2.30 failing\n"; if(foo(*bA) != 20) std::cout << "Pointer: unit test 2.31 failing\n"; if(foo(*cA) != 20) std::cout << "Pointer: unit test 2.32 failing\n"; if(aA->get() != 20) std::cout << "Pointer: unit test 2.33 failing\n"; if(bA->get() != 20) std::cout << "Pointer: unit test 2.34 failing\n"; if(cA->get() != 20) std::cout << "Pointer: unit test 2.35 failing\n"; if(bA.get() != cA.get()) std::cout << "Pointer: unit test 2.36 failing\n"; if(bA.get() != aA.get()) std::cout << "Pointer: unit test 2.37 failing\n"; std::cout << "Pointer: unit test complete\n"; return 0; }