index_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. package base
  2. import (
  3. "bytes"
  4. "github.com/stretchr/testify/assert"
  5. "strconv"
  6. "testing"
  7. )
  8. func TestMapIndex(t *testing.T) {
  9. // Null indexer
  10. var index *MapIndex
  11. assert.Zero(t, index.Len())
  12. // Create a indexer
  13. index = NewMapIndex()
  14. assert.Zero(t, index.Len())
  15. // Add Names
  16. index.Add("1")
  17. index.Add("2")
  18. index.Add("4")
  19. index.Add("8")
  20. assert.Equal(t, int32(4), index.Len())
  21. assert.Equal(t, int32(0), index.ToNumber("1"))
  22. assert.Equal(t, int32(1), index.ToNumber("2"))
  23. assert.Equal(t, int32(2), index.ToNumber("4"))
  24. assert.Equal(t, int32(3), index.ToNumber("8"))
  25. assert.Equal(t, NotId, index.ToNumber("1000"))
  26. assert.Equal(t, "1", index.ToName(0))
  27. assert.Equal(t, "2", index.ToName(1))
  28. assert.Equal(t, "4", index.ToName(2))
  29. assert.Equal(t, "8", index.ToName(3))
  30. // Get names
  31. assert.Equal(t, []string{"1", "2", "4", "8"}, index.GetNames())
  32. // Encode and decode
  33. buf := bytes.NewBuffer(nil)
  34. err := MarshalIndex(buf, index)
  35. assert.NoError(t, err)
  36. indexCopy, err := UnmarshalIndex(buf)
  37. assert.NoError(t, err)
  38. assert.Equal(t, index, indexCopy)
  39. // Index size
  40. assert.Equal(t, 200, index.Bytes())
  41. }
  42. func TestDirectIndex(t *testing.T) {
  43. // Create a indexer
  44. index := NewDirectIndex()
  45. assert.Zero(t, index.Len())
  46. // Add Names
  47. index.Add("1")
  48. index.Add("2")
  49. index.Add("4")
  50. index.Add("8")
  51. assert.Panics(t, func() { index.Add("abc") })
  52. assert.Equal(t, int32(9), index.Len())
  53. assert.Equal(t, int32(1), index.ToNumber("1"))
  54. assert.Equal(t, int32(2), index.ToNumber("2"))
  55. assert.Equal(t, int32(4), index.ToNumber("4"))
  56. assert.Equal(t, int32(8), index.ToNumber("8"))
  57. assert.Equal(t, NotId, index.ToNumber("1000"))
  58. assert.Panics(t, func() { index.ToNumber("abc") })
  59. assert.Equal(t, "0", index.ToName(0))
  60. assert.Equal(t, "1", index.ToName(1))
  61. assert.Equal(t, "2", index.ToName(2))
  62. assert.Equal(t, "3", index.ToName(3))
  63. assert.Panics(t, func() { index.ToName(10) })
  64. // Get names
  65. names := index.GetNames()
  66. assert.Equal(t, 9, len(names))
  67. for i := range names {
  68. assert.Equal(t, strconv.Itoa(i), names[i])
  69. }
  70. // Encode and decode
  71. buf := bytes.NewBuffer(nil)
  72. err := MarshalIndex(buf, index)
  73. assert.NoError(t, err)
  74. indexCopy, err := UnmarshalIndex(buf)
  75. assert.NoError(t, err)
  76. assert.Equal(t, index, indexCopy)
  77. // Byte size
  78. assert.Equal(t, 4, index.Bytes())
  79. }