|
11 | 11 |
|
12 | 12 | import java.io.IOException;
|
13 | 13 | import java.nio.ByteBuffer;
|
14 |
| -import java.util.Arrays; |
15 | 14 | import java.util.Random;
|
16 | 15 |
|
17 | 16 | import org.junit.jupiter.api.Test;
|
|
31 | 30 |
|
32 | 31 | public class BlobsTest {
|
33 | 32 | @Test public void testConstants() {
|
34 |
| - assertEquals(4096,Blob.CHUNK_LENGTH); |
| 33 | + assertEquals(4096,Blob.CHUNK_LENGTH); // verify expected constant value of 4k |
35 | 34 | assertEquals(Blob.CHUNK_LENGTH,1<<Blobs.CHUNK_SHIFT);
|
36 | 35 | }
|
37 | 36 |
|
@@ -340,6 +339,20 @@ public void testBlobSlice() {
|
340 | 339 | doBlobTests(blob);
|
341 | 340 | }
|
342 | 341 |
|
| 342 | + @Test |
| 343 | + public void testSliceInvalidRanges() { |
| 344 | + Blob b = Blob.fromHex("0123456789"); |
| 345 | + |
| 346 | + // start > end |
| 347 | + assertNull(b.slice(3, 2)); |
| 348 | + |
| 349 | + // negative length implicitly |
| 350 | + assertNull(b.slice(5, 4)); |
| 351 | + |
| 352 | + // valid edge case |
| 353 | + assertEquals(Blob.EMPTY, b.slice(3, 3)); |
| 354 | + } |
| 355 | + |
343 | 356 | @Test
|
344 | 357 | public void testBlobAppendSmall() {
|
345 | 358 | ABlob src = Blob.fromHex("cafebabedeadbeef");
|
@@ -433,29 +446,42 @@ public void testBlobTreeDepthLimits() {
|
433 | 446 | assertEquals(1000, result.count());
|
434 | 447 | }
|
435 | 448 |
|
| 449 | + @Test |
| 450 | + public void testInstanceReuseOptimizations() { |
| 451 | + Blob b = Blob.fromHex("0123456789abcdef"); |
| 452 | + |
| 453 | + // Full slice should return same instance |
| 454 | + assertSame(b, b.slice(0)); |
| 455 | + assertSame(b, b.slice(0, b.count())); |
| 456 | + |
| 457 | + // Empty slices should return empty singleton |
| 458 | + assertSame(Blob.EMPTY, b.slice(5, 5)); |
| 459 | + assertSame(Blob.EMPTY, b.slice(b.count())); |
| 460 | + |
| 461 | + |
| 462 | + } |
| 463 | + |
436 | 464 | @Test
|
437 | 465 | public void testCompareConsistency() {
|
438 | 466 | // Ensure compareTo is consistent with equals
|
439 |
| - java.util.List<Blob> blobs = Arrays.asList( |
| 467 | + Blob[] blobs = new Blob[] { |
440 | 468 | Blob.EMPTY,
|
441 | 469 | Blob.fromHex("00"),
|
442 | 470 | Blob.fromHex("01"),
|
443 | 471 | Blob.fromHex("FF"),
|
444 | 472 | Blob.fromHex("0000"),
|
445 | 473 | Blob.fromHex("0001"),
|
446 | 474 | Blob.fromHex("FFFF")
|
447 |
| - ); |
| 475 | + }; |
448 | 476 |
|
449 | 477 | for (Blob b1 : blobs) {
|
450 | 478 | for (Blob b2 : blobs) {
|
451 | 479 | // If equal, compareTo should return 0
|
452 |
| - if (b1.equals(b2)) { |
453 |
| - assertEquals(0, b1.compareTo(b2)); |
454 |
| - } |
455 | 480 |
|
456 | 481 | // compareTo should be antisymmetric
|
457 | 482 | assertEquals(-Integer.signum(b1.compareTo(b2)), Integer.signum(b2.compareTo(b1)));
|
458 | 483 | }
|
| 484 | + doBlobTests(b1); |
459 | 485 | }
|
460 | 486 | }
|
461 | 487 |
|
|
0 commit comments