fuzzy_decoder_test.go 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  1. package extra
  2. import (
  3. "testing"
  4. "github.com/json-iterator/go"
  5. "github.com/json-iterator/go/require"
  6. )
  7. func init() {
  8. RegisterFuzzyDecoders()
  9. }
  10. func Test_any_to_string(t *testing.T) {
  11. should := require.New(t)
  12. var val string
  13. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  14. should.Equal("100", val)
  15. should.Nil(jsoniter.UnmarshalFromString("10", &val))
  16. should.Equal("10", val)
  17. should.Nil(jsoniter.UnmarshalFromString("10.1", &val))
  18. should.Equal("10.1", val)
  19. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  20. should.Equal("10.1", val)
  21. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  22. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  23. }
  24. func Test_any_to_int64(t *testing.T) {
  25. should := require.New(t)
  26. var val int64
  27. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  28. should.Equal(int64(100), val)
  29. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  30. should.Equal(int64(10), val)
  31. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  32. should.Equal(int64(10), val)
  33. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  34. should.Equal(int64(10), val)
  35. should.Nil(jsoniter.UnmarshalFromString(`-10`, &val))
  36. should.Equal(int64(-10), val)
  37. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  38. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  39. // large float to int
  40. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  41. }
  42. func Test_any_to_int(t *testing.T) {
  43. should := require.New(t)
  44. var val int
  45. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  46. should.Equal(100, val)
  47. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  48. should.Equal(10, val)
  49. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  50. should.Equal(10, val)
  51. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  52. should.Equal(10, val)
  53. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  54. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  55. // large float to int
  56. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  57. }
  58. func Test_any_to_int16(t *testing.T) {
  59. should := require.New(t)
  60. var val int16
  61. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  62. should.Equal(int16(100), val)
  63. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  64. should.Equal(int16(10), val)
  65. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  66. should.Equal(int16(10), val)
  67. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  68. should.Equal(int16(10), val)
  69. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  70. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  71. // large float to int
  72. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  73. }
  74. func Test_any_to_int32(t *testing.T) {
  75. should := require.New(t)
  76. var val int32
  77. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  78. should.Equal(int32(100), val)
  79. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  80. should.Equal(int32(10), val)
  81. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  82. should.Equal(int32(10), val)
  83. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  84. should.Equal(int32(10), val)
  85. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  86. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  87. // large float to int
  88. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  89. }
  90. func Test_any_to_int8(t *testing.T) {
  91. should := require.New(t)
  92. var val int8
  93. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  94. should.Equal(int8(100), val)
  95. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  96. should.Equal(int8(10), val)
  97. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  98. should.Equal(int8(10), val)
  99. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  100. should.Equal(int8(10), val)
  101. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  102. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  103. // large float to int
  104. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  105. }
  106. func Test_any_to_uint8(t *testing.T) {
  107. should := require.New(t)
  108. var val uint8
  109. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  110. should.Equal(uint8(100), val)
  111. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  112. should.Equal(uint8(10), val)
  113. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  114. should.Equal(uint8(10), val)
  115. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  116. should.Equal(uint8(10), val)
  117. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  118. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  119. // large float to int
  120. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  121. }
  122. func Test_any_to_uint64(t *testing.T) {
  123. should := require.New(t)
  124. var val uint64
  125. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  126. should.Equal(uint64(100), val)
  127. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  128. should.Equal(uint64(10), val)
  129. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  130. should.Equal(uint64(10), val)
  131. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  132. should.Equal(uint64(10), val)
  133. // TODO fix?
  134. should.NotNil(jsoniter.UnmarshalFromString(`-10`, &val))
  135. should.Equal(uint64(0), val)
  136. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  137. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  138. // large float to int
  139. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  140. }
  141. func Test_any_to_uint32(t *testing.T) {
  142. should := require.New(t)
  143. var val uint32
  144. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  145. should.Equal(uint32(100), val)
  146. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  147. should.Equal(uint32(10), val)
  148. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  149. should.Equal(uint32(10), val)
  150. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  151. should.Equal(uint32(10), val)
  152. // TODO fix?
  153. should.NotNil(jsoniter.UnmarshalFromString(`-10`, &val))
  154. should.Equal(uint32(0), val)
  155. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  156. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  157. // large float to int
  158. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  159. }
  160. func Test_any_to_uint16(t *testing.T) {
  161. should := require.New(t)
  162. var val uint16
  163. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  164. should.Equal(uint16(100), val)
  165. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  166. should.Equal(uint16(10), val)
  167. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  168. should.Equal(uint16(10), val)
  169. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  170. should.Equal(uint16(10), val)
  171. // TODO fix?
  172. should.NotNil(jsoniter.UnmarshalFromString(`-10`, &val))
  173. should.Equal(uint16(0), val)
  174. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  175. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  176. // large float to int
  177. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  178. }
  179. func Test_any_to_uint(t *testing.T) {
  180. should := require.New(t)
  181. var val uint
  182. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  183. should.Equal(uint(100), val)
  184. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  185. should.Equal(uint(10), val)
  186. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  187. should.Equal(uint(10), val)
  188. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  189. should.Equal(uint(10), val)
  190. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  191. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  192. // large float to int
  193. should.NotNil(jsoniter.UnmarshalFromString(`1234512345123451234512345.0`, &val))
  194. }
  195. func Test_any_to_float32(t *testing.T) {
  196. should := require.New(t)
  197. var val float32
  198. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  199. should.Equal(float32(100), val)
  200. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  201. should.Equal(float32(10.1), val)
  202. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  203. should.Equal(float32(10.1), val)
  204. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  205. should.Equal(float32(10), val)
  206. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  207. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  208. }
  209. func Test_any_to_float64(t *testing.T) {
  210. should := require.New(t)
  211. var val float64
  212. should.Nil(jsoniter.UnmarshalFromString(`"100"`, &val))
  213. should.Equal(float64(100), val)
  214. should.Nil(jsoniter.UnmarshalFromString(`"10.1"`, &val))
  215. should.Equal(float64(10.1), val)
  216. should.Nil(jsoniter.UnmarshalFromString(`10.1`, &val))
  217. should.Equal(float64(10.1), val)
  218. should.Nil(jsoniter.UnmarshalFromString(`10`, &val))
  219. should.Equal(float64(10), val)
  220. should.NotNil(jsoniter.UnmarshalFromString("{}", &val))
  221. should.NotNil(jsoniter.UnmarshalFromString("[]", &val))
  222. }
  223. func Test_empty_array_as_map(t *testing.T) {
  224. should := require.New(t)
  225. var val map[string]interface{}
  226. should.Nil(jsoniter.UnmarshalFromString(`[]`, &val))
  227. should.Equal(map[string]interface{}{}, val)
  228. }
  229. func Test_empty_array_as_object(t *testing.T) {
  230. should := require.New(t)
  231. var val struct{}
  232. should.Nil(jsoniter.UnmarshalFromString(`[]`, &val))
  233. should.Equal(struct{}{}, val)
  234. }