以下测试对随机 i 失败:
@Test
public void test() {
for (int i = 0; i < 1_000_000; i++) {
boolean isTrue = and128(new byte[] {-1});
if (!isTrue) {
fail("broken: " + i + " " + isTrue);
break;
}
clearCache();
}
}
private void clearCache() {
for (int i = 0; i < 100; i++) {
and128(new byte[] {(byte) i});
}
}
public static boolean and128(byte[] byteData) {
return ((byteData[0] & 128) > 0);
}
Run Code Online (Sandbox Code Playgroud)
由于随机性,我会责怪 Java 运行时。如果我内联方法and128,则无法重现该问题。此外,如果我只传递一个字节而不是字节数组,则测试通过。我正在使用 OpenJDK 14.0.2。问题似乎已在 15.0.2 中修复。它似乎仍然存在于 15.0.1 中,我找不到与此相对应的错误。
编辑:我添加了这个“clearCache”方法,它只是在侧面运行,使错误更容易重现。我想它会阻止一些 Java 优化。
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |