xref: /llvm-project/openmp/runtime/test/affinity/format/api.c (revision a70184ba92b8bdbb27d16321a656353abf955b82)
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