1a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner/*
2a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * Copyright (C) 2010 The Android Open Source Project
3a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * All rights reserved.
4a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner *
5a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * Redistribution and use in source and binary forms, with or without
6a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * modification, are permitted provided that the following conditions
7a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * are met:
8a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner *  * Redistributions of source code must retain the above copyright
9a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner *    notice, this list of conditions and the following disclaimer.
10a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner *  * Redistributions in binary form must reproduce the above copyright
11a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner *    notice, this list of conditions and the following disclaimer in
12a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner *    the documentation and/or other materials provided with the
13a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner *    distribution.
14a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner *
15a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
16a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
17a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
18a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
19a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
20a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
22a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
23a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
24a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
25a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner * SUCH DAMAGE.
27a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner */
28a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner#define _GNU_SOURCE 1
29a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner#include <sched.h>
30a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner#include <stdio.h>
31a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner#include <stdlib.h>
32a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner#include <string.h>
33a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner#include <unistd.h>
34a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
35a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turnerint failures = 0;
36a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
37a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner#define TEST_INT_EQ(cond,exp) \
38a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    do {\
39a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int  _cond = (cond); \
40a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int  _exp  = (exp); \
41a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        if ((_cond) != (_exp)) {\
42a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            fprintf(stderr, "Assertion failure:%s:%d: '%s' returned %d (%d expected)\n", \
43a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner                    __FUNCTION__, __LINE__, #cond, _cond, _exp);\
44a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }\
45a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }while(0)
46a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
47a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner#define  T(cond)  \
48a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    do {\
49a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        if (!(cond)) {\
50a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            fprintf(stderr,"Assertion failure:%s:%d: %s is not TRUE\n",\
51a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner                           __FUNCTION__, __LINE__, #cond);\
52a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            failures++;\
53a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }\
54a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    } while(0)
55a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
56a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner#define  F(cond) \
57a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    do {\
58a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        if (!!(cond)) {\
59a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            fprintf(stderr,"Assertion failure:%s:%d: %s is not FALSE\n",\
60a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner                           __FUNCTION__, __LINE__, #cond);\
61a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            failures++;\
62a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }\
63a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    } while (0)
64a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
65a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
66a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turnerstatic void
67a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turnertest_1(cpu_set_t* set)
68a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner{
69a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    cpu_set_t  other[1];
70a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    int nn, nnMax = CPU_SETSIZE;
71a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
72a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    memset(other, 0, sizeof *other);
73a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    TEST_INT_EQ(CPU_COUNT(other),0);
74a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
75a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* First, cheeck against zero */
76a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    CPU_ZERO(set);
77a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    TEST_INT_EQ(CPU_COUNT(set),0);
78a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    T(CPU_EQUAL(set, other));
79a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    T(CPU_EQUAL(other, set));
80a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
81a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = 0; nn < nnMax; nn++)
82a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        F(CPU_ISSET(nn, set));
83a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
84a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* Check individual bits */
85a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = 0; nn < nnMax; nn++) {
86a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int mm;
87a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_SET(nn, set);
88a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        TEST_INT_EQ(CPU_COUNT(set),1);
89a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        for (mm = 0; mm < nnMax; mm++) {
90a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            T(CPU_ISSET(mm, set) == (mm == nn));
91a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }
92a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_CLR(nn, set);
93a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        T(CPU_EQUAL(set, other));
94a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
95a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
96a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* Check cumulative bits, incrementing */
97a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = 0; nn < nnMax; nn++) {
98a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int mm;
99a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_SET(nn, set);
100a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        TEST_INT_EQ(CPU_COUNT(set), nn+1);
101a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        for (mm = 0; mm < nnMax; mm++) {
102a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            T(CPU_ISSET(mm, set) == (mm <= nn));
103a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }
104a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
105a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
106a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* Check individual clear bits */
107a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = 0; nn < nnMax; nn++) {
108a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int mm;
109a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_CLR(nn, set);
110a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        TEST_INT_EQ(CPU_COUNT(set), nnMax-1);
111a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        for (mm = 0; mm < nnMax; mm++) {
112a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            T(CPU_ISSET(mm, set) == (mm != nn));
113a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }
114a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_SET(nn, set);
115a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
116a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
117a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* Check cumulative bits, decrementing */
118a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = nnMax-1; nn >= 0; nn--) {
119a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int mm;
120a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_CLR(nn, set);
121a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        TEST_INT_EQ(CPU_COUNT(set), nn);
122a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        for (mm = 0; mm < nnMax; mm++) {
123a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            T(CPU_ISSET(mm, set) == (mm < nn));
124a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }
125a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
126a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    T(CPU_EQUAL(set, other));
127a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner}
128a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
129a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turnerstatic void
130a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turnertest_1_s(size_t setsize, cpu_set_t* set)
131a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner{
132a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    int nn, nnMax;
133a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    cpu_set_t* other;
134a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
135a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* First, cheeck against zero */
136a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    other = calloc(1,setsize);
137a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    TEST_INT_EQ(CPU_COUNT(other),0);
138a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    CPU_ZERO_S(setsize, set);
139a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    T(CPU_EQUAL_S(setsize, set, other));
140a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    T(CPU_EQUAL_S(setsize, other, set));
141a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
142a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    nnMax = setsize*8;
143a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = 0; nn < nnMax; nn++)
144a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        F(CPU_ISSET_S(nn, setsize, set));
145a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
146a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* Check individual bits */
147a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = 0; nn < nnMax; nn++) {
148a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int mm;
149a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_SET_S(nn, setsize, set);
150a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        TEST_INT_EQ(CPU_COUNT_S(setsize, set), 1);
151a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        for (mm = 0; mm < nnMax; mm++) {
152a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            T(CPU_ISSET_S(mm, setsize, set) == (mm == nn));
153a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }
154a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_CLR_S(nn, setsize, set);
155a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        T(CPU_EQUAL_S(setsize, set, other));
156a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
157a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
158a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* Check cumulative bits, incrementing */
159a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = 0; nn < nnMax; nn++) {
160a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int mm;
161a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_SET_S(nn, setsize, set);
162a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        TEST_INT_EQ(CPU_COUNT_S(setsize, set), nn+1);
163a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        for (mm = 0; mm < nnMax; mm++) {
164a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            T(CPU_ISSET_S(mm, setsize, set) == (mm <= nn));
165a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }
166a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
167a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
168a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* Check individual clear bits */
169a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = 0; nn < nnMax; nn++) {
170a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int mm;
171a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_CLR_S(nn, setsize, set);
172a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        TEST_INT_EQ(CPU_COUNT_S(setsize, set), nnMax-1);
173a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        for (mm = 0; mm < nnMax; mm++) {
174a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            T(CPU_ISSET_S(mm, setsize, set) == (mm != nn));
175a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }
176a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_SET_S(nn, setsize, set);
177a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
178a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
179a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    /* Check cumulative bits, decrementing */
180a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (nn = nnMax-1; nn >= 0; nn--) {
181a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        int mm;
182a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_CLR_S(nn, setsize, set);
183a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        TEST_INT_EQ(CPU_COUNT_S(setsize, set), nn);
184a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        for (mm = 0; mm < nnMax; mm++) {
185a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner            T(CPU_ISSET_S(mm, setsize, set) == (mm < nn));
186a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        }
187a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
188a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    T(CPU_EQUAL_S(setsize, set, other));
189a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
190a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    free(other);
191a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner}
192a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
193a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
194a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turnerint main(void)
195a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner{
196a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    cpu_set_t  set0;
197a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    int cpu;
198a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    test_1(&set0);
199a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    test_1_s(sizeof(set0), &set0);
200a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
201a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    size_t count;
202a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    for (count = 32; count <= 1024; count *= 2) {
203a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        cpu_set_t* set = CPU_ALLOC(count);
204a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        test_1_s(count/8, set);
205a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        CPU_FREE(set);
206a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
207a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
208a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    T((cpu = sched_getcpu()) >= 0);
209a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
210a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    int ret;
211a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    TEST_INT_EQ((ret = sched_getaffinity(getpid(), sizeof(cpu_set_t), &set0)), 0);
212a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
213a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    CPU_ZERO(&set0);
214a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    CPU_SET(cpu, &set0);
215a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
216a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    TEST_INT_EQ((ret = sched_setaffinity(getpid(), sizeof(cpu_set_t), &set0)), 0);
217a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner
218a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    if (failures == 0) {
219a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        printf("OK\n");
220a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        return 0;
221a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    } else {
222a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        printf("KO: %d failures\n", failures);
223a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner        return 1;
224a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner    }
225a4502d4e775e9038621cf32dd311ee6afa788dd0David 'Digit' Turner}
226