/*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation.
*
* This code is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
* or visit www.oracle.com if you need additional information or have any
* questions.
*/
/*
* @test
* @bug 6410729 6586631
* @summary Test previousClearBit, previousSetBit
*/
public class PreviousBits {
long h = 1234;
long[] words = s.toLongArray();
h ^= words[i] * (i + 1);
}
THROWS(IndexOutOfBoundsException.class,
new F(){void f(){ s.previousSetBit(-2);}},
new F(){void f(){ s.previousClearBit(-2);}},
new F(){void f(){ s.nextSetBit(-1);}},
new F(){void f(){ s.nextClearBit(-1);}},
}
// Test empty bitset
testOutOfBounds(s);
testHashCode(s);
for (int i = -1; i < 93;) {
equal( i, s.previousClearBit(i));
i++;
equal( i, s.nextClearBit(i));
}
// Test "singleton" bitsets
for (int j = 0; j < 161; j++) {
s.clear();
s.set(j);
testOutOfBounds(s);
testHashCode(s);
for (int i = -1; i < j; i++) {
equal( i, s.previousClearBit(i));
if (i >= 0) {
equal(j, s.nextSetBit(i));
equal(i, s.nextClearBit(i));
}
}
equal(j, s.previousSetBit(j));
equal(j, s.nextSetBit(j));
for (int i = j+1; i < j+100; i++) {
equal(j, s.previousSetBit(i));
equal(i, s.previousClearBit(i));
equal(i, s.nextClearBit(i));
}
}
// set even bits
s.clear();
for (int i = 0; i <= 128; i+=2)
s.set(i);
testHashCode(s);
for (int i = 1; i <= 128; i++) {
equal(s.previousSetBit(i),
((i & 1) == 0) ? i : i - 1);
equal(s.previousClearBit(i),
((i & 1) == 0) ? i - 1 : i);
}
// set odd bits as well
for (int i = 1; i <= 128; i+=2)
s.set(i);
testHashCode(s);
for (int i = 1; i <= 128; i++) {
equal(s.previousSetBit(i), i);
}
// Test loops documented in javadoc
s.clear();
for (int i = 0; i < 10; i++)
}
//--------------------- Infrastructure ---------------------------
else fail(x + " not equal to " + y);}
abstract class F {abstract void f() throws Throwable;}
for (F f : fs)
catch (Throwable t) {
else unexpected(t);}}
}