Tue Jul 21 21:45:33 2009 UTC ()
flag a 64-bit integer constant as "ULL" -- this is not clean but the
code around it assumes it anyway
fixes build on 32-bit


(drochner)
diff -r1.1 -r1.2 src/tests/lib/libc/string/t_popcount.c

cvs diff -r1.1 -r1.2 src/tests/lib/libc/string/t_popcount.c (switch to unified diff)

--- src/tests/lib/libc/string/t_popcount.c 2009/07/21 13:18:44 1.1
+++ src/tests/lib/libc/string/t_popcount.c 2009/07/21 21:45:33 1.2
@@ -1,188 +1,188 @@ @@ -1,188 +1,188 @@
1/* $NetBSD: t_popcount.c,v 1.1 2009/07/21 13:18:44 joerg Exp $ */ 1/* $NetBSD: t_popcount.c,v 1.2 2009/07/21 21:45:33 drochner Exp $ */
2/*- 2/*-
3 * Copyright (c) 2009 The NetBSD Foundation, Inc. 3 * Copyright (c) 2009 The NetBSD Foundation, Inc.
4 * All rights reserved. 4 * All rights reserved.
5 * 5 *
6 * This code is derived from software contributed to The NetBSD Foundation 6 * This code is derived from software contributed to The NetBSD Foundation
7 * by Joerg Sonnenberger. 7 * by Joerg Sonnenberger.
8 * 8 *
9 * Redistribution and use in source and binary forms, with or without 9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions 10 * modification, are permitted provided that the following conditions
11 * are met: 11 * are met:
12 * 12 *
13 * 1. Redistributions of source code must retain the above copyright 13 * 1. Redistributions of source code must retain the above copyright
14 * notice, this list of conditions and the following disclaimer. 14 * notice, this list of conditions and the following disclaimer.
15 * 2. Redistributions in binary form must reproduce the above copyright 15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in 16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the 17 * the documentation and/or other materials provided with the
18 * distribution. 18 * distribution.
19 * 19 *
20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 22 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 23 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
24 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 24 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
25 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, 25 * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 26 * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED 27 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT 29 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
30 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 30 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
31 * SUCH DAMAGE. 31 * SUCH DAMAGE.
32 */ 32 */
33 33
34#include <sys/cdefs.h> 34#include <sys/cdefs.h>
35__RCSID("$NetBSD: t_popcount.c,v 1.1 2009/07/21 13:18:44 joerg Exp $"); 35__RCSID("$NetBSD: t_popcount.c,v 1.2 2009/07/21 21:45:33 drochner Exp $");
36 36
37#include <atf-c.h> 37#include <atf-c.h>
38#include <strings.h> 38#include <strings.h>
39 39
40static unsigned int byte_count[256]; 40static unsigned int byte_count[256];
41 41
42static void 42static void
43popcount_init(void) 43popcount_init(void)
44{ 44{
45 unsigned int i, j; 45 unsigned int i, j;
46 46
47 for (i = 0; i < 256; ++i) { 47 for (i = 0; i < 256; ++i) {
48 byte_count[i] = 0; 48 byte_count[i] = 0;
49 for (j = i; j != 0; j >>= 1) { 49 for (j = i; j != 0; j >>= 1) {
50 if (j & 1) 50 if (j & 1)
51 ++byte_count[i]; 51 ++byte_count[i];
52 } 52 }
53 } 53 }
54} 54}
55 55
56unsigned int test_parts[256] = { 56unsigned int test_parts[256] = {
57 0x318e53e6U, 0x11710316U, 0x62608ffaU, 0x67e0f562U,  57 0x318e53e6U, 0x11710316U, 0x62608ffaU, 0x67e0f562U,
58 0xe432e82cU, 0x9862e8b2U, 0x7d96a627U, 0x3f74ad31U,  58 0xe432e82cU, 0x9862e8b2U, 0x7d96a627U, 0x3f74ad31U,
59 0x3cecf906U, 0xcdc0dcb4U, 0x241dab64U, 0x31e6133eU,  59 0x3cecf906U, 0xcdc0dcb4U, 0x241dab64U, 0x31e6133eU,
60 0x23086ad4U, 0x721d5a91U, 0xc483da53U, 0x6a62af52U,  60 0x23086ad4U, 0x721d5a91U, 0xc483da53U, 0x6a62af52U,
61 0xf3f5c386U, 0xe0de3f77U, 0x65afe528U, 0xf4816485U,  61 0xf3f5c386U, 0xe0de3f77U, 0x65afe528U, 0xf4816485U,
62 0x40ccbf08U, 0x25df49c1U, 0xae5a6ee0U, 0xab36ccadU,  62 0x40ccbf08U, 0x25df49c1U, 0xae5a6ee0U, 0xab36ccadU,
63 0x87e1ec29U, 0x60ca2407U, 0x49d62e47U, 0xa09f2df5U,  63 0x87e1ec29U, 0x60ca2407U, 0x49d62e47U, 0xa09f2df5U,
64 0xaf4c1c68U, 0x8ef08d50U, 0x624cfd2fU, 0xa6a36f20U,  64 0xaf4c1c68U, 0x8ef08d50U, 0x624cfd2fU, 0xa6a36f20U,
65 0x68aaf879U, 0x0fe9deabU, 0x5c9a4060U, 0x215d8f08U,  65 0x68aaf879U, 0x0fe9deabU, 0x5c9a4060U, 0x215d8f08U,
66 0x55e84712U, 0xea1f1681U, 0x3a10b8a1U, 0x08e06632U,  66 0x55e84712U, 0xea1f1681U, 0x3a10b8a1U, 0x08e06632U,
67 0xcbc875e2U, 0x31e53258U, 0xcd3807a4U, 0xb9d17516U,  67 0xcbc875e2U, 0x31e53258U, 0xcd3807a4U, 0xb9d17516U,
68 0x8fbfd9abU, 0x6651b555U, 0x550fb381U, 0x05061b9dU,  68 0x8fbfd9abU, 0x6651b555U, 0x550fb381U, 0x05061b9dU,
69 0x35aef3f2U, 0x9175078cU, 0xae0f14daU, 0x92a2d5f8U,  69 0x35aef3f2U, 0x9175078cU, 0xae0f14daU, 0x92a2d5f8U,
70 0x70d968feU, 0xe86f41c5U, 0x5cfaf39fU, 0x8499b18dU,  70 0x70d968feU, 0xe86f41c5U, 0x5cfaf39fU, 0x8499b18dU,
71 0xb33f879aU, 0x0a68ad3dU, 0x9323ecc1U, 0x060037ddU,  71 0xb33f879aU, 0x0a68ad3dU, 0x9323ecc1U, 0x060037ddU,
72 0xb91a5051U, 0xa0dbebf6U, 0x3e6aa6f1U, 0x7b422b5bU,  72 0xb91a5051U, 0xa0dbebf6U, 0x3e6aa6f1U, 0x7b422b5bU,
73 0x599e811eU, 0x199f7594U, 0xca453365U, 0x1cda6f48U,  73 0x599e811eU, 0x199f7594U, 0xca453365U, 0x1cda6f48U,
74 0xe9c75d2cU, 0x6a873217U, 0x79c45d72U, 0x143b8e37U,  74 0xe9c75d2cU, 0x6a873217U, 0x79c45d72U, 0x143b8e37U,
75 0xa11df26eU, 0xaf31f80aU, 0x311bf759U, 0x2378563cU,  75 0xa11df26eU, 0xaf31f80aU, 0x311bf759U, 0x2378563cU,
76 0x9ab95fa5U, 0xfcf4d47cU, 0x1f7db268U, 0xd64b09e1U,  76 0x9ab95fa5U, 0xfcf4d47cU, 0x1f7db268U, 0xd64b09e1U,
77 0xad7936daU, 0x7a59005cU, 0x45b173d3U, 0xc1a71b32U,  77 0xad7936daU, 0x7a59005cU, 0x45b173d3U, 0xc1a71b32U,
78 0x7d9f0de2U, 0xa9ac3792U, 0x9e7f9966U, 0x7f0b8080U,  78 0x7d9f0de2U, 0xa9ac3792U, 0x9e7f9966U, 0x7f0b8080U,
79 0xece6c06fU, 0x78d92a3cU, 0x6d5f8f6cU, 0xc50ca544U,  79 0xece6c06fU, 0x78d92a3cU, 0x6d5f8f6cU, 0xc50ca544U,
80 0x5d8ded27U, 0xd27a8462U, 0x4bcd13ccU, 0xd49075f2U,  80 0x5d8ded27U, 0xd27a8462U, 0x4bcd13ccU, 0xd49075f2U,
81 0xa8d52acfU, 0x41915d97U, 0x564f7062U, 0xefb046e2U,  81 0xa8d52acfU, 0x41915d97U, 0x564f7062U, 0xefb046e2U,
82 0xe296277aU, 0x605b0ea3U, 0x10b2c3a1U, 0x4e8e5c66U,  82 0xe296277aU, 0x605b0ea3U, 0x10b2c3a1U, 0x4e8e5c66U,
83 0x4bd8ec04U, 0x29935be9U, 0x381839f3U, 0x555d8824U,  83 0x4bd8ec04U, 0x29935be9U, 0x381839f3U, 0x555d8824U,
84 0xd6befddbU, 0x5d8d6d6eU, 0xb2fdb7b4U, 0xb471c8fcU,  84 0xd6befddbU, 0x5d8d6d6eU, 0xb2fdb7b4U, 0xb471c8fcU,
85 0xc2fd325bU, 0x932d2487U, 0xbdbbadefU, 0x66c8895dU,  85 0xc2fd325bU, 0x932d2487U, 0xbdbbadefU, 0x66c8895dU,
86 0x5d77857aU, 0x259f1cc0U, 0x302037faU, 0xda9aa7a8U,  86 0x5d77857aU, 0x259f1cc0U, 0x302037faU, 0xda9aa7a8U,
87 0xb112c6aaU, 0x78f74192U, 0xfd4da741U, 0xfa5765c1U,  87 0xb112c6aaU, 0x78f74192U, 0xfd4da741U, 0xfa5765c1U,
88 0x6ea1bc5cU, 0xd283f39cU, 0x268ae67dU, 0xdedcd134U,  88 0x6ea1bc5cU, 0xd283f39cU, 0x268ae67dU, 0xdedcd134U,
89 0xbbf92410U, 0x6b45fb55U, 0x2f75ac71U, 0x64bf2ca5U,  89 0xbbf92410U, 0x6b45fb55U, 0x2f75ac71U, 0x64bf2ca5U,
90 0x8b99675aU, 0x3f4923b6U, 0x7e610550U, 0x04b1c06dU,  90 0x8b99675aU, 0x3f4923b6U, 0x7e610550U, 0x04b1c06dU,
91 0x8f92e7c6U, 0x45cb608bU, 0x2d06d1f2U, 0x79cf387aU,  91 0x8f92e7c6U, 0x45cb608bU, 0x2d06d1f2U, 0x79cf387aU,
92 0xfd3ed225U, 0x243eee20U, 0x2cbefc6fU, 0x8286cbaaU,  92 0xfd3ed225U, 0x243eee20U, 0x2cbefc6fU, 0x8286cbaaU,
93 0x70d4c182U, 0x054e3cc6U, 0xb66c5362U, 0x0c73fa5dU,  93 0x70d4c182U, 0x054e3cc6U, 0xb66c5362U, 0x0c73fa5dU,
94 0x539948feU, 0xec638563U, 0x0cf04ab6U, 0xec7b52f4U,  94 0x539948feU, 0xec638563U, 0x0cf04ab6U, 0xec7b52f4U,
95 0x58eeffceU, 0x6fe8049aU, 0xb3b33332U, 0x2e33bfdbU,  95 0x58eeffceU, 0x6fe8049aU, 0xb3b33332U, 0x2e33bfdbU,
96 0xcc817567U, 0x71ac57c8U, 0x4bab3ac7U, 0x327c558bU,  96 0xcc817567U, 0x71ac57c8U, 0x4bab3ac7U, 0x327c558bU,
97 0x82a6d279U, 0x5adf71daU, 0x1074a656U, 0x3c533c1fU,  97 0x82a6d279U, 0x5adf71daU, 0x1074a656U, 0x3c533c1fU,
98 0x82fdbe69U, 0x21b4f6afU, 0xd59580e8U, 0x0de824ebU,  98 0x82fdbe69U, 0x21b4f6afU, 0xd59580e8U, 0x0de824ebU,
99 0xa510941bU, 0x7cd91144U, 0xa8c10631U, 0x4c839267U,  99 0xa510941bU, 0x7cd91144U, 0xa8c10631U, 0x4c839267U,
100 0x5d503c2fU, 0xe1567d55U, 0x23910cc7U, 0xdb1bdc34U,  100 0x5d503c2fU, 0xe1567d55U, 0x23910cc7U, 0xdb1bdc34U,
101 0x2a866704U, 0x33e21f0cU, 0x5c7681b4U, 0x818651caU,  101 0x2a866704U, 0x33e21f0cU, 0x5c7681b4U, 0x818651caU,
102 0xb1d18162U, 0x225ad014U, 0xadf7d6baU, 0xac548d9bU,  102 0xb1d18162U, 0x225ad014U, 0xadf7d6baU, 0xac548d9bU,
103 0xe94736e5U, 0x2279c5f1U, 0x33215d2cU, 0xdc8ab90eU,  103 0xe94736e5U, 0x2279c5f1U, 0x33215d2cU, 0xdc8ab90eU,
104 0xf5e3d7f2U, 0xedcb15cfU, 0xc9a43c4cU, 0xfc678fc6U,  104 0xf5e3d7f2U, 0xedcb15cfU, 0xc9a43c4cU, 0xfc678fc6U,
105 0x43796b95U, 0x3f8b700cU, 0x867bbc72U, 0x81f71fecU,  105 0x43796b95U, 0x3f8b700cU, 0x867bbc72U, 0x81f71fecU,
106 0xd00cad7dU, 0x302c458fU, 0x8ae21accU, 0x05850ce8U,  106 0xd00cad7dU, 0x302c458fU, 0x8ae21accU, 0x05850ce8U,
107 0x7764d8e8U, 0x8a36cd68U, 0x40b44bd7U, 0x1cffaeb7U,  107 0x7764d8e8U, 0x8a36cd68U, 0x40b44bd7U, 0x1cffaeb7U,
108 0x2b248f34U, 0x1eefdbafU, 0x574d7437U, 0xe86cd935U,  108 0x2b248f34U, 0x1eefdbafU, 0x574d7437U, 0xe86cd935U,
109 0xf53dd1c8U, 0x1b022513U, 0xef2d249bU, 0x94fb2b08U,  109 0xf53dd1c8U, 0x1b022513U, 0xef2d249bU, 0x94fb2b08U,
110 0x15d3eff8U, 0x14245e1bU, 0x82aa8425U, 0x53959028U,  110 0x15d3eff8U, 0x14245e1bU, 0x82aa8425U, 0x53959028U,
111 0x9c5f9b80U, 0x325e0c82U, 0x3e236c24U, 0x74e1dd36U,  111 0x9c5f9b80U, 0x325e0c82U, 0x3e236c24U, 0x74e1dd36U,
112 0x9890df3fU, 0xaf9701a2U, 0x023b3413U, 0x7634c67eU,  112 0x9890df3fU, 0xaf9701a2U, 0x023b3413U, 0x7634c67eU,
113 0x55cf5e45U, 0x56d2a95bU, 0xb6db869bU, 0xac19e260U,  113 0x55cf5e45U, 0x56d2a95bU, 0xb6db869bU, 0xac19e260U,
114 0xdd310740U, 0x26d68f84U, 0x45bebf17U, 0xe4a7728fU,  114 0xdd310740U, 0x26d68f84U, 0x45bebf17U, 0xe4a7728fU,
115 0xf082e66eU, 0xb2fe3c10U, 0x2db1fa2cU, 0x4b3dfcfaU,  115 0xf082e66eU, 0xb2fe3c10U, 0x2db1fa2cU, 0x4b3dfcfaU,
116 0xc7b3a672U, 0xaeadc67bU, 0x6cce6f2bU, 0x8263dbbfU,  116 0xc7b3a672U, 0xaeadc67bU, 0x6cce6f2bU, 0x8263dbbfU,
117 0xd9724d5bU, 0xbcc767b5U, 0x8d563798U, 0x2db764b4U,  117 0xd9724d5bU, 0xbcc767b5U, 0x8d563798U, 0x2db764b4U,
118 0x76e0cee7U, 0xd34f9a67U, 0x035c810aU, 0x3f56bdc1U,  118 0x76e0cee7U, 0xd34f9a67U, 0x035c810aU, 0x3f56bdc1U,
119 0x5b3f2c84U, 0x0baca8c0U, 0xfe979a77U, 0x484ca775U,  119 0x5b3f2c84U, 0x0baca8c0U, 0xfe979a77U, 0x484ca775U,
120 0xbdc7f104U, 0xc06c3efbU, 0xdbc5f32cU, 0x44b017e7U,  120 0xbdc7f104U, 0xc06c3efbU, 0xdbc5f32cU, 0x44b017e7U,
121}; 121};
122 122
123ATF_TC(t_popcount); 123ATF_TC(t_popcount);
124ATF_TC(t_popcountll); 124ATF_TC(t_popcountll);
125 125
126ATF_TC_HEAD(t_popcount, tc) 126ATF_TC_HEAD(t_popcount, tc)
127{ 127{
128 atf_tc_set_md_var(tc, "descr", "Test popcount results"); 128 atf_tc_set_md_var(tc, "descr", "Test popcount results");
129 atf_tc_set_md_var(tc, "timeout", "0"); 129 atf_tc_set_md_var(tc, "timeout", "0");
130} 130}
131 131
132ATF_TC_HEAD(t_popcountll, tc) 132ATF_TC_HEAD(t_popcountll, tc)
133{ 133{
134 atf_tc_set_md_var(tc, "descr", "Test popcountll results"); 134 atf_tc_set_md_var(tc, "descr", "Test popcountll results");
135 atf_tc_set_md_var(tc, "timeout", "0"); 135 atf_tc_set_md_var(tc, "timeout", "0");
136} 136}
137 137
138ATF_TC_BODY(t_popcount, tc) 138ATF_TC_BODY(t_popcount, tc)
139{ 139{
140 unsigned int i, r; 140 unsigned int i, r;
141 141
142 popcount_init(); 142 popcount_init();
143 143
144 for (i = 0; i < 0xffffffff; ++i) { 144 for (i = 0; i < 0xffffffff; ++i) {
145 r = byte_count[i & 255] + byte_count[(i >> 8) & 255] 145 r = byte_count[i & 255] + byte_count[(i >> 8) & 255]
146 + byte_count[(i >> 16) & 255] 146 + byte_count[(i >> 16) & 255]
147 + byte_count[(i >> 24) & 255]; 147 + byte_count[(i >> 24) & 255];
148 148
149 ATF_CHECK_EQ(r, popcount(i)); 149 ATF_CHECK_EQ(r, popcount(i));
150 } 150 }
151 ATF_CHECK_EQ(popcount(0xffffffff), 32); 151 ATF_CHECK_EQ(popcount(0xffffffff), 32);
152} 152}
153 153
154ATF_TC_BODY(t_popcountll, tc) 154ATF_TC_BODY(t_popcountll, tc)
155{ 155{
156 unsigned int i, j, r, r2, p; 156 unsigned int i, j, r, r2, p;
157 unsigned long long v; 157 unsigned long long v;
158 158
159 popcount_init(); 159 popcount_init();
160 160
161 for (j = 0; j < 256; ++j) { 161 for (j = 0; j < 256; ++j) {
162 p = test_parts[j]; 162 p = test_parts[j];
163 r2 = byte_count[p & 255] + byte_count[(p >> 8) & 255] 163 r2 = byte_count[p & 255] + byte_count[(p >> 8) & 255]
164 + byte_count[(p >> 16) & 255] 164 + byte_count[(p >> 16) & 255]
165 + byte_count[(p >> 24) & 255]; 165 + byte_count[(p >> 24) & 255];
166 166
167 for (i = 0; i < 0xffffffff; ++i) { 167 for (i = 0; i < 0xffffffff; ++i) {
168 r = byte_count[i & 255] + byte_count[(i >> 8) & 255] 168 r = byte_count[i & 255] + byte_count[(i >> 8) & 255]
169 + byte_count[(i >> 16) & 255] 169 + byte_count[(i >> 16) & 255]
170 + byte_count[(i >> 24) & 255] + r2; 170 + byte_count[(i >> 24) & 255] + r2;
171 171
172 v = (((unsigned long long)i) << 32) + p; 172 v = (((unsigned long long)i) << 32) + p;
173 ATF_CHECK_EQ(r, popcountll(v)); 173 ATF_CHECK_EQ(r, popcountll(v));
174 v = (((unsigned long long)p) << 32) + i; 174 v = (((unsigned long long)p) << 32) + i;
175 ATF_CHECK_EQ(r, popcountll(v)); 175 ATF_CHECK_EQ(r, popcountll(v));
176 } 176 }
177 } 177 }
178 178
179 ATF_CHECK_EQ(popcountll(0xffffffffffffffff), 64); 179 ATF_CHECK_EQ(popcountll(0xffffffffffffffffULL), 64);
180} 180}
181 181
182ATF_TP_ADD_TCS(tp) 182ATF_TP_ADD_TCS(tp)
183{ 183{
184 ATF_TP_ADD_TC(tp, t_popcount); 184 ATF_TP_ADD_TC(tp, t_popcount);
185 ATF_TP_ADD_TC(tp, t_popcountll); 185 ATF_TP_ADD_TC(tp, t_popcountll);
186 186
187 return atf_no_error(); 187 return atf_no_error();
188} 188}