buffer_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  1. package buf_test
  2. import (
  3. "bytes"
  4. "crypto/rand"
  5. "testing"
  6. "v2ray.com/core/common"
  7. . "v2ray.com/core/common/buf"
  8. "v2ray.com/core/common/compare"
  9. . "v2ray.com/ext/assert"
  10. )
  11. func TestBufferClear(t *testing.T) {
  12. assert := With(t)
  13. buffer := New()
  14. defer buffer.Release()
  15. payload := "Bytes"
  16. buffer.Write([]byte(payload))
  17. assert(buffer.Len(), Equals, int32(len(payload)))
  18. buffer.Clear()
  19. assert(buffer.Len(), Equals, int32(0))
  20. }
  21. func TestBufferIsEmpty(t *testing.T) {
  22. assert := With(t)
  23. buffer := New()
  24. defer buffer.Release()
  25. assert(buffer.IsEmpty(), IsTrue)
  26. }
  27. func TestBufferString(t *testing.T) {
  28. assert := With(t)
  29. buffer := New()
  30. defer buffer.Release()
  31. common.Must2(buffer.WriteString("Test String"))
  32. assert(buffer.String(), Equals, "Test String")
  33. }
  34. func TestBufferSlice(t *testing.T) {
  35. {
  36. b := New()
  37. common.Must2(b.Write([]byte("abcd")))
  38. bytes := b.BytesFrom(-2)
  39. if err := compare.BytesEqualWithDetail(bytes, []byte{'c', 'd'}); err != nil {
  40. t.Error(err)
  41. }
  42. }
  43. {
  44. b := New()
  45. common.Must2(b.Write([]byte("abcd")))
  46. bytes := b.BytesTo(-2)
  47. if err := compare.BytesEqualWithDetail(bytes, []byte{'a', 'b'}); err != nil {
  48. t.Error(err)
  49. }
  50. }
  51. {
  52. b := New()
  53. common.Must2(b.Write([]byte("abcd")))
  54. bytes := b.BytesRange(-3, -1)
  55. if err := compare.BytesEqualWithDetail(bytes, []byte{'b', 'c'}); err != nil {
  56. t.Error(err)
  57. }
  58. }
  59. }
  60. func TestBufferReadFullFrom(t *testing.T) {
  61. payload := make([]byte, 1024)
  62. common.Must2(rand.Read(payload))
  63. reader := bytes.NewReader(payload)
  64. b := New()
  65. n, err := b.ReadFullFrom(reader, 1024)
  66. common.Must(err)
  67. if n != 1024 {
  68. t.Error("expect reading 1024 bytes, but actually ", n)
  69. }
  70. if err := compare.BytesEqualWithDetail(payload, b.Bytes()); err != nil {
  71. t.Error(err)
  72. }
  73. }
  74. func BenchmarkNewBuffer(b *testing.B) {
  75. for i := 0; i < b.N; i++ {
  76. buffer := New()
  77. buffer.Release()
  78. }
  79. }
  80. func BenchmarkWrite2(b *testing.B) {
  81. buffer := New()
  82. b.ResetTimer()
  83. for i := 0; i < b.N; i++ {
  84. _, _ = buffer.Write([]byte{'a', 'b'})
  85. buffer.Clear()
  86. }
  87. }
  88. func BenchmarkWrite8(b *testing.B) {
  89. buffer := New()
  90. b.ResetTimer()
  91. for i := 0; i < b.N; i++ {
  92. _, _ = buffer.Write([]byte{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'})
  93. buffer.Clear()
  94. }
  95. }
  96. func BenchmarkWrite32(b *testing.B) {
  97. buffer := New()
  98. payload := make([]byte, 32)
  99. rand.Read(payload)
  100. b.ResetTimer()
  101. for i := 0; i < b.N; i++ {
  102. _, _ = buffer.Write(payload)
  103. buffer.Clear()
  104. }
  105. }
  106. func BenchmarkWriteByte2(b *testing.B) {
  107. buffer := New()
  108. b.ResetTimer()
  109. for i := 0; i < b.N; i++ {
  110. _ = buffer.WriteByte('a')
  111. _ = buffer.WriteByte('b')
  112. buffer.Clear()
  113. }
  114. }
  115. func BenchmarkWriteByte8(b *testing.B) {
  116. buffer := New()
  117. b.ResetTimer()
  118. for i := 0; i < b.N; i++ {
  119. _ = buffer.WriteByte('a')
  120. _ = buffer.WriteByte('b')
  121. _ = buffer.WriteByte('c')
  122. _ = buffer.WriteByte('d')
  123. _ = buffer.WriteByte('e')
  124. _ = buffer.WriteByte('f')
  125. _ = buffer.WriteByte('g')
  126. _ = buffer.WriteByte('h')
  127. buffer.Clear()
  128. }
  129. }