VirtualBox

source: vbox/trunk/src/VBox/Runtime/testcase/tstMp-1.cpp@ 18403

Last change on this file since 18403 was 12107, checked in by vboxsync, 16 years ago

iprt: Updated tstMp-1 with the RTMp*Present* stuff.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 9.0 KB
Line 
1/* $Id: tstMp-1.cpp 12107 2008-09-04 20:10:06Z vboxsync $ */
2/** @file
3 * IPRT Testcase - RTMp.
4 */
5
6/*
7 * Copyright (C) 2008 Sun Microsystems, Inc.
8 *
9 * This file is part of VirtualBox Open Source Edition (OSE), as
10 * available from http://www.virtualbox.org. This file is free software;
11 * you can redistribute it and/or modify it under the terms of the GNU
12 * General Public License (GPL) as published by the Free Software
13 * Foundation, in version 2 as it comes in the "COPYING" file of the
14 * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15 * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16 *
17 * The contents of this file may alternatively be used under the terms
18 * of the Common Development and Distribution License Version 1.0
19 * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20 * VirtualBox OSE distribution, in which case the provisions of the
21 * CDDL are applicable instead of those of the GPL.
22 *
23 * You may elect to license modified versions of this file under the
24 * terms and conditions of either the GPL or the CDDL or both.
25 *
26 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
27 * Clara, CA 95054 USA or visit http://www.sun.com if you need
28 * additional information or have any questions.
29 */
30
31/*******************************************************************************
32* Header Files *
33*******************************************************************************/
34#include <iprt/mp.h>
35#include <iprt/cpuset.h>
36#include <iprt/err.h>
37#include <iprt/stream.h>
38#include <iprt/initterm.h>
39
40
41/*******************************************************************************
42* Global Variables *
43*******************************************************************************/
44static unsigned g_cErrors = 0;
45
46
47int main()
48{
49 RTR3Init();
50 RTPrintf("tstMp-1: TESTING...\n");
51
52 /*
53 * Present and possible CPUs.
54 */
55 RTCPUID cCpus = RTMpGetCount();
56 if (cCpus > 0)
57 RTPrintf("tstMp-1: RTMpGetCount -> %d\n", (int)cCpus);
58 else
59 {
60 RTPrintf("tstMp-1: FAILURE: RTMpGetCount -> %d\n", (int)cCpus);
61 g_cErrors++;
62 cCpus = 1;
63 }
64
65 RTCPUSET Set;
66 PRTCPUSET pSet = RTMpGetSet(&Set);
67 if (pSet == &Set)
68 {
69 if ((RTCPUID)RTCpuSetCount(&Set) != cCpus)
70 {
71 RTPrintf("tstMp-1: FAILURE: RTMpGetSet returned a set with a different cpu count; %d, expected %d\n",
72 RTCpuSetCount(&Set), cCpus);
73 g_cErrors++;
74 }
75 RTPrintf("tstMp-1: Possible CPU mask:\n");
76 for (int iCpu = 0; iCpu < RTCPUSET_MAX_CPUS; iCpu++)
77 {
78 RTCPUID idCpu = RTMpCpuIdFromSetIndex(iCpu);
79 if (RTCpuSetIsMemberByIndex(&Set, iCpu))
80 {
81 RTPrintf("tstMp-1: %2d - id %d: %u/%u MHz", iCpu, (int)idCpu,
82 RTMpGetCurFrequency(idCpu), RTMpGetMaxFrequency(idCpu));
83 if (RTMpIsCpuPresent(idCpu))
84 RTPrintf(RTMpIsCpuOnline(idCpu) ? " online\n" : " offline\n");
85 else
86 {
87 if (!RTMpIsCpuOnline(idCpu))
88 RTPrintf(" absent\n");
89 else
90 {
91 RTPrintf(" online but absent!\n");
92 RTPrintf("tstMp-1: FAILURE: Cpu with index %d is report as !RTIsCpuPresent while RTIsCpuOnline returns true!\n", iCpu);
93 g_cErrors++;
94 }
95 }
96 if (!RTMpIsCpuPossible(idCpu))
97 {
98 RTPrintf("tstMp-1: FAILURE: Cpu with index %d is returned by RTCpuSet but not RTMpIsCpuPossible!\n", iCpu);
99 g_cErrors++;
100 }
101 }
102 else if (RTMpIsCpuPossible(idCpu))
103 {
104 RTPrintf("tstMp-1: FAILURE: Cpu with index %d is returned by RTMpIsCpuPossible but not RTCpuSet!\n", iCpu);
105 g_cErrors++;
106 }
107 else if (RTMpGetCurFrequency(idCpu) != 0)
108 {
109 RTPrintf("tstMp-1: FAILURE: RTMpGetCurFrequency(%d[idx=%d]) didn't return 0 as it should\n", (int)idCpu, iCpu);
110 g_cErrors++;
111 }
112 else if (RTMpGetMaxFrequency(idCpu) != 0)
113 {
114 RTPrintf("tstMp-1: FAILURE: RTMpGetCurFrequency(%d[idx=%d]) didn't return 0 as it should\n", (int)idCpu, iCpu);
115 g_cErrors++;
116 }
117 }
118 }
119 else
120 {
121 RTPrintf("tstMp-1: FAILURE: RTMpGetSet -> %p, expected %p\n", pSet, &Set);
122 g_cErrors++;
123 RTCpuSetEmpty(&Set);
124 RTCpuSetAdd(&Set, RTMpCpuIdFromSetIndex(0));
125 }
126
127 /*
128 * Online CPUs.
129 */
130 RTCPUID cCpusOnline = RTMpGetOnlineCount();
131 if (cCpusOnline > 0)
132 {
133 if (cCpusOnline <= cCpus)
134 RTPrintf("tstMp-1: RTMpGetOnlineCount -> %d\n", (int)cCpusOnline);
135 else
136 {
137 RTPrintf("tstMp-1: FAILURE: RTMpGetOnlineCount -> %d, expected <= %d\n", (int)cCpusOnline, (int)cCpus);
138 g_cErrors++;
139 cCpusOnline = cCpus;
140 }
141 }
142 else
143 {
144 RTPrintf("tstMp-1: FAILURE: RTMpGetOnlineCount -> %d\n", (int)cCpusOnline);
145 g_cErrors++;
146 cCpusOnline = 1;
147 }
148
149 RTCPUSET SetOnline;
150 pSet = RTMpGetOnlineSet(&SetOnline);
151 if (pSet == &SetOnline)
152 {
153 if (RTCpuSetCount(&SetOnline) <= 0)
154 {
155 RTPrintf("tstMp-1: FAILURE: RTMpGetOnlineSet returned an empty set!\n");
156 g_cErrors++;
157 }
158 else if ((RTCPUID)RTCpuSetCount(&SetOnline) > cCpus)
159 {
160 RTPrintf("tstMp-1: FAILURE: RTMpGetOnlineSet returned a too high value; %d, expected <= %d\n",
161 RTCpuSetCount(&SetOnline), cCpus);
162 g_cErrors++;
163 }
164 RTPrintf("tstMp-1: Online CPU mask:\n");
165 for (int iCpu = 0; iCpu < RTCPUSET_MAX_CPUS; iCpu++)
166 if (RTCpuSetIsMemberByIndex(&SetOnline, iCpu))
167 {
168 RTCPUID idCpu = RTMpCpuIdFromSetIndex(iCpu);
169 RTPrintf("tstMp-1: %2d - id %d: %u/%u MHz %s\n", iCpu, (int)idCpu, RTMpGetCurFrequency(idCpu),
170 RTMpGetMaxFrequency(idCpu), RTMpIsCpuOnline(idCpu) ? "online" : "offline");
171 if (!RTCpuSetIsMemberByIndex(&Set, iCpu))
172 {
173 RTPrintf("tstMp-1: FAILURE: online cpu with index %2d is not a member of the possible cpu set!\n", iCpu);
174 g_cErrors++;
175 }
176 }
177
178 /* There isn't any sane way of testing RTMpIsCpuOnline really... :-/ */
179 }
180 else
181 {
182 RTPrintf("tstMp-1: FAILURE: RTMpGetOnlineSet -> %p, expected %p\n", pSet, &Set);
183 g_cErrors++;
184 }
185
186 /*
187 * Present CPUs.
188 */
189 RTCPUID cCpusPresent = RTMpGetPresentCount();
190 if (cCpusPresent > 0)
191 {
192 if ( cCpusPresent <= cCpus
193 && cCpusPresent >= cCpusOnline)
194 RTPrintf("tstMp-1: RTMpGetPresentCount -> %d\n", (int)cCpusPresent);
195 else
196 {
197 RTPrintf("tstMp-1: FAILURE: RTMpGetPresentCount -> %d, expected <= %d and >= %d\n", (int)cCpusPresent, (int)cCpus, (int)cCpusOnline);
198 g_cErrors++;
199 }
200 }
201 else
202 {
203 RTPrintf("tstMp-1: FAILURE: RTMpGetPresentCount -> %d\n", (int)cCpusPresent);
204 g_cErrors++;
205 cCpusPresent = 1;
206 }
207
208 RTCPUSET SetPresent;
209 pSet = RTMpGetPresentSet(&SetPresent);
210 if (pSet == &SetPresent)
211 {
212 if (RTCpuSetCount(&SetPresent) <= 0)
213 {
214 RTPrintf("tstMp-1: FAILURE: RTMpGetPresentSet returned an empty set!\n");
215 g_cErrors++;
216 }
217 else if ((RTCPUID)RTCpuSetCount(&SetPresent) != cCpusPresent)
218 {
219 RTPrintf("tstMp-1: FAILURE: RTMpGetPresentSet returned a bad value; %d, expected = %d\n",
220 RTCpuSetCount(&SetPresent), cCpusPresent);
221 g_cErrors++;
222 }
223 RTPrintf("tstMp-1: Present CPU mask:\n");
224 for (int iCpu = 0; iCpu < RTCPUSET_MAX_CPUS; iCpu++)
225 if (RTCpuSetIsMemberByIndex(&SetPresent, iCpu))
226 {
227 RTCPUID idCpu = RTMpCpuIdFromSetIndex(iCpu);
228 RTPrintf("tstMp-1: %2d - id %d: %u/%u MHz %s\n", iCpu, (int)idCpu, RTMpGetCurFrequency(idCpu),
229 RTMpGetMaxFrequency(idCpu), RTMpIsCpuPresent(idCpu) ? "present" : "absent");
230 if (!RTCpuSetIsMemberByIndex(&Set, iCpu))
231 {
232 RTPrintf("tstMp-1: FAILURE: online cpu with index %2d is not a member of the possible cpu set!\n", iCpu);
233 g_cErrors++;
234 }
235 }
236
237 /* There isn't any sane way of testing RTMpIsCpuPresent really... :-/ */
238 }
239 else
240 {
241 RTPrintf("tstMp-1: FAILURE: RTMpGetPresentSet -> %p, expected %p\n", pSet, &Set);
242 g_cErrors++;
243 }
244
245
246
247 if (!g_cErrors)
248 RTPrintf("tstMp-1: SUCCESS\n", g_cErrors);
249 else
250 RTPrintf("tstMp-1: FAILURE - %d errors\n", g_cErrors);
251 return !!g_cErrors;
252}
253
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette