You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ByteBufferPoolTest.kt 1.7KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. package com.dmdirc.ktirc.io
  2. import kotlinx.io.pool.useInstance
  3. import org.junit.jupiter.api.Assertions.*
  4. import org.junit.jupiter.api.Test
  5. import java.nio.ByteBuffer
  6. internal class ByteBufferPoolTest {
  7. @Test
  8. fun `it allows borrowing of multiple unique bytebuffers`() {
  9. val pool = ByteBufferPool(5, 10)
  10. val buffer1 = pool.borrow()
  11. val buffer2 = pool.borrow()
  12. val buffer3 = pool.borrow()
  13. assertFalse(buffer1 === buffer2)
  14. assertFalse(buffer2 === buffer3)
  15. assertFalse(buffer1 === buffer3)
  16. }
  17. @Test
  18. fun `it produces buffers of the correct size`() {
  19. val pool = ByteBufferPool(5, 12)
  20. val buffer = pool.borrow()
  21. assertEquals(12, buffer.limit())
  22. }
  23. @Test
  24. fun `it reuses recycled buffers`() {
  25. val pool = ByteBufferPool(1, 10)
  26. val buffer1 = pool.borrow()
  27. pool.recycle(buffer1)
  28. val buffer2 = pool.borrow()
  29. assertTrue(buffer1 === buffer2)
  30. }
  31. @Test
  32. fun `it resets buffers when reborrowing`() {
  33. val pool = ByteBufferPool(1, 10)
  34. val buffer1 = pool.borrow()
  35. buffer1.put("31137".toByteArray())
  36. pool.recycle(buffer1)
  37. val buffer2 = pool.borrow()
  38. assertTrue(buffer1 === buffer2)
  39. assertEquals(0, buffer2.position())
  40. assertEquals(10, buffer2.limit())
  41. }
  42. @Test
  43. fun `borrow with block automatically returns`() {
  44. val pool = ByteBufferPool(1, 10)
  45. var buffer1: ByteBuffer? = null
  46. pool.useInstance { buffer1 = it }
  47. val buffer2 = pool.borrow()
  48. assertTrue(buffer1 === buffer2)
  49. }
  50. }