1 /*
2 * Copyright (c) 2004, Intel Corporation. All rights reserved.
3 * Created by: crystal.xiong REMOVE-THIS AT intel DOT com
4 * This file is licensed under the GPL license. For the full content
5 * of this license, see the COPYING file at the top level of this
6 * source tree.
7
8 * Test pthread_attr_getschedpolicy()
9 *
10 * Steps:
11 * 1. Initialize a pthread_attr_t object using pthread_attr_init()
12 * 2. Call pthread_attr_setschedpolicy with policy parameter
13 * 3. Call pthread_attr_getschedpolicy to get the policy
14 *
15 */
16
17 #include <pthread.h>
18 #include <stdio.h>
19 #include <stdlib.h>
20 #include "posixtest.h"
21
22 #define TEST "2-1"
23 #define FUNCTION "pthread_attr_getschedpolicy"
24 #define ERROR_PREFIX "unexpected error: " FUNCTION " " TEST ": "
25
26 #define FIFOPOLICY SCHED_FIFO
27 #define RRPOLICY SCHED_RR
28 #define OTHERPOLICY SCHED_OTHER
29
verify_policy(pthread_attr_t * attr,int policytype)30 static int verify_policy(pthread_attr_t * attr, int policytype)
31 {
32 int rc;
33 int policy;
34
35 rc = pthread_attr_getschedpolicy(attr, &policy);
36 if (rc != 0) {
37 printf(ERROR_PREFIX "pthread_attr_getschedpolicy\n");
38 exit(PTS_UNRESOLVED);
39 }
40 switch (policytype) {
41 case SCHED_FIFO:
42 if (policy != FIFOPOLICY) {
43 printf(ERROR_PREFIX "got wrong policy param\n");
44 exit(PTS_FAIL);
45 }
46 break;
47 case SCHED_RR:
48 if (policy != RRPOLICY) {
49 printf(ERROR_PREFIX "got wrong policy param\n");
50 exit(PTS_FAIL);
51 }
52 break;
53 case SCHED_OTHER:
54 if (policy != OTHERPOLICY) {
55 printf(ERROR_PREFIX "got wrong policy param\n");
56 exit(PTS_FAIL);
57 }
58 break;
59 }
60 return 0;
61 }
62
main(void)63 int main(void)
64 {
65 int rc = 0;
66 pthread_attr_t attr;
67
68 rc = pthread_attr_init(&attr);
69 if (rc != 0) {
70 printf(ERROR_PREFIX "pthread_attr_init\n");
71 exit(PTS_UNRESOLVED);
72 }
73
74 rc = pthread_attr_setschedpolicy(&attr, FIFOPOLICY);
75 if (rc != 0) {
76 printf(ERROR_PREFIX "pthread_attr_setschedpolicy\n");
77 exit(PTS_UNRESOLVED);
78 }
79 verify_policy(&attr, FIFOPOLICY);
80
81 rc = pthread_attr_setschedpolicy(&attr, RRPOLICY);
82 if (rc != 0) {
83 printf(ERROR_PREFIX "pthread_attr_setschedpolicy\n");
84 exit(PTS_UNRESOLVED);
85 }
86 verify_policy(&attr, RRPOLICY);
87
88 rc = pthread_attr_setschedpolicy(&attr, OTHERPOLICY);
89 if (rc != 0) {
90 printf(ERROR_PREFIX "pthread_attr_setschedpolicy\n");
91 exit(PTS_UNRESOLVED);
92 }
93 verify_policy(&attr, OTHERPOLICY);
94
95 rc = pthread_attr_destroy(&attr);
96 if (rc != 0) {
97 printf(ERROR_PREFIX "pthread_attr_destroy\n");
98 exit(PTS_UNRESOLVED);
99 }
100 printf("Test PASSED\n");
101 return PTS_PASS;
102 }
103