buffer_test.go 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274
  1. package util
  2. import (
  3. "bytes"
  4. "math"
  5. "math/rand"
  6. "testing"
  7. )
  8. func TestBufferReadWrite(t *testing.T) {
  9. buf := NewBuffer()
  10. buf.WriteBool(true)
  11. buf.WriteInt(42)
  12. buf.WriteFloat64(3.14)
  13. buf.WriteString("Testing, 1, 2, 3!")
  14. readBuf := NewBufferFromBytes(buf.Bytes())
  15. boolVal := readBuf.ReadBool()
  16. intVal := readBuf.ReadInt()
  17. floatVal := readBuf.ReadFloat64()
  18. stringVal := readBuf.ReadString()
  19. if boolVal != true {
  20. t.Errorf("Expected bool value to be true, got %v", boolVal)
  21. }
  22. if intVal != 42 {
  23. t.Errorf("Expected int value to be 42, got %v", intVal)
  24. }
  25. if floatVal != 3.14 {
  26. t.Errorf("Expected float value to be 3.14, got %v", floatVal)
  27. }
  28. if stringVal != "Testing, 1, 2, 3!" {
  29. t.Errorf("Expected string value to be 'Hello, World!', got %v", stringVal)
  30. }
  31. }
  32. func TestBufferWriteReadBytes(t *testing.T) {
  33. buf := NewBuffer()
  34. bytesToWrite := []byte{0x01, 0x02, 0x03, 0x04}
  35. buf.WriteBytes(bytesToWrite)
  36. readBuf := NewBufferFromBytes(buf.Bytes())
  37. readBytes := readBuf.ReadBytes(len(bytesToWrite))
  38. if !bytes.Equal(readBytes, bytesToWrite) {
  39. t.Errorf("Expected bytes to be %v, got %v", bytesToWrite, readBytes)
  40. }
  41. }
  42. func TestBufferWriteReadUInt64(t *testing.T) {
  43. buf := NewBuffer()
  44. uint64Val := uint64(1234567890)
  45. buf.WriteUInt64(uint64Val)
  46. readBuf := NewBufferFromBytes(buf.Bytes())
  47. readUInt64 := readBuf.ReadUInt64()
  48. if readUInt64 != uint64Val {
  49. t.Errorf("Expected uint64 value to be %v, got %v", uint64Val, readUInt64)
  50. }
  51. }
  52. func TestBufferWriteReadFloat32(t *testing.T) {
  53. buf := NewBuffer()
  54. float32Val := float32(3.14159)
  55. buf.WriteFloat32(float32Val)
  56. readBuf := NewBufferFromBytes(buf.Bytes())
  57. readFloat32 := readBuf.ReadFloat32()
  58. if readFloat32 != float32Val {
  59. t.Errorf("Expected float32 value to be %v, got %v", float32Val, readFloat32)
  60. }
  61. }
  62. func TestBufferWriteReadInt8(t *testing.T) {
  63. buf := NewBuffer()
  64. int8Val := int8(-42)
  65. buf.WriteInt8(int8Val)
  66. readBuf := NewBufferFromBytes(buf.Bytes())
  67. readInt8 := readBuf.ReadInt8()
  68. if readInt8 != int8Val {
  69. t.Errorf("Expected int8 value to be %v, got %v", int8Val, readInt8)
  70. }
  71. }
  72. func TestBufferWriteReadUInt16(t *testing.T) {
  73. buf := NewBuffer()
  74. uint16Val := uint16(65535)
  75. buf.WriteUInt16(uint16Val)
  76. readBuf := NewBufferFromBytes(buf.Bytes())
  77. readUInt16 := readBuf.ReadUInt16()
  78. if readUInt16 != uint16Val {
  79. t.Errorf("Expected uint16 value to be %v, got %v", uint16Val, readUInt16)
  80. }
  81. }
  82. func TestBufferWriteReadInt32(t *testing.T) {
  83. buf := NewBuffer()
  84. int32Val := int32(-1234567890)
  85. buf.WriteInt32(int32Val)
  86. readBuf := NewBufferFromBytes(buf.Bytes())
  87. readInt32 := readBuf.ReadInt32()
  88. if readInt32 != int32Val {
  89. t.Errorf("Expected int32 value to be %v, got %v", int32Val, readInt32)
  90. }
  91. }
  92. func TestBufferWriteReadUInt8(t *testing.T) {
  93. buf := NewBuffer()
  94. uint8Val := uint8(255)
  95. buf.WriteUInt8(uint8Val)
  96. readBuf := NewBufferFromBytes(buf.Bytes())
  97. readUInt8 := readBuf.ReadUInt8()
  98. if readUInt8 != uint8Val {
  99. t.Errorf("Expected uint8 value to be %v, got %v", uint8Val, readUInt8)
  100. }
  101. }
  102. func TestBufferWriteReadInt16(t *testing.T) {
  103. buf := NewBuffer()
  104. int16Val := int16(-32768)
  105. buf.WriteInt16(int16Val)
  106. readBuf := NewBufferFromBytes(buf.Bytes())
  107. readInt16 := readBuf.ReadInt16()
  108. if readInt16 != int16Val {
  109. t.Errorf("Expected int16 value to be %v, got %v", int16Val, readInt16)
  110. }
  111. }
  112. func TestBufferWriteReadUInt32(t *testing.T) {
  113. buf := NewBuffer()
  114. uint32Val := uint32(4294967295)
  115. buf.WriteUInt32(uint32Val)
  116. readBuf := NewBufferFromBytes(buf.Bytes())
  117. readUInt32 := readBuf.ReadUInt32()
  118. if readUInt32 != uint32Val {
  119. t.Errorf("Expected uint32 value to be %v, got %v", uint32Val, readUInt32)
  120. }
  121. }
  122. func TestBufferWriteReadInt64(t *testing.T) {
  123. buf := NewBuffer()
  124. int64Val := int64(-9223372036854775808)
  125. buf.WriteInt64(int64Val)
  126. readBuf := NewBufferFromBytes(buf.Bytes())
  127. readInt64 := readBuf.ReadInt64()
  128. if readInt64 != int64Val {
  129. t.Errorf("Expected int64 value to be %v, got %v", int64Val, readInt64)
  130. }
  131. }
  132. func TestBufferBytes(t *testing.T) {
  133. buf := NewBuffer()
  134. buf.WriteInt(42)
  135. buf.WriteFloat64(3.14)
  136. unreadBytes := buf.Bytes()
  137. newBuf := NewBufferFromBytes(unreadBytes)
  138. intVal := newBuf.ReadInt()
  139. floatVal := newBuf.ReadFloat64()
  140. if intVal != 42 {
  141. t.Errorf("Expected int value to be 42, got %v", intVal)
  142. }
  143. if floatVal != 3.14 {
  144. t.Errorf("Expected float value to be 3.14, got %v", floatVal)
  145. }
  146. }
  147. func TestBufferNewBufferFrom(t *testing.T) {
  148. buf := NewBuffer()
  149. buf.WriteInt(42)
  150. buf.WriteFloat64(3.14)
  151. newBuf := NewBufferFrom(buf)
  152. intVal := newBuf.ReadInt()
  153. floatVal := newBuf.ReadFloat64()
  154. if intVal != 42 {
  155. t.Errorf("Expected int value to be 42, got %v", intVal)
  156. }
  157. if floatVal != 3.14 {
  158. t.Errorf("Expected float value to be 3.14, got %v", floatVal)
  159. }
  160. }
  161. const letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
  162. func generateRandomString(ln int) string {
  163. b := make([]byte, ln)
  164. for i := range b {
  165. b[i] = letters[rand.Intn(len(letters))]
  166. }
  167. return string(b)
  168. }
  169. func TestTooLargeStringTruncate(t *testing.T) {
  170. normalStr := generateRandomString(100)
  171. bigStr := generateRandomString(math.MaxUint16 + (math.MaxUint16 / 2))
  172. expectedBigStrRead := bigStr[:math.MaxUint16]
  173. otherBigStr := generateRandomString(math.MaxUint16)
  174. plusOne := generateRandomString(math.MaxUint16 + 1)
  175. expectedPlusOne := plusOne[:math.MaxUint16]
  176. buf := NewBuffer()
  177. buf.WriteInt(42)
  178. buf.WriteFloat64(3.14)
  179. buf.WriteString(normalStr)
  180. buf.WriteString(bigStr)
  181. buf.WriteString(otherBigStr)
  182. buf.WriteString(plusOne)
  183. readBuf := NewBufferFromBytes(buf.Bytes())
  184. intVal := readBuf.ReadInt()
  185. floatVal := readBuf.ReadFloat64()
  186. normalStrRead := readBuf.ReadString()
  187. bigStrRead := readBuf.ReadString()
  188. otherBigStrRead := readBuf.ReadString()
  189. plusOneRead := readBuf.ReadString()
  190. if intVal != 42 {
  191. t.Errorf("Expected int value to be 42, got %v", intVal)
  192. }
  193. if floatVal != 3.14 {
  194. t.Errorf("Expected float value to be 3.14, got %v", floatVal)
  195. }
  196. if normalStrRead != normalStr {
  197. t.Errorf("Expected string value to be %v, got %v", normalStr, normalStrRead)
  198. }
  199. if bigStrRead != expectedBigStrRead {
  200. t.Errorf("Expected large string values to be equivalent!")
  201. }
  202. if otherBigStrRead != otherBigStr {
  203. t.Errorf("Expected large string values to be equivalent!")
  204. }
  205. if plusOneRead != expectedPlusOne {
  206. t.Errorf("Expected large string values to be equivalent!")
  207. }
  208. }