PageRenderTime 53ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 1ms

/src/tests/functional/func-error.cpp

https://github.com/jinhou/clBLAS
C++ | 1354 lines | 1095 code | 224 blank | 35 comment | 44 complexity | 89b4cef0486c093a07d85744daad4a1b MD5 | raw file
Possible License(s): Apache-2.0
  1. /* ************************************************************************
  2. * Copyright 2013 Advanced Micro Devices, Inc.
  3. *
  4. * Licensed under the Apache License, Version 2.0 (the "License");
  5. * you may not use this file except in compliance with the License.
  6. * You may obtain a copy of the License at
  7. *
  8. * http://www.apache.org/licenses/LICENSE-2.0
  9. *
  10. * Unless required by applicable law or agreed to in writing, software
  11. * distributed under the License is distributed on an "AS IS" BASIS,
  12. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  13. * See the License for the specific language governing permissions and
  14. * limitations under the License.
  15. * ************************************************************************/
  16. #include <gtest/gtest.h>
  17. #include <clBLAS.h>
  18. #include "blas-wrapper.h"
  19. #include "clBLAS-wrapper.h"
  20. #include "BlasBase.h"
  21. #include "blas-random.h"
  22. #include "timer.h"
  23. #include "func.h"
  24. template <typename M>
  25. class ErrorClass
  26. {
  27. M metod;
  28. protected:
  29. bool generateData();
  30. public:
  31. void error(cl_int err_etalon);
  32. // nano_time_t runRepeat(int rep, cl_int* err);
  33. };
  34. template <typename T> bool
  35. ErrorClass<T>::generateData()
  36. {
  37. metod.generateData();
  38. bool ret = metod.prepareDataToRun();
  39. if (!ret) {
  40. ::std::cerr << ">> Failed to create/enqueue buffer for a matrix."
  41. << ::std::endl
  42. << ">> Can't execute the test, because data is not transfered to GPU."
  43. << ::std::endl
  44. << ">> Test skipped." << ::std::endl;
  45. SUCCEED();
  46. }
  47. return ret;
  48. }
  49. template <typename M> void
  50. ErrorClass<M>::error(cl_int err_etalon)
  51. {
  52. metod.initDefault(1024, 1);
  53. cl_command_queue queues = metod.queues[0];
  54. if (generateData()) {
  55. switch (err_etalon) {
  56. case CL_INVALID_EVENT_WAIT_LIST:
  57. metod.inEvent = NULL;
  58. metod.inEventCount = 1;
  59. break;
  60. case CL_INVALID_EVENT:
  61. metod.outEvent = NULL;
  62. metod.inEventCount = 1;
  63. break;
  64. case CL_INVALID_CONTEXT:
  65. clReleaseContext(metod.context);
  66. break;
  67. case CL_INVALID_COMMAND_QUEUE:
  68. metod.queues[0] = NULL;
  69. break;
  70. case clblasInvalidMatA:
  71. case clblasInvalidVecX:
  72. case CL_INVALID_MEM_OBJECT:
  73. metod.bufA = NULL;
  74. metod.bufAP = NULL;
  75. metod.bufX = NULL;
  76. metod.bufY = NULL;
  77. break;
  78. case CL_INVALID_DEVICE:
  79. break;
  80. case clblasInsufficientMemMatA:
  81. case clblasInsufficientMemMatB:
  82. case clblasInsufficientMemVecX:
  83. case CL_INVALID_VALUE:
  84. metod.size = 2048;
  85. //metod.bufA = NULL;
  86. break;
  87. default:
  88. FAIL() << "Unknown Error cod " << err_etalon;
  89. }
  90. cl_int err = metod.run();
  91. metod.queues[0] = queues;
  92. ASSERT_EQ(err, err_etalon) << "clFinish()";
  93. }
  94. metod.destroy();
  95. }
  96. #ifdef DO_THEIRS
  97. // Instantiate the test
  98. TEST(ERROR, InvalidCommandQueue) {
  99. ErrorClass<GemmMetod<float> > ec;
  100. ec.error(CL_INVALID_COMMAND_QUEUE);
  101. }
  102. TEST(ERROR, InvalidEventWaitList) {
  103. ErrorClass<GemmMetod<float> > ec;
  104. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  105. }
  106. TEST(ERROR, InvalidMemObject) {
  107. ErrorClass<GemmMetod<float> > ec;
  108. ec.error(clblasInvalidMatA);
  109. }
  110. TEST(ERROR, InvalidValue) {
  111. ErrorClass<GemmMetod<float> > ec;
  112. ec.error(clblasInsufficientMemMatA);
  113. }
  114. TEST(ERROR, InvalidDevice) {
  115. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  116. if (!base->isDevSupportDoublePrecision()) {
  117. ErrorClass<GemmMetod<double> > ec;
  118. ec.error(CL_INVALID_DEVICE);
  119. }
  120. }
  121. // Instantiate the test
  122. #endif
  123. #ifdef DO_TRMV
  124. TEST(ERROR, InvalidCommandQueuetrmv) {
  125. ErrorClass<TrmvMetod<FloatComplex> > ec;
  126. ec.error(CL_INVALID_COMMAND_QUEUE);
  127. }
  128. TEST(ERROR, InvalidEventWaitListtrmv) {
  129. ErrorClass<TrmvMetod<FloatComplex> > ec;
  130. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  131. }
  132. TEST(ERROR, InvalidMemObjecttrmv) {
  133. ErrorClass<TrmvMetod<FloatComplex> > ec;
  134. ec.error(clblasInvalidMatA);
  135. }
  136. TEST(ERROR, InvalidValuetrmv) {
  137. ErrorClass<TrmvMetod<FloatComplex> > ec;
  138. ec.error(clblasInsufficientMemMatA);
  139. }
  140. TEST(ERROR, InvalidDevicetrmv) {
  141. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  142. if (!base->isDevSupportDoublePrecision()) {
  143. ErrorClass<TrmvMetod<cl_double> > ec;
  144. ec.error(CL_INVALID_DEVICE);
  145. }
  146. }
  147. #endif
  148. #ifdef DO_TRSV
  149. TEST(ERROR, InvalidCommandQueue_trsv) {
  150. ErrorClass<TrsvMetod<FloatComplex> > ec;
  151. ec.error(CL_INVALID_COMMAND_QUEUE);
  152. }
  153. TEST(ERROR, InvalidEventWaitList_trsv) {
  154. ErrorClass<TrsvMetod<FloatComplex> > ec;
  155. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  156. }
  157. TEST(ERROR, InvalidMemObject_trsv) {
  158. ErrorClass<TrsvMetod<FloatComplex> > ec;
  159. ec.error(clblasInvalidMatA);
  160. }
  161. TEST(ERROR, InvalidValue_trsv) {
  162. ErrorClass<TrsvMetod<FloatComplex> > ec;
  163. ec.error(clblasInsufficientMemMatA);
  164. }
  165. TEST(ERROR, InvalidDevice_trsv) {
  166. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  167. if (!base->isDevSupportDoublePrecision()) {
  168. ErrorClass<TrsvMetod<double> > ec;
  169. ec.error(CL_INVALID_DEVICE);
  170. }
  171. }
  172. #endif
  173. #ifdef DO_TPSV
  174. TEST(ERROR, InvalidCommandQueue_tpsv) {
  175. ErrorClass<TpsvMetod<FloatComplex> > ec;
  176. ec.error(CL_INVALID_COMMAND_QUEUE);
  177. }
  178. TEST(ERROR, InvalidEventWaitList_tpsv) {
  179. ErrorClass<TpsvMetod<FloatComplex> > ec;
  180. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  181. }
  182. TEST(ERROR, InvalidMemObject_tpsv) {
  183. ErrorClass<TpsvMetod<FloatComplex> > ec;
  184. ec.error(clblasInvalidMatA);
  185. }
  186. TEST(ERROR, InvalidValue_tpsv) {
  187. ErrorClass<TpsvMetod<FloatComplex> > ec;
  188. ec.error(clblasInsufficientMemMatA);
  189. }
  190. TEST(ERROR, InvalidDevice_tpsv) {
  191. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  192. if (!base->isDevSupportDoublePrecision()) {
  193. ErrorClass<TpsvMetod<double> > ec;
  194. ec.error(CL_INVALID_DEVICE);
  195. }
  196. }
  197. #endif
  198. #ifdef DO_TPMV
  199. TEST(ERROR, InvalidCommandQueue_tpmv) {
  200. ErrorClass<TpmvMetod<FloatComplex> > ec;
  201. ec.error(CL_INVALID_COMMAND_QUEUE);
  202. }
  203. TEST(ERROR, InvalidEventWaitList_tpmv) {
  204. ErrorClass<TpmvMetod<FloatComplex> > ec;
  205. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  206. }
  207. TEST(ERROR, InvalidMemObject_tpmv) {
  208. ErrorClass<TpmvMetod<FloatComplex> > ec;
  209. ec.error(clblasInvalidMatA);
  210. }
  211. TEST(ERROR, InvalidValue_tpmv) {
  212. ErrorClass<TpmvMetod<FloatComplex> > ec;
  213. ec.error(clblasInsufficientMemMatA);
  214. }
  215. TEST(ERROR, InvalidDevice_tpmv) {
  216. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  217. if (!base->isDevSupportDoublePrecision()) {
  218. ErrorClass<TpmvMetod<double> > ec;
  219. ec.error(CL_INVALID_DEVICE);
  220. }
  221. }
  222. #endif
  223. #ifdef DO_SYMM
  224. TEST(ERROR, InvalidCommandQueuesymm) {
  225. ErrorClass<SymmMetod<FloatComplex> > ec;
  226. ec.error(CL_INVALID_COMMAND_QUEUE);
  227. }
  228. TEST(ERROR, InvalidEventWaitListsymm) {
  229. ErrorClass<SymmMetod<FloatComplex> > ec;
  230. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  231. }
  232. TEST(ERROR, InvalidMemObjectsymm) {
  233. ErrorClass<SymmMetod<FloatComplex> > ec;
  234. ec.error(clblasInvalidMatA);
  235. }
  236. TEST(ERROR, InvalidValuesymm) {
  237. ErrorClass<SymmMetod<FloatComplex> > ec;
  238. ec.error(clblasInsufficientMemMatB);
  239. }
  240. TEST(ERROR, InvalidDevicesymm) {
  241. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  242. if (!base->isDevSupportDoublePrecision()) {
  243. ErrorClass<SymmMetod<cl_double> > ec;
  244. ec.error(CL_INVALID_DEVICE);
  245. }
  246. }
  247. #endif
  248. #ifdef DO_SYR
  249. TEST(ERROR, InvalidCommandQueuesyr) {
  250. ErrorClass<SyrMetod<cl_float> > ec;
  251. ec.error(CL_INVALID_COMMAND_QUEUE);
  252. }
  253. TEST(ERROR, InvalidEventWaitListsyr) {
  254. ErrorClass<SyrMetod<cl_float> > ec;
  255. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  256. }
  257. TEST(ERROR, InvalidMemObjectsyr) {
  258. ErrorClass<SyrMetod<cl_float> > ec;
  259. ec.error(clblasInvalidMatA);
  260. }
  261. TEST(ERROR, InvalidValuesyr) {
  262. ErrorClass<SyrMetod<cl_float> > ec;
  263. ec.error(clblasInsufficientMemMatA);
  264. }
  265. TEST(ERROR, InvalidDevicesyr) {
  266. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  267. if (!base->isDevSupportDoublePrecision()) {
  268. ErrorClass<SyrMetod<cl_double> > ec;
  269. ec.error(CL_INVALID_DEVICE);
  270. }
  271. }
  272. #endif
  273. #ifdef DO_SPR
  274. TEST(ERROR, InvalidCommandQueuespr) {
  275. ErrorClass<SprMetod<cl_float> > ec;
  276. ec.error(CL_INVALID_COMMAND_QUEUE);
  277. }
  278. TEST(ERROR, InvalidEventWaitListspr) {
  279. ErrorClass<SprMetod<cl_float> > ec;
  280. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  281. }
  282. TEST(ERROR, InvalidMemObjectspr) {
  283. ErrorClass<SprMetod<cl_float> > ec;
  284. ec.error(clblasInvalidMatA);
  285. }
  286. TEST(ERROR, InvalidValuespr) {
  287. ErrorClass<SprMetod<cl_float> > ec;
  288. ec.error(clblasInsufficientMemMatA);
  289. }
  290. TEST(ERROR, InvalidDevicespr) {
  291. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  292. if (!base->isDevSupportDoublePrecision()) {
  293. ErrorClass<SprMetod<cl_double> > ec;
  294. ec.error(CL_INVALID_DEVICE);
  295. }
  296. }
  297. #endif
  298. #ifdef DO_SYR2
  299. TEST(ERROR, InvalidCommandQueuesyr2) {
  300. ErrorClass<Syr2Metod<cl_float> > ec;
  301. ec.error(CL_INVALID_COMMAND_QUEUE);
  302. }
  303. TEST(ERROR, InvalidEventWaitListsyr2) {
  304. ErrorClass<Syr2Metod<cl_float> > ec;
  305. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  306. }
  307. TEST(ERROR, InvalidMemObjectsyr2) {
  308. ErrorClass<Syr2Metod<cl_float> > ec;
  309. ec.error(clblasInvalidMatA);
  310. }
  311. TEST(ERROR, InvalidValuesyr2) {
  312. ErrorClass<Syr2Metod<cl_float> > ec;
  313. ec.error(clblasInsufficientMemMatA);
  314. }
  315. TEST(ERROR, InvalidDevicesyr2) {
  316. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  317. if (!base->isDevSupportDoublePrecision()) {
  318. ErrorClass<Syr2Metod<cl_double> > ec;
  319. ec.error(CL_INVALID_DEVICE);
  320. }
  321. }
  322. #endif
  323. #ifdef DO_GER
  324. TEST(ERROR, InvalidCommandQueueger) {
  325. ErrorClass<GerMetod<FloatComplex> > ec;
  326. ec.error(CL_INVALID_COMMAND_QUEUE);
  327. }
  328. TEST(ERROR, InvalidEventWaitListger) {
  329. ErrorClass<GerMetod<FloatComplex> > ec;
  330. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  331. }
  332. TEST(ERROR, InvalidMemObjectger) {
  333. ErrorClass<GerMetod<FloatComplex> > ec;
  334. ec.error(clblasInvalidMatA);
  335. }
  336. TEST(ERROR, InvalidValueger) {
  337. ErrorClass<GerMetod<FloatComplex> > ec;
  338. ec.error(clblasInsufficientMemMatA);
  339. }
  340. TEST(ERROR, InvalidDeviceger) {
  341. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  342. if (!base->isDevSupportDoublePrecision()) {
  343. ErrorClass<GerMetod<cl_double> > ec;
  344. ec.error(CL_INVALID_DEVICE);
  345. }
  346. }
  347. #endif
  348. #ifdef DO_GERC
  349. TEST(ERROR, InvalidCommandQueuegerc) {
  350. ErrorClass<GercMetod<FloatComplex> > ec;
  351. ec.error(CL_INVALID_COMMAND_QUEUE);
  352. }
  353. TEST(ERROR, InvalidEventWaitListgerc) {
  354. ErrorClass<GercMetod<FloatComplex> > ec;
  355. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  356. }
  357. TEST(ERROR, InvalidMemObjectgerc) {
  358. ErrorClass<GercMetod<FloatComplex> > ec;
  359. ec.error(clblasInvalidMatA);
  360. }
  361. TEST(ERROR, InvalidValuegerc) {
  362. ErrorClass<GercMetod<FloatComplex> > ec;
  363. ec.error(clblasInsufficientMemMatA);
  364. }
  365. TEST(ERROR, InvalidDevicegerc) {
  366. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  367. if (!base->isDevSupportDoublePrecision()) {
  368. ErrorClass<GercMetod<DoubleComplex> > ec;
  369. ec.error(CL_INVALID_DEVICE);
  370. }
  371. }
  372. #endif
  373. #ifdef DO_HER
  374. TEST(ERROR, InvalidCommandQueueher) {
  375. ErrorClass<HerMetod<FloatComplex> > ec;
  376. ec.error(CL_INVALID_COMMAND_QUEUE);
  377. }
  378. TEST(ERROR, InvalidEventWaitListher) {
  379. ErrorClass<HerMetod<FloatComplex> > ec;
  380. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  381. }
  382. TEST(ERROR, InvalidMemObjecther) {
  383. ErrorClass<HerMetod<FloatComplex> > ec;
  384. ec.error(clblasInvalidMatA);
  385. }
  386. TEST(ERROR, InvalidValueher) {
  387. ErrorClass<HerMetod<DoubleComplex> > ec;
  388. ec.error(clblasInsufficientMemMatA);
  389. }
  390. TEST(ERROR, InvalidDeviceher) {
  391. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  392. if (!base->isDevSupportDoublePrecision()) {
  393. ErrorClass<HerMetod<DoubleComplex> > ec;
  394. ec.error(CL_INVALID_DEVICE);
  395. }
  396. }
  397. #endif
  398. #ifdef DO_HER2
  399. TEST(ERROR, InvalidCommandQueueher2) {
  400. ErrorClass<Her2Metod<FloatComplex> > ec;
  401. ec.error(CL_INVALID_COMMAND_QUEUE);
  402. }
  403. TEST(ERROR, InvalidEventWaitListher2) {
  404. ErrorClass<Her2Metod<FloatComplex> > ec;
  405. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  406. }
  407. TEST(ERROR, InvalidMemObjecther2) {
  408. ErrorClass<Her2Metod<FloatComplex> > ec;
  409. ec.error(clblasInvalidMatA);
  410. }
  411. TEST(ERROR, InvalidValueher2) {
  412. ErrorClass<Her2Metod<DoubleComplex> > ec;
  413. ec.error(clblasInsufficientMemMatA);
  414. }
  415. TEST(ERROR, InvalidDeviceher2) {
  416. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  417. if (!base->isDevSupportDoublePrecision()) {
  418. ErrorClass<Her2Metod<DoubleComplex> > ec;
  419. ec.error(CL_INVALID_DEVICE);
  420. }
  421. }
  422. #endif
  423. #ifdef DO_HEMM
  424. TEST(ERROR, InvalidCommandQueuehemm) {
  425. ErrorClass<HemmMetod<FloatComplex> > ec;
  426. ec.error(CL_INVALID_COMMAND_QUEUE);
  427. }
  428. TEST(ERROR, InvalidEventWaitListhemm) {
  429. ErrorClass<HemmMetod<FloatComplex> > ec;
  430. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  431. }
  432. TEST(ERROR, InvalidMemObjecthemm) {
  433. ErrorClass<HemmMetod<FloatComplex> > ec;
  434. ec.error(clblasInvalidMatA);
  435. }
  436. TEST(ERROR, InvalidValuehemm) {
  437. ErrorClass<HemmMetod<DoubleComplex> > ec;
  438. ec.error(clblasInsufficientMemMatB);
  439. }
  440. TEST(ERROR, InvalidDevicehemm) {
  441. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  442. if (!base->isDevSupportDoublePrecision()) {
  443. ErrorClass<HemmMetod<DoubleComplex> > ec;
  444. ec.error(CL_INVALID_DEVICE);
  445. }
  446. }
  447. #endif
  448. #ifdef DO_HEMV
  449. TEST(ERROR, InvalidCommandQueuehemv) {
  450. ErrorClass<HemvMetod<FloatComplex> > ec;
  451. ec.error(CL_INVALID_COMMAND_QUEUE);
  452. }
  453. TEST(ERROR, InvalidEventWaitListhemv) {
  454. ErrorClass<HemvMetod<FloatComplex> > ec;
  455. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  456. }
  457. TEST(ERROR, InvalidMemObjecthemv) {
  458. ErrorClass<HemvMetod<FloatComplex> > ec;
  459. ec.error(clblasInvalidMatA);
  460. }
  461. TEST(ERROR, InvalidValuehemv) {
  462. ErrorClass<HemvMetod<DoubleComplex> > ec;
  463. ec.error(clblasInsufficientMemMatA);
  464. }
  465. TEST(ERROR, InvalidDevicehemv) {
  466. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  467. if (!base->isDevSupportDoublePrecision()) {
  468. ErrorClass<HemvMetod<DoubleComplex> > ec;
  469. ec.error(CL_INVALID_DEVICE);
  470. }
  471. }
  472. #endif
  473. #ifdef DO_HERK
  474. TEST(ERROR, InvalidCommandQueueherk) {
  475. ErrorClass<HerkMetod<FloatComplex> > ec;
  476. ec.error(CL_INVALID_COMMAND_QUEUE);
  477. }
  478. TEST(ERROR, InvalidEventWaitListherk) {
  479. ErrorClass<HerkMetod<FloatComplex> > ec;
  480. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  481. }
  482. TEST(ERROR, InvalidMemObjectherk) {
  483. ErrorClass<HerkMetod<FloatComplex> > ec;
  484. ec.error(clblasInvalidMatA);
  485. }
  486. TEST(ERROR, InvalidValueherk) {
  487. ErrorClass<HerkMetod<DoubleComplex> > ec;
  488. ec.error(clblasInsufficientMemMatA);
  489. }
  490. TEST(ERROR, InvalidDeviceherk) {
  491. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  492. if (!base->isDevSupportDoublePrecision()) {
  493. ErrorClass<HerkMetod<DoubleComplex> > ec;
  494. ec.error(CL_INVALID_DEVICE);
  495. }
  496. }
  497. #endif
  498. #ifdef DO_HPMV
  499. TEST(ERROR, InvalidCommandQueuehpmv) {
  500. ErrorClass<HpmvMetod<FloatComplex> > ec;
  501. ec.error(CL_INVALID_COMMAND_QUEUE);
  502. }
  503. TEST(ERROR, InvalidEventWaitListhpmv) {
  504. ErrorClass<HpmvMetod<FloatComplex> > ec;
  505. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  506. }
  507. TEST(ERROR, InvalidMemObjecthpmv) {
  508. ErrorClass<HpmvMetod<FloatComplex> > ec;
  509. ec.error(clblasInvalidMatA);
  510. }
  511. TEST(ERROR, InvalidValuehpmv) {
  512. ErrorClass<HpmvMetod<DoubleComplex> > ec;
  513. ec.error(clblasInsufficientMemMatA);
  514. }
  515. TEST(ERROR, InvalidDevicehpmv) {
  516. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  517. if (!base->isDevSupportDoublePrecision()) {
  518. ErrorClass<HpmvMetod<DoubleComplex> > ec;
  519. ec.error(CL_INVALID_DEVICE);
  520. }
  521. }
  522. #endif
  523. #ifdef DO_SPMV
  524. TEST(ERROR, InvalidCommandQueuespmv) {
  525. ErrorClass<SpmvMetod<cl_float> > ec;
  526. ec.error(CL_INVALID_COMMAND_QUEUE);
  527. }
  528. TEST(ERROR, InvalidEventWaitListspmv) {
  529. ErrorClass<SpmvMetod<cl_float> > ec;
  530. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  531. }
  532. TEST(ERROR, InvalidMemObjectspmv) {
  533. ErrorClass<SpmvMetod<cl_float> > ec;
  534. ec.error(clblasInvalidMatA);
  535. }
  536. TEST(ERROR, InvalidValuespmv) {
  537. ErrorClass<SpmvMetod<cl_double> > ec;
  538. ec.error(clblasInsufficientMemMatA);
  539. }
  540. TEST(ERROR, InvalidDevicespmv) {
  541. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  542. if (!base->isDevSupportDoublePrecision()) {
  543. ErrorClass<SpmvMetod<cl_double> > ec;
  544. ec.error(CL_INVALID_DEVICE);
  545. }
  546. }
  547. #endif
  548. #ifdef DO_SPR2
  549. TEST(ERROR, InvalidCommandQueuespr2) {
  550. ErrorClass<Spr2Metod<cl_float> > ec;
  551. ec.error(CL_INVALID_COMMAND_QUEUE);
  552. }
  553. TEST(ERROR, InvalidEventWaitListspr2) {
  554. ErrorClass<Spr2Metod<cl_float> > ec;
  555. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  556. }
  557. TEST(ERROR, InvalidMemObjectspr2) {
  558. ErrorClass<Spr2Metod<cl_float> > ec;
  559. ec.error(clblasInvalidMatA);
  560. }
  561. TEST(ERROR, InvalidValuespr2) {
  562. ErrorClass<Spr2Metod<cl_float> > ec;
  563. ec.error(clblasInsufficientMemMatA);
  564. }
  565. TEST(ERROR, InvalidDevicespr2) {
  566. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  567. if (!base->isDevSupportDoublePrecision()) {
  568. ErrorClass<Spr2Metod<cl_double> > ec;
  569. ec.error(CL_INVALID_DEVICE);
  570. }
  571. }
  572. #endif
  573. #ifdef DO_HPR
  574. TEST(ERROR, InvalidCommandQueuehpr) {
  575. ErrorClass<HprMetod<FloatComplex> > ec;
  576. ec.error(CL_INVALID_COMMAND_QUEUE);
  577. }
  578. TEST(ERROR, InvalidEventWaitListhpr) {
  579. ErrorClass<HprMetod<FloatComplex> > ec;
  580. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  581. }
  582. TEST(ERROR, InvalidMemObjecthpr) {
  583. ErrorClass<HprMetod<FloatComplex> > ec;
  584. ec.error(clblasInvalidMatA);
  585. }
  586. TEST(ERROR, InvalidValuehpr) {
  587. ErrorClass<HprMetod<DoubleComplex> > ec;
  588. ec.error(clblasInsufficientMemMatA);
  589. }
  590. TEST(ERROR, InvalidDevicehpr) {
  591. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  592. if (!base->isDevSupportDoublePrecision()) {
  593. ErrorClass<HprMetod<DoubleComplex> > ec;
  594. ec.error(CL_INVALID_DEVICE);
  595. }
  596. }
  597. #endif
  598. #ifdef DO_HPR2
  599. TEST(ERROR, InvalidCommandQueuehpr2) {
  600. ErrorClass<Hpr2Metod<FloatComplex> > ec;
  601. ec.error(CL_INVALID_COMMAND_QUEUE);
  602. }
  603. TEST(ERROR, InvalidEventWaitListhpr2) {
  604. ErrorClass<Hpr2Metod<FloatComplex> > ec;
  605. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  606. }
  607. TEST(ERROR, InvalidMemObjecthpr2) {
  608. ErrorClass<Hpr2Metod<FloatComplex> > ec;
  609. ec.error(clblasInvalidMatA);
  610. }
  611. TEST(ERROR, InvalidValuehpr2) {
  612. ErrorClass<Hpr2Metod<DoubleComplex> > ec;
  613. ec.error(clblasInsufficientMemMatA);
  614. }
  615. TEST(ERROR, InvalidDevicehpr2) {
  616. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  617. if (!base->isDevSupportDoublePrecision()) {
  618. ErrorClass<Hpr2Metod<DoubleComplex> > ec;
  619. ec.error(CL_INVALID_DEVICE);
  620. }
  621. }
  622. #endif
  623. #ifdef DO_GBMV
  624. TEST(ERROR, InvalidCommandQueueGBMV) {
  625. ErrorClass<GbmvMetod<cl_float> > ec;
  626. ec.error(CL_INVALID_COMMAND_QUEUE);
  627. }
  628. TEST(ERROR, InvalidEventWaitListGBMV) {
  629. ErrorClass<GbmvMetod<cl_float> > ec;
  630. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  631. }
  632. TEST(ERROR, InvalidMemObjectGBMV) {
  633. ErrorClass<GbmvMetod<cl_float> > ec;
  634. ec.error(clblasInvalidMatA);
  635. }
  636. TEST(ERROR, InvalidValueGBMV) {
  637. ErrorClass<GbmvMetod<cl_double> > ec;
  638. ec.error(clblasInsufficientMemMatA);
  639. }
  640. TEST(ERROR, InvalidDeviceGBMV) {
  641. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  642. if (!base->isDevSupportDoublePrecision()) {
  643. ErrorClass<GbmvMetod<cl_double> > ec;
  644. ec.error(CL_INVALID_DEVICE);
  645. }
  646. }
  647. #endif
  648. #ifdef DO_SBMV
  649. TEST(ERROR, InvalidCommandQueuesbmv) {
  650. ErrorClass<SbmvMetod<cl_float> > ec;
  651. ec.error(CL_INVALID_COMMAND_QUEUE);
  652. }
  653. TEST(ERROR, InvalidEventWaitListsbmv) {
  654. ErrorClass<SbmvMetod<cl_float> > ec;
  655. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  656. }
  657. TEST(ERROR, InvalidMemObjectsbmv) {
  658. ErrorClass<SbmvMetod<cl_float> > ec;
  659. ec.error(clblasInvalidMatA);
  660. }
  661. TEST(ERROR, InvalidValuesbmv) {
  662. ErrorClass<SbmvMetod<cl_float> > ec;
  663. ec.error(clblasInsufficientMemMatA);
  664. }
  665. TEST(ERROR, InvalidDevicesbmv) {
  666. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  667. if (!base->isDevSupportDoublePrecision()) {
  668. ErrorClass<SbmvMetod<cl_double> > ec;
  669. ec.error(CL_INVALID_DEVICE);
  670. }
  671. }
  672. #endif
  673. #ifdef DO_HBMV
  674. TEST(ERROR, InvalidCommandQueuehbmv) {
  675. ErrorClass<HbmvMetod<FloatComplex> > ec;
  676. ec.error(CL_INVALID_COMMAND_QUEUE);
  677. }
  678. TEST(ERROR, InvalidEventWaitListhbmv) {
  679. ErrorClass<HbmvMetod<FloatComplex> > ec;
  680. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  681. }
  682. TEST(ERROR, InvalidMemObjecthbmv) {
  683. ErrorClass<HbmvMetod<FloatComplex> > ec;
  684. ec.error(clblasInvalidMatA);
  685. }
  686. TEST(ERROR, InvalidValuehbmv) {
  687. ErrorClass<HbmvMetod<FloatComplex> > ec;
  688. ec.error(clblasInsufficientMemMatA);
  689. }
  690. TEST(ERROR, InvalidDevicehbmv) {
  691. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  692. if (!base->isDevSupportDoublePrecision()) {
  693. ErrorClass<HbmvMetod<DoubleComplex> > ec;
  694. ec.error(CL_INVALID_DEVICE);
  695. }
  696. }
  697. #endif
  698. #ifdef DO_TBMV
  699. TEST(ERROR, InvalidCommandQueueTBMV) {
  700. ErrorClass<TbmvMetod<cl_float> > ec;
  701. ec.error(CL_INVALID_COMMAND_QUEUE);
  702. }
  703. TEST(ERROR, InvalidEventWaitListTBMV) {
  704. ErrorClass<TbmvMetod<cl_float> > ec;
  705. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  706. }
  707. TEST(ERROR, InvalidMemObjectTBMV) {
  708. ErrorClass<TbmvMetod<cl_float> > ec;
  709. ec.error(clblasInvalidMatA);
  710. }
  711. TEST(ERROR, InvalidValueTBMV) {
  712. ErrorClass<TbmvMetod<cl_double> > ec;
  713. ec.error(clblasInsufficientMemMatA);
  714. }
  715. TEST(ERROR, InvalidDeviceTBMV) {
  716. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  717. if (!base->isDevSupportDoublePrecision()) {
  718. ErrorClass<TbmvMetod<cl_double> > ec;
  719. ec.error(CL_INVALID_DEVICE);
  720. }
  721. }
  722. #endif
  723. #ifdef DO_TBSV
  724. TEST(ERROR, InvalidCommandQueueTBSV) {
  725. ErrorClass<TbsvMetod<cl_float> > ec;
  726. ec.error(CL_INVALID_COMMAND_QUEUE);
  727. }
  728. TEST(ERROR, InvalidEventWaitListTBSV) {
  729. ErrorClass<TbsvMetod<cl_float> > ec;
  730. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  731. }
  732. TEST(ERROR, InvalidMemObjectTBSV) {
  733. ErrorClass<TbsvMetod<cl_float> > ec;
  734. ec.error(clblasInvalidMatA);
  735. }
  736. TEST(ERROR, InvalidValueTBSV) {
  737. ErrorClass<TbsvMetod<cl_double> > ec;
  738. ec.error(clblasInsufficientMemVecX);
  739. }
  740. TEST(ERROR, InvalidDeviceTBSV) {
  741. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  742. if (!base->isDevSupportDoublePrecision()) {
  743. ErrorClass<TbsvMetod<cl_double> > ec;
  744. ec.error(CL_INVALID_DEVICE);
  745. }
  746. }
  747. #endif
  748. #ifdef DO_HER2K
  749. TEST(ERROR, InvalidCommandQueueher2k) {
  750. ErrorClass<Her2kMetod<FloatComplex> > ec;
  751. ec.error(CL_INVALID_COMMAND_QUEUE);
  752. }
  753. TEST(ERROR, InvalidEventWaitListher2k) {
  754. ErrorClass<Her2kMetod<FloatComplex> > ec;
  755. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  756. }
  757. TEST(ERROR, InvalidMemObjecther2k) {
  758. ErrorClass<Her2kMetod<FloatComplex> > ec;
  759. ec.error(clblasInvalidMatA);
  760. }
  761. TEST(ERROR, InvalidValueher2k) {
  762. ErrorClass<Her2kMetod<DoubleComplex> > ec;
  763. ec.error(clblasInsufficientMemMatA);
  764. }
  765. TEST(ERROR, InvalidDeviceher2k) {
  766. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  767. if (!base->isDevSupportDoublePrecision()) {
  768. ErrorClass<Her2kMetod<DoubleComplex> > ec;
  769. ec.error(CL_INVALID_DEVICE);
  770. }
  771. }
  772. #endif
  773. #ifdef DO_SCAL
  774. TEST(ERROR, InvalidCommandQueuescal) {
  775. ErrorClass<ScalMetod<float> > ec;
  776. ec.error(CL_INVALID_COMMAND_QUEUE);
  777. }
  778. TEST(ERROR, InvalidEventWaitListscal) {
  779. ErrorClass<ScalMetod<double> > ec;
  780. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  781. }
  782. TEST(ERROR, InvalidMemObjectscal) {
  783. ErrorClass<ScalMetod<FloatComplex> > ec;
  784. ec.error(clblasInvalidVecX);
  785. }
  786. TEST(ERROR, InvalidValuescal) {
  787. ErrorClass<ScalMetod<DoubleComplex> > ec;
  788. ec.error(clblasInsufficientMemVecX);
  789. }
  790. TEST(ERROR, InvalidDevicescal) {
  791. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  792. if (!base->isDevSupportDoublePrecision()) {
  793. ErrorClass<ScalMetod<DoubleComplex> > ec;
  794. ec.error(CL_INVALID_DEVICE);
  795. }
  796. }
  797. #endif
  798. #ifdef DO_SSCAL
  799. TEST(ERROR, InvalidCommandQueuesscal) {
  800. ErrorClass<SscalMetod<FloatComplex> > ec;
  801. ec.error(CL_INVALID_COMMAND_QUEUE);
  802. }
  803. TEST(ERROR, InvalidEventWaitListsscal) {
  804. ErrorClass<SscalMetod<DoubleComplex> > ec;
  805. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  806. }
  807. TEST(ERROR, InvalidMemObjectsscal) {
  808. ErrorClass<SscalMetod<FloatComplex> > ec;
  809. ec.error(clblasInvalidVecX);
  810. }
  811. TEST(ERROR, InvalidValuesscal) {
  812. ErrorClass<SscalMetod<DoubleComplex> > ec;
  813. ec.error(clblasInsufficientMemVecX);
  814. }
  815. TEST(ERROR, InvalidDevicesscal) {
  816. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  817. if (!base->isDevSupportDoublePrecision()) {
  818. ErrorClass<SscalMetod<DoubleComplex> > ec;
  819. ec.error(CL_INVALID_DEVICE);
  820. }
  821. }
  822. #endif
  823. #ifdef DO_SWAP
  824. TEST(ERROR, InvalidCommandQueueswap) {
  825. ErrorClass<SwapMetod<float> > ec;
  826. ec.error(CL_INVALID_COMMAND_QUEUE);
  827. }
  828. TEST(ERROR, InvalidEventWaitListswap) {
  829. ErrorClass<SwapMetod<double> > ec;
  830. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  831. }
  832. TEST(ERROR, InvalidMemObjectswap) {
  833. ErrorClass<SwapMetod<FloatComplex> > ec;
  834. ec.error(clblasInvalidVecX);
  835. }
  836. TEST(ERROR, InvalidValueswap) {
  837. ErrorClass<SwapMetod<DoubleComplex> > ec;
  838. ec.error(clblasInsufficientMemVecX);
  839. }
  840. TEST(ERROR, InvalidDeviceswap) {
  841. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  842. if (!base->isDevSupportDoublePrecision()) {
  843. ErrorClass<SwapMetod<DoubleComplex> > ec;
  844. ec.error(CL_INVALID_DEVICE);
  845. }
  846. }
  847. #endif
  848. #ifdef DO_COPY
  849. TEST(ERROR, InvalidCommandQueuecopy) {
  850. ErrorClass<CopyMetod<float> > ec;
  851. ec.error(CL_INVALID_COMMAND_QUEUE);
  852. }
  853. TEST(ERROR, InvalidEventWaitListcopy) {
  854. ErrorClass<CopyMetod<double> > ec;
  855. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  856. }
  857. TEST(ERROR, InvalidMemObjectcopy) {
  858. ErrorClass<CopyMetod<FloatComplex> > ec;
  859. ec.error(clblasInvalidVecX);
  860. }
  861. TEST(ERROR, InvalidValuecopy) {
  862. ErrorClass<CopyMetod<DoubleComplex> > ec;
  863. ec.error(clblasInsufficientMemVecX);
  864. }
  865. TEST(ERROR, InvalidDevicecopy) {
  866. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  867. if (!base->isDevSupportDoublePrecision()) {
  868. ErrorClass<CopyMetod<DoubleComplex> > ec;
  869. ec.error(CL_INVALID_DEVICE);
  870. }
  871. }
  872. #endif
  873. #ifdef DO_AXPY
  874. TEST(ERROR, InvalidCommandQueueaxpy) {
  875. ErrorClass<AxpyMetod<float> > ec;
  876. ec.error(CL_INVALID_COMMAND_QUEUE);
  877. }
  878. TEST(ERROR, InvalidEventWaitListaxpy) {
  879. ErrorClass<AxpyMetod<double> > ec;
  880. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  881. }
  882. TEST(ERROR, InvalidMemObjectaxpy) {
  883. ErrorClass<AxpyMetod<FloatComplex> > ec;
  884. ec.error(clblasInvalidVecX);
  885. }
  886. TEST(ERROR, InvalidValueaxpy) {
  887. ErrorClass<AxpyMetod<DoubleComplex> > ec;
  888. ec.error(clblasInsufficientMemVecX);
  889. }
  890. TEST(ERROR, InvalidDeviceaxpy) {
  891. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  892. if (!base->isDevSupportDoublePrecision()) {
  893. ErrorClass<AxpyMetod<DoubleComplex> > ec;
  894. ec.error(CL_INVALID_DEVICE);
  895. }
  896. }
  897. #endif
  898. //DOT
  899. #ifdef DO_DOT
  900. TEST(ERROR, InvalidCommandQueuedot) {
  901. ErrorClass<DotMetod<cl_float> > ec;
  902. ec.error(CL_INVALID_COMMAND_QUEUE);
  903. }
  904. TEST(ERROR, InvalidEventWaitListdot) {
  905. ErrorClass<DotMetod<cl_double> > ec;
  906. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  907. }
  908. TEST(ERROR, InvalidMemObjectdot) {
  909. ErrorClass<DotMetod<FloatComplex> > ec;
  910. ec.error(clblasInvalidVecX);
  911. }
  912. TEST(ERROR, InvalidValuedot) {
  913. ErrorClass<DotMetod<DoubleComplex> > ec;
  914. ec.error(clblasInsufficientMemVecX);
  915. }
  916. TEST(ERROR, InvalidDevicedot) {
  917. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  918. if (!base->isDevSupportDoublePrecision()) {
  919. ErrorClass<DotMetod<DoubleComplex> > ec;
  920. ec.error(CL_INVALID_DEVICE);
  921. }
  922. }
  923. #endif
  924. #ifdef DO_ASUM
  925. TEST(ERROR, InvalidCommandQueueasum) {
  926. ErrorClass<AsumMetod<cl_float> > ec;
  927. ec.error(CL_INVALID_COMMAND_QUEUE);
  928. }
  929. TEST(ERROR, InvalidEventWaitListasum) {
  930. ErrorClass<AsumMetod<cl_double> > ec;
  931. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  932. }
  933. TEST(ERROR, InvalidMemObjectasum) {
  934. ErrorClass<AsumMetod<FloatComplex> > ec;
  935. ec.error(clblasInvalidVecX);
  936. }
  937. TEST(ERROR, InvalidValueasum) {
  938. ErrorClass<AsumMetod<DoubleComplex> > ec;
  939. ec.error(clblasInsufficientMemVecX);
  940. }
  941. TEST(ERROR, InvalidDeviceasum) {
  942. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  943. if (!base->isDevSupportDoublePrecision()) {
  944. ErrorClass<AsumMetod<DoubleComplex> > ec;
  945. ec.error(CL_INVALID_DEVICE);
  946. }
  947. }
  948. #endif
  949. #ifdef DO_iAMAX
  950. TEST(ERROR, InvalidCommandQueueiamax) {
  951. ErrorClass<iAmaxMetod<cl_float> > ec;
  952. ec.error(CL_INVALID_COMMAND_QUEUE);
  953. }
  954. TEST(ERROR, InvalidEventWaitListiamax) {
  955. ErrorClass<iAmaxMetod<cl_double> > ec;
  956. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  957. }
  958. TEST(ERROR, InvalidMemObjectiamax) {
  959. ErrorClass<iAmaxMetod<FloatComplex> > ec;
  960. ec.error(clblasInvalidVecX);
  961. }
  962. TEST(ERROR, InvalidValueiamax) {
  963. ErrorClass<iAmaxMetod<DoubleComplex> > ec;
  964. ec.error(clblasInsufficientMemVecX);
  965. }
  966. TEST(ERROR, InvalidDeviceiamax) {
  967. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  968. if (!base->isDevSupportDoublePrecision()) {
  969. ErrorClass<iAmaxMetod<DoubleComplex> > ec;
  970. ec.error(CL_INVALID_DEVICE);
  971. }
  972. }
  973. #endif
  974. //DOTC
  975. #ifdef DO_DOTC
  976. TEST(ERROR, InvalidCommandQueuedotc) {
  977. ErrorClass<DotcMetod<FloatComplex> > ec;
  978. ec.error(CL_INVALID_COMMAND_QUEUE);
  979. }
  980. TEST(ERROR, InvalidEventWaitListdotc) {
  981. ErrorClass<DotcMetod<DoubleComplex> > ec;
  982. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  983. }
  984. TEST(ERROR, InvalidMemObjectdotc) {
  985. ErrorClass<DotcMetod<FloatComplex> > ec;
  986. ec.error(clblasInvalidVecX);
  987. }
  988. TEST(ERROR, InvalidValuedotc) {
  989. ErrorClass<DotcMetod<DoubleComplex> > ec;
  990. ec.error(clblasInsufficientMemVecX);
  991. }
  992. TEST(ERROR, InvalidDevicedotc) {
  993. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  994. if (!base->isDevSupportDoublePrecision()) {
  995. ErrorClass<DotMetod<DoubleComplex> > ec;
  996. ec.error(CL_INVALID_DEVICE);
  997. }
  998. }
  999. #endif
  1000. #ifdef DO_ROTG
  1001. TEST(ERROR, InvalidCommandQueuerotg) {
  1002. ErrorClass<RotgMetod<float> > ec;
  1003. ec.error(CL_INVALID_COMMAND_QUEUE);
  1004. }
  1005. TEST(ERROR, InvalidEventWaitListrotg) {
  1006. ErrorClass<RotgMetod<double> > ec;
  1007. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  1008. }
  1009. TEST(ERROR, InvalidMemObjectrotg) {
  1010. ErrorClass<RotgMetod<FloatComplex> > ec;
  1011. ec.error(clblasInvalidVecX);
  1012. }
  1013. /* Skipping Invalid value- because rotg doesn't depend on parameter N,
  1014. So even passing an invalid N doesn't matter
  1015. TEST(ERROR, InvalidValuerotg) {
  1016. ErrorClass<RotgMetod<DoubleComplex> > ec;
  1017. ec.error(clblasInsufficientMemVecX);
  1018. }
  1019. */
  1020. TEST(ERROR, InvalidDevicerotg) {
  1021. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  1022. if (!base->isDevSupportDoublePrecision()) {
  1023. ErrorClass<RotgMetod<DoubleComplex> > ec;
  1024. ec.error(CL_INVALID_DEVICE);
  1025. }
  1026. }
  1027. #endif
  1028. #ifdef DO_ROTM
  1029. TEST(ERROR, InvalidCommandQueuerotm) {
  1030. ErrorClass<RotmMetod<float> > ec;
  1031. ec.error(CL_INVALID_COMMAND_QUEUE);
  1032. }
  1033. TEST(ERROR, InvalidEventWaitListrotm) {
  1034. ErrorClass<RotmMetod<double> > ec;
  1035. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  1036. }
  1037. TEST(ERROR, InvalidMemObjectrotm) {
  1038. ErrorClass<RotmMetod<float> > ec;
  1039. ec.error(clblasInvalidVecX);
  1040. }
  1041. TEST(ERROR, InvalidValuerotm) {
  1042. ErrorClass<RotmMetod<double> > ec;
  1043. ec.error(clblasInsufficientMemVecX);
  1044. }
  1045. TEST(ERROR, InvalidDevicerotm) {
  1046. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  1047. if (!base->isDevSupportDoublePrecision()) {
  1048. ErrorClass<RotmMetod<double> > ec;
  1049. ec.error(CL_INVALID_DEVICE);
  1050. }
  1051. }
  1052. #endif
  1053. #ifdef DO_ROT
  1054. TEST(ERROR, InvalidCommandQueuerot) {
  1055. ErrorClass<RotMetod<float> > ec;
  1056. ec.error(CL_INVALID_COMMAND_QUEUE);
  1057. }
  1058. TEST(ERROR, InvalidEventWaitListrot) {
  1059. ErrorClass<RotMetod<double> > ec;
  1060. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  1061. }
  1062. TEST(ERROR, InvalidMemObjectrot) {
  1063. ErrorClass<RotMetod<FloatComplex> > ec;
  1064. ec.error(clblasInvalidVecX);
  1065. }
  1066. TEST(ERROR, InvalidValuerot) {
  1067. ErrorClass<RotMetod<DoubleComplex> > ec;
  1068. ec.error(clblasInsufficientMemVecX);
  1069. }
  1070. TEST(ERROR, InvalidDevicerot) {
  1071. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  1072. if (!base->isDevSupportDoublePrecision()) {
  1073. ErrorClass<RotMetod<DoubleComplex> > ec;
  1074. ec.error(CL_INVALID_DEVICE);
  1075. }
  1076. }
  1077. #endif
  1078. #ifdef DO_ROTMG
  1079. TEST(ERROR, InvalidCommandQueuerotmg) {
  1080. ErrorClass<RotmgMetod<float> > ec;
  1081. ec.error(CL_INVALID_COMMAND_QUEUE);
  1082. }
  1083. TEST(ERROR, InvalidEventWaitListrotmg) {
  1084. ErrorClass<RotmgMetod<double> > ec;
  1085. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  1086. }
  1087. TEST(ERROR, InvalidMemObjectrotmg) {
  1088. ErrorClass<RotmgMetod<float> > ec;
  1089. ec.error(clblasInvalidVecX);
  1090. }
  1091. /* Skipping Invalid value- because rotg doesn't depend on parameter N,
  1092. So even passing an invalid N doesn't matter
  1093. TEST(ERROR, InvalidValuerotmg) {
  1094. ErrorClass<RotmgMetod<double> > ec;
  1095. ec.error(clblasInsufficientMemVecX);
  1096. }
  1097. */
  1098. TEST(ERROR, InvalidDevicerotmg) {
  1099. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  1100. if (!base->isDevSupportDoublePrecision()) {
  1101. ErrorClass<RotmgMetod<double> > ec;
  1102. ec.error(CL_INVALID_DEVICE);
  1103. }
  1104. }
  1105. #endif
  1106. #ifdef DO_NRM2
  1107. TEST(ERROR, InvalidCommandQueuenrm2) {
  1108. ErrorClass<Nrm2Metod<cl_float> > ec;
  1109. ec.error(CL_INVALID_COMMAND_QUEUE);
  1110. }
  1111. TEST(ERROR, InvalidEventWaitListnrm2) {
  1112. ErrorClass<Nrm2Metod<cl_double> > ec;
  1113. ec.error(CL_INVALID_EVENT_WAIT_LIST);
  1114. }
  1115. TEST(ERROR, InvalidMemObjectnrm2) {
  1116. ErrorClass<Nrm2Metod<FloatComplex> > ec;
  1117. ec.error(clblasInvalidVecX);
  1118. }
  1119. TEST(ERROR, InvalidValuenrm2) {
  1120. ErrorClass<Nrm2Metod<DoubleComplex> > ec;
  1121. ec.error(clblasInsufficientMemVecX);
  1122. }
  1123. TEST(ERROR, InvalidDevicenrm2) {
  1124. clMath::BlasBase* base = clMath::BlasBase::getInstance();
  1125. if (!base->isDevSupportDoublePrecision()) {
  1126. ErrorClass<Nrm2Metod<DoubleComplex> > ec;
  1127. ec.error(CL_INVALID_DEVICE);
  1128. }
  1129. }
  1130. #endif