Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[![Travis build status](https://travis-ci.org/bernardladenthin/streambuffer.svg)](https://travis-ci.org/bernardladenthin/streambuffer)
[![Maven Central](https://maven-badges.herokuapp.com/maven-central/net.ladenthin/streambuffer/badge.svg)](https://maven-badges.herokuapp.com/maven-central/net.ladenthin/streambuffer)
[![Coverage Status](https://coveralls.io/repos/bernardladenthin/streambuffer/badge.svg)](https://coveralls.io/r/bernardladenthin/streambuffer)
[![Coverage Status](https://coveralls.io/repos/github/bernardladenthin/streambuffer/badge.svg)](https://coveralls.io/github/bernardladenthin/streambuffer)
[![Codecov](https://codecov.io/github/bernardladenthin/streambuffer/coverage.png)](https://codecov.io/gh/bernardladenthin/streambuffer)
[![Coverity Scan Build Status](https://scan.coverity.com/projects/5453/badge.svg)](https://scan.coverity.com/projects/5453)
[![Known Vulnerabilities](https://snyk.io/test/github/bernardladenthin/streambuffer/badge.svg?targetFile=pom.xml)](https://snyk.io/test/github/bernardladenthin/streambuffer?targetFile=pom.xml)
Expand Down
47 changes: 47 additions & 0 deletions src/test/java/net/ladenthin/streambuffer/StreamBufferTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2188,4 +2188,51 @@ public void available_afterPartialReadFromSingleEntry_returnsRemainingCount() th
assertThat(sb.getInputStream().available(), is(5));
}
// </editor-fold>

// <editor-fold defaultstate="collapsed" desc="capMissingBytes equivalence: old vs new formula">

// Extracts the OLD capping formula from the guarded if-block (pre-cb66b68)
private static int capMissingBytesOld(long maximumAvailableBytes, int missingBytes) {
if (maximumAvailableBytes < missingBytes) {
return (int) Math.min(maximumAvailableBytes, Integer.MAX_VALUE);
}
return missingBytes;
}

// Extracts the NEW capping formula (unconditional Math.min, post-cb66b68)
private static int capMissingBytesNew(long maximumAvailableBytes, int missingBytes) {
return (int) Math.min(maximumAvailableBytes, (long) missingBytes);
}

@DataProvider
public static Object[][] capMissingBytesInputs() {
return new Object[][] {
// Case A: maxAvail < missingBytes (old if-branch fires, new Math.min picks maxAvail)
{ 1L, 5 }, // trivially small
{ 3L, 5 }, // standard small case
{ (long) Integer.MAX_VALUE - 1, Integer.MAX_VALUE }, // one below INT_MAX

// Case B: maxAvail == missingBytes (boundary: old skips if, new Math.min picks either)
{ 5L, 5 }, // small equality
{ (long) Integer.MAX_VALUE, Integer.MAX_VALUE }, // equality at INT_MAX

// Case C: maxAvail > missingBytes (old skips if, new Math.min picks missingBytes)
{ 9L, 3 }, // standard: more available than needed
{ (long) Integer.MAX_VALUE + 1L, Integer.MAX_VALUE }, // maxAvail just above INT_MAX
{ (long) Integer.MAX_VALUE + 1L, 5 }, // maxAvail > INT_MAX, small missing
{ 3_000_000_000L, 100 }, // large long, small int
{ Long.MAX_VALUE, 1 }, // extreme: largest possible long
};
}

@Test
@UseDataProvider("capMissingBytesInputs")
public void capMissingBytes_oldAndNewFormula_returnSameResult(
long maximumAvailableBytes, int missingBytes) {
int oldResult = capMissingBytesOld(maximumAvailableBytes, missingBytes);
int newResult = capMissingBytesNew(maximumAvailableBytes, missingBytes);
assertThat(newResult, is(oldResult));
}

// </editor-fold>
}
Loading