15640556bSJonathan Peyton // RUN: %libomp-compile-and-run
2*a70184baSMichal Gorny // RUN: %libomp-run | %python %S/check.py -c 'CHECK' %s
35640556bSJonathan Peyton
45640556bSJonathan Peyton #include <stdio.h>
55640556bSJonathan Peyton #include <stdlib.h>
65640556bSJonathan Peyton #include <string.h>
75640556bSJonathan Peyton #include <omp.h>
85640556bSJonathan Peyton
95640556bSJonathan Peyton #define XSTR(x) #x
105640556bSJonathan Peyton #define STR(x) XSTR(x)
115640556bSJonathan Peyton
125640556bSJonathan Peyton #define streqls(s1, s2) (!strcmp(s1, s2))
135640556bSJonathan Peyton
145640556bSJonathan Peyton #define check(condition) \
155640556bSJonathan Peyton if (!(condition)) { \
165640556bSJonathan Peyton fprintf(stderr, "error: %s: %d: " STR(condition) "\n", __FILE__, \
175640556bSJonathan Peyton __LINE__); \
185640556bSJonathan Peyton exit(1); \
195640556bSJonathan Peyton }
205640556bSJonathan Peyton
215640556bSJonathan Peyton #define BUFFER_SIZE 1024
225640556bSJonathan Peyton
main(int argc,char ** argv)235640556bSJonathan Peyton int main(int argc, char** argv) {
245640556bSJonathan Peyton char buf[BUFFER_SIZE];
255640556bSJonathan Peyton size_t needed;
265640556bSJonathan Peyton
275640556bSJonathan Peyton omp_set_affinity_format("0123456789");
285640556bSJonathan Peyton
295640556bSJonathan Peyton needed = omp_get_affinity_format(buf, BUFFER_SIZE);
305640556bSJonathan Peyton check(streqls(buf, "0123456789"));
315640556bSJonathan Peyton check(needed == 10)
325640556bSJonathan Peyton
335640556bSJonathan Peyton // Check that it is truncated properly
345640556bSJonathan Peyton omp_get_affinity_format(buf, 5);
355640556bSJonathan Peyton check(streqls(buf, "0123"));
365640556bSJonathan Peyton
375640556bSJonathan Peyton #pragma omp parallel
385640556bSJonathan Peyton {
395640556bSJonathan Peyton char my_buf[512];
405640556bSJonathan Peyton size_t needed = omp_capture_affinity(my_buf, 512, NULL);
415640556bSJonathan Peyton check(streqls(my_buf, "0123456789"));
425640556bSJonathan Peyton check(needed == 10);
435640556bSJonathan Peyton // Check that it is truncated properly
445640556bSJonathan Peyton omp_capture_affinity(my_buf, 5, NULL);
455640556bSJonathan Peyton check(streqls(my_buf, "0123"));
465640556bSJonathan Peyton }
475640556bSJonathan Peyton
485640556bSJonathan Peyton #pragma omp parallel num_threads(4)
495640556bSJonathan Peyton {
505640556bSJonathan Peyton omp_display_affinity(NULL);
515640556bSJonathan Peyton }
525640556bSJonathan Peyton
535640556bSJonathan Peyton return 0;
545640556bSJonathan Peyton }
555640556bSJonathan Peyton
565640556bSJonathan Peyton // CHECK: num_threads=4 0123456789
57