test_cpu_set.c revision a4502d4e775e9038621cf32dd311ee6afa788dd0
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