1/* Trivial test of ordered.  */
2
3/* { dg-require-effective-target sync_int_long } */
4
5#include <omp.h>
6#include <string.h>
7#include <assert.h>
8#include "libgomp_g.h"
9
10
11#define N 100
12static int next;
13static int CHUNK, NTHR;
14
15static void clean_data (void)
16{
17  next = 0;
18}
19
20static void set_data (long i)
21{
22  int n = __sync_fetch_and_add (&next, 1);
23  assert (n == i);
24}
25
26
27#define TMPL_1(sched)							\
28static void f_##sched##_1 (void *dummy)					\
29{									\
30  long s0, e0, i;							\
31  if (GOMP_loop_ordered_##sched##_start (0, N, 1, CHUNK, &s0, &e0))	\
32    do									\
33      {									\
34	for (i = s0; i < e0; ++i)					\
35	  {								\
36	    GOMP_ordered_start ();					\
37	    set_data (i);						\
38	    GOMP_ordered_end ();					\
39	  }								\
40      }									\
41    while (GOMP_loop_ordered_##sched##_next (&s0, &e0));		\
42  GOMP_loop_end ();							\
43}									\
44static void t_##sched##_1 (void)					\
45{									\
46  clean_data ();							\
47  GOMP_parallel_start (f_##sched##_1, NULL, NTHR);			\
48  f_##sched##_1 (NULL);							\
49  GOMP_parallel_end ();							\
50}
51
52TMPL_1(static)
53TMPL_1(dynamic)
54TMPL_1(guided)
55
56static void test (void)
57{
58  t_static_1 ();
59  t_dynamic_1 ();
60  t_guided_1 ();
61}
62
63int main()
64{
65  omp_set_dynamic (0);
66
67  NTHR = 4;
68
69  CHUNK = 1;
70  test ();
71
72  CHUNK = 5;
73  test ();
74
75  CHUNK = 7;
76  test ();
77
78  CHUNK = 0;
79  t_static_1 ();
80
81  return 0;
82}
83