108857c88SAleksandar Markovic /* 208857c88SAleksandar Markovic * Header file for test utilities 308857c88SAleksandar Markovic * 4dd8d6a2dSAleksandar Markovic * Copyright (C) 2019 Wave Computing, Inc. 5dd8d6a2dSAleksandar Markovic * Copyright (C) 2019 Aleksandar Markovic <amarkovic@wavecomp.com> 608857c88SAleksandar Markovic * 708857c88SAleksandar Markovic * This program is free software: you can redistribute it and/or modify 808857c88SAleksandar Markovic * it under the terms of the GNU General Public License as published by 908857c88SAleksandar Markovic * the Free Software Foundation, either version 2 of the License, or 1008857c88SAleksandar Markovic * (at your option) any later version. 1108857c88SAleksandar Markovic * 1208857c88SAleksandar Markovic * This program is distributed in the hope that it will be useful, 1308857c88SAleksandar Markovic * but WITHOUT ANY WARRANTY; without even the implied warranty of 1408857c88SAleksandar Markovic * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1508857c88SAleksandar Markovic * GNU General Public License for more details. 1608857c88SAleksandar Markovic * 1708857c88SAleksandar Markovic * You should have received a copy of the GNU General Public License 1808857c88SAleksandar Markovic * along with this program. If not, see <https://www.gnu.org/licenses/>. 1908857c88SAleksandar Markovic * 2008857c88SAleksandar Markovic */ 2108857c88SAleksandar Markovic 22*81526dffSAleksandar Markovic #ifndef TEST_UTILS_128_H 23*81526dffSAleksandar Markovic #define TEST_UTILS_128_H 2408857c88SAleksandar Markovic 2508857c88SAleksandar Markovic #include <stdio.h> 2608857c88SAleksandar Markovic #include <stdint.h> 2708857c88SAleksandar Markovic #include <inttypes.h> 2808857c88SAleksandar Markovic #include <string.h> 2908857c88SAleksandar Markovic 30dd3ba703SAleksandar Markovic #define PRINT_RESULTS 0 3108857c88SAleksandar Markovic 3208857c88SAleksandar Markovic 33dd3ba703SAleksandar Markovic static inline int32_t check_results(const char *instruction_name, 34dd3ba703SAleksandar Markovic const uint32_t test_count, 35dd3ba703SAleksandar Markovic const double elapsed_time, 36dd3ba703SAleksandar Markovic const uint64_t *b128_result, 37dd3ba703SAleksandar Markovic const uint64_t *b128_expect) 3808857c88SAleksandar Markovic { 3908857c88SAleksandar Markovic #if PRINT_RESULTS 4008857c88SAleksandar Markovic uint32_t ii; 4108857c88SAleksandar Markovic printf("\n"); 4208857c88SAleksandar Markovic for (ii = 0; ii < test_count; ii++) { 4308857c88SAleksandar Markovic uint64_t a, b; 4408857c88SAleksandar Markovic memcpy(&a, (b128_result + 2 * ii), 8); 4508857c88SAleksandar Markovic memcpy(&b, (b128_result + 2 * ii + 1), 8); 4608857c88SAleksandar Markovic if (ii % 8 != 0) { 4708857c88SAleksandar Markovic printf(" { 0x%016llxULL, 0x%016llxULL, },\n", a, b); 4808857c88SAleksandar Markovic } else { 4908857c88SAleksandar Markovic printf(" { 0x%016llxULL, 0x%016llxULL, }, /* %3d */\n", 5008857c88SAleksandar Markovic a, b, ii); 5108857c88SAleksandar Markovic } 5208857c88SAleksandar Markovic } 5308857c88SAleksandar Markovic printf("\n"); 5408857c88SAleksandar Markovic #endif 5508857c88SAleksandar Markovic uint32_t i; 5608857c88SAleksandar Markovic uint32_t pass_count = 0; 5708857c88SAleksandar Markovic uint32_t fail_count = 0; 5808857c88SAleksandar Markovic 5908857c88SAleksandar Markovic printf("%s: ", instruction_name); 6008857c88SAleksandar Markovic for (i = 0; i < test_count; i++) { 61dd3ba703SAleksandar Markovic if ((b128_result[2 * i] == b128_expect[2 * i]) && 62dd3ba703SAleksandar Markovic (b128_result[2 * i + 1] == b128_expect[2 * i + 1])) { 6308857c88SAleksandar Markovic pass_count++; 6408857c88SAleksandar Markovic } else { 6508857c88SAleksandar Markovic fail_count++; 6608857c88SAleksandar Markovic } 6708857c88SAleksandar Markovic } 6808857c88SAleksandar Markovic 6908857c88SAleksandar Markovic printf("PASS: %3d FAIL: %3d elapsed time: %5.2f ms\n", 7008857c88SAleksandar Markovic pass_count, fail_count, elapsed_time); 7108857c88SAleksandar Markovic 7208857c88SAleksandar Markovic if (fail_count > 0) { 7308857c88SAleksandar Markovic return -1; 7408857c88SAleksandar Markovic } else { 7508857c88SAleksandar Markovic return 0; 7608857c88SAleksandar Markovic } 7708857c88SAleksandar Markovic } 7808857c88SAleksandar Markovic 7908857c88SAleksandar Markovic #endif 80