mispec_ws2812_2.lua 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. require 'mispec'
  2. local buffer, buffer1, buffer2
  3. local function initBuffer(buffer, ...)
  4. local i,v
  5. for i,v in ipairs({...}) do
  6. buffer:set(i, v, v*2, v*3, v*4)
  7. end
  8. return buffer
  9. end
  10. local function equalsBuffer(buffer1, buffer2)
  11. return eq(buffer1:dump(), buffer2:dump())
  12. end
  13. describe('WS2812 buffers', function(it)
  14. it:should('shift LOGICAL', function()
  15. buffer1 = ws2812.newBuffer(4, 4)
  16. buffer2 = ws2812.newBuffer(4, 4)
  17. initBuffer(buffer1,7,8,9,12)
  18. initBuffer(buffer2,0,0,7,8)
  19. buffer1:shift(2)
  20. ok(equalsBuffer(buffer1, buffer2), "shift right")
  21. initBuffer(buffer1,7,8,9,12)
  22. initBuffer(buffer2,9,12,0,0)
  23. buffer1:shift(-2)
  24. ok(equalsBuffer(buffer1, buffer2), "shift left")
  25. initBuffer(buffer1,7,8,9,12)
  26. initBuffer(buffer2,7,0,8,12)
  27. buffer1:shift(1, nil, 2,3)
  28. ok(equalsBuffer(buffer1, buffer2), "shift middle right")
  29. initBuffer(buffer1,7,8,9,12)
  30. initBuffer(buffer2,7,9,0,12)
  31. buffer1:shift(-1, nil, 2,3)
  32. ok(equalsBuffer(buffer1, buffer2), "shift middle left")
  33. -- bounds checks, handle gracefully as string:sub does
  34. initBuffer(buffer1,7,8,9,12)
  35. initBuffer(buffer2,8,9,12,0)
  36. buffer1:shift(-1, ws2812.SHIFT_LOGICAL, 0,5)
  37. ok(equalsBuffer(buffer1, buffer2), "shift left out of bound")
  38. initBuffer(buffer1,7,8,9,12)
  39. initBuffer(buffer2,0,7,8,9)
  40. buffer1:shift(1, ws2812.SHIFT_LOGICAL, 0,5)
  41. ok(equalsBuffer(buffer1, buffer2), "shift right out of bound")
  42. end)
  43. it:should('shift LOGICAL issue #2946', function()
  44. buffer1 = ws2812.newBuffer(4, 4)
  45. buffer2 = ws2812.newBuffer(4, 4)
  46. initBuffer(buffer1,7,8,9,12)
  47. initBuffer(buffer2,0,0,0,0)
  48. buffer1:shift(4)
  49. ok(equalsBuffer(buffer1, buffer2), "shift all right")
  50. initBuffer(buffer1,7,8,9,12)
  51. initBuffer(buffer2,0,0,0,0)
  52. buffer1:shift(-4)
  53. ok(equalsBuffer(buffer1, buffer2), "shift all left")
  54. failwith("shifting more elements than buffer size", function() buffer1:shift(10) end)
  55. failwith("shifting more elements than buffer size", function() buffer1:shift(-6) end)
  56. end)
  57. it:should('shift CIRCULAR', function()
  58. buffer1 = ws2812.newBuffer(4, 4)
  59. buffer2 = ws2812.newBuffer(4, 4)
  60. initBuffer(buffer1,7,8,9,12)
  61. initBuffer(buffer2,9,12,7,8)
  62. buffer1:shift(2, ws2812.SHIFT_CIRCULAR)
  63. ok(equalsBuffer(buffer1, buffer2), "shift right")
  64. initBuffer(buffer1,7,8,9,12)
  65. initBuffer(buffer2,9,12,7,8)
  66. buffer1:shift(-2, ws2812.SHIFT_CIRCULAR)
  67. ok(equalsBuffer(buffer1, buffer2), "shift left")
  68. initBuffer(buffer1,7,8,9,12)
  69. initBuffer(buffer2,7,9,8,12)
  70. buffer1:shift(1, ws2812.SHIFT_CIRCULAR, 2,3)
  71. ok(equalsBuffer(buffer1, buffer2), "shift middle right")
  72. initBuffer(buffer1,7,8,9,12)
  73. initBuffer(buffer2,7,9,8,12)
  74. buffer1:shift(-1, ws2812.SHIFT_CIRCULAR, 2,3)
  75. ok(equalsBuffer(buffer1, buffer2), "shift middle left")
  76. -- bounds checks, handle gracefully as string:sub does
  77. initBuffer(buffer1,7,8,9,12)
  78. initBuffer(buffer2,8,9,12,7)
  79. buffer1:shift(-1, ws2812.SHIFT_CIRCULAR, 0,5)
  80. ok(equalsBuffer(buffer1, buffer2), "shift left out of bound")
  81. initBuffer(buffer1,7,8,9,12)
  82. initBuffer(buffer2,12,7,8,9)
  83. buffer1:shift(1, ws2812.SHIFT_CIRCULAR, 0,5)
  84. ok(equalsBuffer(buffer1, buffer2), "shift right out of bound")
  85. initBuffer(buffer1,7,8,9,12)
  86. initBuffer(buffer2,12,7,8,9)
  87. buffer1:shift(1, ws2812.SHIFT_CIRCULAR, -12,12)
  88. ok(equalsBuffer(buffer1, buffer2), "shift right way out of bound")
  89. end)
  90. it:should('sub', function()
  91. buffer1 = ws2812.newBuffer(4, 4)
  92. buffer2 = ws2812.newBuffer(4, 4)
  93. initBuffer(buffer1,7,8,9,12)
  94. buffer1 = buffer1:sub(4,3)
  95. ok(eq(buffer1:size(), 0), "sub empty")
  96. buffer1 = ws2812.newBuffer(4, 4)
  97. buffer2 = ws2812.newBuffer(2, 4)
  98. initBuffer(buffer1,7,8,9,12)
  99. initBuffer(buffer2,9,12)
  100. buffer1 = buffer1:sub(3,4)
  101. ok(equalsBuffer(buffer1, buffer2), "sub")
  102. buffer1 = ws2812.newBuffer(4, 4)
  103. buffer2 = ws2812.newBuffer(4, 4)
  104. initBuffer(buffer1,7,8,9,12)
  105. initBuffer(buffer2,7,8,9,12)
  106. buffer1 = buffer1:sub(-12,33)
  107. ok(equalsBuffer(buffer1, buffer2), "out of bounds")
  108. end)
  109. --[[
  110. ws2812.buffer:__concat()
  111. --]]
  112. end)
  113. mispec.run()