gmsl-tests 33 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822
  1. # ----------------------------------------------------------------------------
  2. #
  3. # GNU Make Standard Library (GMSL) Test Suite
  4. #
  5. # Test suite for the GMSL
  6. #
  7. # Copyright (c) 2005-2018 John Graham-Cumming
  8. #
  9. # This file is part of GMSL
  10. #
  11. # Redistribution and use in source and binary forms, with or without
  12. # modification, are permitted provided that the following conditions
  13. # are met:
  14. #
  15. # Redistributions of source code must retain the above copyright
  16. # notice, this list of conditions and the following disclaimer.
  17. #
  18. # Redistributions in binary form must reproduce the above copyright
  19. # notice, this list of conditions and the following disclaimer in the
  20. # documentation and/or other materials provided with the distribution.
  21. #
  22. # Neither the name of the John Graham-Cumming nor the names of its
  23. # contributors may be used to endorse or promote products derived from
  24. # this software without specific prior written permission.
  25. #
  26. # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  27. # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  28. # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
  29. # FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
  30. # COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
  31. # INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  32. # BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  33. # LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  34. # CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  35. # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  36. # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
  37. # POSSIBILITY OF SUCH DAMAGE.
  38. #
  39. # ----------------------------------------------------------------------------
  40. ifdef EXPORT_ALL
  41. .EXPORT_ALL_VARIABLES:
  42. endif
  43. .PHONY: all
  44. all:
  45. @echo
  46. @echo Test Summary
  47. @echo ------------
  48. @echo "$(call int_decode,$(passed)) tests passed; $(call int_decode,$(failed)) tests failed"
  49. include gmsl
  50. passed :=
  51. failed :=
  52. ECHO := /bin/echo
  53. start_test = $(if $0,$(shell $(ECHO) -n "Testing '$1': " >&2))$(eval current_test := OK)
  54. stop_test = $(if $0,$(shell $(ECHO) " $(current_test)" >&2))
  55. test_pass = .$(eval passed := $(call int_inc,$(passed)))
  56. test_fail = X$(eval failed := $(call int_inc,$(failed)))$(eval current_test := ERROR '$1' != '$2')
  57. test_assert = $(if $0,$(if $(filter undefined,$(origin 2)),$(eval 2 :=))$(shell $(ECHO) -n $(if $(call seq,$1,$2),$(call test_pass,$1,$2),$(call test_fail,$1,$2)) >&2))
  58. $(call start_test,not)
  59. $(call test_assert,$(call not,$(true)),$(false))
  60. $(call test_assert,$(call not,$(false)),$(true))
  61. $(call stop_test)
  62. $(call start_test,or)
  63. $(call test_assert,$(call or,$(true),$(true)),$(true))
  64. $(call test_assert,$(call or,$(true),$(false)),$(true))
  65. $(call test_assert,$(call or,$(false),$(true)),$(true))
  66. $(call test_assert,$(call or,$(false),$(false)),$(false))
  67. $(call stop_test)
  68. $(call start_test,and)
  69. $(call test_assert,$(call and,$(true),$(true)),$(true))
  70. $(call test_assert,$(call and,$(true),$(false)),$(false))
  71. $(call test_assert,$(call and,$(false),$(true)),$(false))
  72. $(call test_assert,$(call and,$(false),$(false)),$(false))
  73. $(call stop_test)
  74. $(call start_test,xor)
  75. $(call test_assert,$(call xor,$(true),$(true)),$(false))
  76. $(call test_assert,$(call xor,$(true),$(false)),$(true))
  77. $(call test_assert,$(call xor,$(false),$(true)),$(true))
  78. $(call test_assert,$(call xor,$(false),$(false)),$(false))
  79. $(call stop_test)
  80. $(call start_test,nand)
  81. $(call test_assert,$(call nand,$(true),$(true)),$(false))
  82. $(call test_assert,$(call nand,$(true),$(false)),$(true))
  83. $(call test_assert,$(call nand,$(false),$(true)),$(true))
  84. $(call test_assert,$(call nand,$(false),$(false)),$(true))
  85. $(call stop_test)
  86. $(call start_test,nor)
  87. $(call test_assert,$(call nor,$(true),$(true)),$(false))
  88. $(call test_assert,$(call nor,$(true),$(false)),$(false))
  89. $(call test_assert,$(call nor,$(false),$(true)),$(false))
  90. $(call test_assert,$(call nor,$(false),$(false)),$(true))
  91. $(call stop_test)
  92. $(call start_test,xnor)
  93. $(call test_assert,$(call xnor,$(true),$(true)),$(true))
  94. $(call test_assert,$(call xnor,$(true),$(false)),$(false))
  95. $(call test_assert,$(call xnor,$(false),$(true)),$(false))
  96. $(call test_assert,$(call xnor,$(false),$(false)),$(true))
  97. $(call stop_test)
  98. $(call start_test,first)
  99. $(call test_assert,$(call first,1 2 3),1)
  100. $(call test_assert,$(call first,1),1)
  101. $(call test_assert,$(call first,),)
  102. $(call stop_test)
  103. $(call start_test,last)
  104. $(call test_assert,$(call last,1 2 3),3)
  105. $(call test_assert,$(call last,1),1)
  106. $(call test_assert,$(call last,),)
  107. $(call stop_test)
  108. $(call start_test,rest)
  109. $(call test_assert,$(call rest,1 2 3),2 3)
  110. $(call test_assert,$(call rest,1),)
  111. $(call test_assert,$(call rest,),)
  112. $(call stop_test)
  113. $(call start_test,chop)
  114. $(call test_assert,$(call chop,1 2 3),1 2)
  115. $(call test_assert,$(call chop,1 2 3 4),1 2 3)
  116. $(call test_assert,$(call chop,1),)
  117. $(call test_assert,$(call chop,),)
  118. $(call stop_test)
  119. $(call start_test,length)
  120. $(call test_assert,$(call length,1 2 3),3)
  121. $(call test_assert,$(call length,1 2 3 4),4)
  122. $(call test_assert,$(call length,1),1)
  123. $(call test_assert,$(call length,),0)
  124. $(call stop_test)
  125. $(call start_test,map)
  126. $(call test_assert,$(call map,origin,__undefined map MAKE),undefined file default)
  127. $(call test_assert,$(call map,origin,),)
  128. $(call stop_test)
  129. joinem = $1$2
  130. $(call start_test,pairmap)
  131. $(call test_assert,$(call pairmap,addsuffix,2 1 3,a b c),a2 b1 c3)
  132. $(call test_assert,$(call pairmap,addprefix,2 1 3,a b c d),2a 1b 3c d)
  133. $(call test_assert,$(call pairmap,addprefix,2 1 3 4,a b c),2a 1b 3c)
  134. $(call test_assert,$(call pairmap,joinem,2 1 3 4,a b c),2a 1b 3c 4)
  135. $(call stop_test)
  136. $(call start_test,seq)
  137. $(call test_assert,$(call seq,abc,abc),T)
  138. $(call test_assert,$(call seq,x,),)
  139. $(call test_assert,$(call seq,,x),)
  140. $(call test_assert,$(call seq,x,x),T)
  141. $(call test_assert,$(call seq,a%c,abc),)
  142. $(call test_assert,$(call seq,abc,a%c),)
  143. $(call test_assert,$(call seq,abc,ABC),)
  144. $(call test_assert,$(call seq,abc,),)
  145. $(call test_assert,$(call seq,,),T)
  146. $(call test_assert,$(call seq,a b c,a b c),T)
  147. $(call test_assert,$(call seq,aa% bb% cc,aa% bb% cc),T)
  148. $(call test_assert,$(call seq,aa% bb% cc,aa% bb cc),)
  149. $(call test_assert,$(call seq,aa% bb% cc,xx yy zz),)
  150. $(call test_assert,$(call seq,x x,),)
  151. $(call test_assert,$(call seq, xx x,x xx),)
  152. $(call test_assert,$(call seq, x xx,x xx),)
  153. $(call test_assert,$(call seq,$(__gmsl_space)x xx,x xx),)
  154. $(call test_assert,$(call seq, , ),)
  155. $(call test_assert,$(call seq, , ),)
  156. $(call test_assert,$(call seq, , ),)
  157. $(call test_assert,$(call seq, , ),)
  158. $(call test_assert,$(call seq, , ),)
  159. $(call test_assert,$(call seq, , ),T)
  160. $(call test_assert,$(call seq,, ),)
  161. $(call test_assert,$(call seq, ,),)
  162. $(call test_assert,$(call seq,y,xy),)
  163. $(call test_assert,$(call seq,$(__gmsl_space),$(__gmsl_tab)),)
  164. $(call test_assert,$(call seq, $(__gmsl_space) , $(__gmsl_space) ),T)
  165. $(call test_assert,$(call seq,$(__gmsl_tab),$(__gmsl_tab)),T)
  166. $(call test_assert,$(call seq,yy,yyyy),)
  167. $(call test_assert,$(call seq,yyyy,yy),)
  168. $(call stop_test)
  169. $(call start_test,sne)
  170. $(call test_assert,$(call sne,abc,abc),)
  171. $(call test_assert,$(call sne,x,),T)
  172. $(call test_assert,$(call sne,,x),T)
  173. $(call test_assert,$(call sne,x,x),)
  174. $(call test_assert,$(call sne,abc,ABC),T)
  175. $(call test_assert,$(call sne,abc,),T)
  176. $(call test_assert,$(call sne,,),)
  177. $(call test_assert,$(call sne,a b c,a b c),)
  178. $(call test_assert,$(call sne,aa% bb% cc,aa% bb% cc),)
  179. $(call test_assert,$(call sne,aa% bb% cc,aa% bb cc),T)
  180. $(call stop_test)
  181. $(call start_test,strlen)
  182. $(call test_assert,$(call strlen,),0)
  183. $(call test_assert,$(call strlen,a),1)
  184. $(call test_assert,$(call strlen,a b),3)
  185. $(call test_assert,$(call strlen,a ),2)
  186. $(call test_assert,$(call strlen, a),2)
  187. $(call test_assert,$(call strlen, ),2)
  188. $(call test_assert,$(call strlen, ),3)
  189. $(call test_assert,$(call strlen, ),4)
  190. $(call stop_test)
  191. $(call start_test,substr)
  192. $(call test_assert,$(call substr,xyz,1,1),x)
  193. $(call test_assert,$(call substr,xyz,1,2),xy)
  194. $(call test_assert,$(call substr,xyz,2,3),yz)
  195. $(call test_assert,$(call substr,some string,1,1),s)
  196. $(call test_assert,$(call substr,some string,1,2),so)
  197. $(call test_assert,$(call substr,some string,1,3),som)
  198. $(call test_assert,$(call substr,some string,1,4),some)
  199. $(call test_assert,$(call substr,some string,1,5),some )
  200. $(call test_assert,$(call substr,some string,1,6),some s)
  201. $(call test_assert,$(call substr,some string,5,5), )
  202. $(call test_assert,$(call substr,some string,5,6), s)
  203. $(call test_assert,$(call substr,some string,5,7), st)
  204. $(call test_assert,$(call substr,some string,5,8), str)
  205. $(call test_assert,$(call substr,some string,1,100),some string)
  206. $(call stop_test)
  207. $(call start_test,lc)
  208. $(call test_assert,$(call lc,The Quick Brown Fox),the quick brown fox)
  209. $(call test_assert,$(call lc,the1 quick2 brown3 fox4),the1 quick2 brown3 fox4)
  210. $(call test_assert,$(call lc,The_),the_)
  211. $(call test_assert,$(call lc,),)
  212. $(call stop_test)
  213. $(call start_test,uc)
  214. $(call test_assert,$(call uc,The Quick Brown Fox),THE QUICK BROWN FOX)
  215. $(call test_assert,$(call uc,the1 quick2 brown3 fox4),THE1 QUICK2 BROWN3 FOX4)
  216. $(call test_assert,$(call uc,The_),THE_)
  217. $(call test_assert,$(call uc,),)
  218. $(call stop_test)
  219. $(call start_test,tr)
  220. $(call test_assert,$(call tr,A B C,1 2 3,CAPITAL),31PIT1L)
  221. $(call test_assert,$(call tr,a b c,1 2 3,CAPITAL),CAPITAL)
  222. $(call test_assert,$(call tr,E L I,3 1 1,I AM ELITE),1 AM 311T3)
  223. $(call stop_test)
  224. $(call start_test,leq)
  225. $(call test_assert,$(call leq,1 2 3,1 2 3),T)
  226. $(call test_assert,$(call leq,1 2 3,1 2 3 4),)
  227. $(call test_assert,$(call leq,1 2 3 4,1 2 3),)
  228. $(call test_assert,$(call leq,1,1),T)
  229. $(call test_assert,$(call leq,,),T)
  230. $(call stop_test)
  231. $(call start_test,lne)
  232. $(call test_assert,$(call lne,1 2 3,1 2 3),)
  233. $(call test_assert,$(call lne,1 2 3,1 2 3 4),T)
  234. $(call test_assert,$(call lne,1 2 3 4,1 2 3),T)
  235. $(call test_assert,$(call lne,1,1),)
  236. $(call test_assert,$(call lne,,),)
  237. $(call stop_test)
  238. $(call start_test,empty_set)
  239. $(call test_assert,$(empty_set),)
  240. $(call test_assert,$(empty_set),$(call set_create,))
  241. $(call stop_test)
  242. $(call start_test,set_create)
  243. $(call test_assert,$(call set_create,),)
  244. $(call test_assert,$(call set_create,1 2 2 3),1 2 3)
  245. $(call test_assert,$(call set_create,2 1 1 2 2 3),1 2 3)
  246. $(call test_assert,$(call set_create,1),1)
  247. $(call stop_test)
  248. $(call start_test,set_insert)
  249. $(call test_assert,$(call set_insert,1,$(empty_set)),1)
  250. $(call test_assert,$(call set_insert,1,$(call set_create,1)),1)
  251. $(call test_assert,$(call set_insert,1,$(call set_create,1 2)),1 2)
  252. $(call test_assert,$(call set_insert,0,$(call set_create,1 2)),0 1 2)
  253. $(call stop_test)
  254. $(call start_test,set_remove)
  255. $(call test_assert,$(call set_remove,1,$(empty_set)),$(empty_set))
  256. $(call test_assert,$(call set_remove,1,$(call set_create,1 2)),2)
  257. $(call test_assert,$(call set_remove,1,$(call set_create,1 11 2)),11 2)
  258. $(call test_assert,$(call set_remove,0,$(call set_create,1 2)),1 2)
  259. $(call stop_test)
  260. $(call start_test,set_is_member)
  261. $(call test_assert,$(call set_is_member,1,$(empty_set)),)
  262. $(call test_assert,$(call set_is_member,1,$(call set_create,2 3)),)
  263. $(call test_assert,$(call set_is_member,1,$(call set_create,1 2 3)),T)
  264. $(call test_assert,$(call set_is_member,1,$(call set_create,1)),T)
  265. $(call stop_test)
  266. $(call start_test,set_is_not_member)
  267. $(call test_assert,$(call set_is_not_member,1,$(empty_set)),T)
  268. $(call test_assert,$(call set_is_not_member,1,$(call set_create,2 3)),T)
  269. $(call test_assert,$(call set_is_not_member,1,$(call set_create,1 2 3)),)
  270. $(call test_assert,$(call set_is_not_member,1,$(call set_create,1)),)
  271. $(call stop_test)
  272. $(call start_test,set_union)
  273. $(call test_assert,$(call set_union,,),)
  274. $(call test_assert,$(call set_union,1 2,),1 2)
  275. $(call test_assert,$(call set_union,,3 4),3 4)
  276. $(call test_assert,$(call set_union,1 2,3 4),1 2 3 4)
  277. $(call test_assert,$(call set_union,1 2 3,3 4 5),1 2 3 4 5)
  278. $(call stop_test)
  279. $(call start_test,set_intersection)
  280. $(call test_assert,$(call set_intersection,,),)
  281. $(call test_assert,$(call set_intersection,1 2,),)
  282. $(call test_assert,$(call set_intersection,,3 4),)
  283. $(call test_assert,$(call set_intersection,1 2,3 4),)
  284. $(call test_assert,$(call set_intersection,1 2 3 4,3 4 5),3 4)
  285. $(call stop_test)
  286. $(call start_test,set_is_subset)
  287. $(call test_assert,$(call set_is_subset,,),T)
  288. $(call test_assert,$(call set_is_subset,1 2,),)
  289. $(call test_assert,$(call set_is_subset,,3 4),T)
  290. $(call test_assert,$(call set_is_subset,1 2,3 4),)
  291. $(call test_assert,$(call set_is_subset,1 2,1 2 3 4 5),T)
  292. $(call test_assert,$(call set_is_subset,1 2,1 2),T)
  293. $(call test_assert,$(call set_is_subset,1 2,1 3 4 5),)
  294. $(call stop_test)
  295. $(call start_test,set_equal)
  296. $(call test_assert,$(call set_equal,,),T)
  297. $(call test_assert,$(call set_equal,1,),)
  298. $(call test_assert,$(call set_equal,,1),)
  299. $(call test_assert,$(call set_equal,1,1),T)
  300. $(call test_assert,$(call set_equal,1 2,),)
  301. $(call test_assert,$(call set_equal,,1 2),)
  302. $(call test_assert,$(call set_equal,1 2,1 2 3),)
  303. $(call stop_test)
  304. $(call start_test,__strip_leading_zero)
  305. $(call test_assert,$(call __strip_leading_zero,),0)
  306. $(call test_assert,$(call __strip_leading_zero,0),0)
  307. $(call test_assert,$(call __strip_leading_zero,0000),0)
  308. $(call test_assert,$(call __strip_leading_zero,1),1)
  309. $(call test_assert,$(call __strip_leading_zero,10),10)
  310. $(call test_assert,$(call __strip_leading_zero,01),1)
  311. $(call test_assert,$(call __strip_leading_zero,001),1)
  312. $(call test_assert,$(call __strip_leading_zero,0010),10)
  313. $(call test_assert,$(call __strip_leading_zero,00000011000),11000)
  314. $(call stop_test)
  315. $(call start_test,int_encode)
  316. $(call test_assert,$(call int_encode,0),)
  317. $(call test_assert,$(call int_encode,1),x)
  318. $(call test_assert,$(call int_encode,001),x)
  319. $(call test_assert,$(call int_encode,2),x x)
  320. $(call test_assert,$(call int_encode,10),x x x x x x x x x x)
  321. $(call test_assert,$(words $(call int_encode,123)),123)
  322. $(call test_assert,$(words $(call int_encode,1234)),1234)
  323. $(call test_assert,$(words $(call int_encode,12345)),12345)
  324. $(call test_assert,$(words $(call int_encode,012345)),12345)
  325. $(call test_assert,$(words $(call int_encode,1000000)),1000000)
  326. $(call stop_test)
  327. $(call start_test,int_decode)
  328. $(call test_assert,$(call int_decode,),0)
  329. $(call test_assert,$(call int_decode,x),1)
  330. $(call test_assert,$(call int_decode,x x),2)
  331. $(call test_assert,$(call int_decode,x x x x x x x x x x),10)
  332. $(call stop_test)
  333. $(call start_test,int_plus)
  334. $(call test_assert,$(call int_plus,$(call int_encode,3),$(call int_encode,4)),$(call int_encode,7))
  335. $(call test_assert,$(call int_plus,$(call int_encode,0),$(call int_encode,4)),$(call int_encode,4))
  336. $(call test_assert,$(call int_plus,$(call int_encode,3),$(call int_encode,0)),$(call int_encode,3))
  337. $(call test_assert,$(call int_plus,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))
  338. $(call test_assert,$(call int_plus,$(call int_encode,1),$(call int_encode,0)),$(call int_encode,1))
  339. $(call stop_test)
  340. $(call start_test,plus)
  341. $(call test_assert,$(call plus,3,4),7)
  342. $(call test_assert,$(call plus,4,3),7)
  343. $(call test_assert,$(call plus,0,4),4)
  344. $(call test_assert,$(call plus,3,0),3)
  345. $(call test_assert,$(call plus,03,00),3)
  346. $(call test_assert,$(call plus,0,0),0)
  347. $(call stop_test)
  348. __gmsl_warning = $1
  349. $(call start_test,int_subtract)
  350. $(call test_assert,$(call int_subtract,$(call int_encode,3),$(call int_encode,4)),Subtraction underflow)
  351. $(call test_assert,$(call int_subtract,$(call int_encode,4),$(call int_encode,3)),$(call int_encode,1))
  352. $(call test_assert,$(call int_subtract,$(call int_encode,3),$(call int_encode,0)),$(call int_encode,3))
  353. $(call test_assert,$(call int_subtract,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))
  354. $(call test_assert,$(call int_subtract,$(call int_encode,1),$(call int_encode,0)),$(call int_encode,1))
  355. $(call stop_test)
  356. __gmsl_warning = x x x x x x x x x x
  357. $(call start_test,subtract)
  358. $(call test_assert,$(call subtract,3,4),10)
  359. $(call test_assert,$(call subtract,4,3),1)
  360. $(call test_assert,$(call subtract,3,0),3)
  361. $(call test_assert,$(call subtract,0,0),0)
  362. $(call stop_test)
  363. $(call start_test,int_multiply)
  364. $(call test_assert,$(call int_multiply,$(call int_encode,3),$(call int_encode,4)),$(call int_encode,12))
  365. $(call test_assert,$(call int_multiply,$(call int_encode,4),$(call int_encode,3)),$(call int_encode,12))
  366. $(call test_assert,$(call int_multiply,$(call int_encode,3),$(call int_encode,0)),$(call int_encode,0))
  367. $(call test_assert,$(call int_multiply,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))
  368. $(call test_assert,$(call int_multiply,$(call int_encode,1),$(call int_encode,0)),$(call int_encode,0))
  369. $(call stop_test)
  370. $(call start_test,multiply)
  371. $(call test_assert,$(call multiply,3,4),12)
  372. $(call test_assert,$(call multiply,4,3),12)
  373. $(call test_assert,$(call multiply,3,0),0)
  374. $(call test_assert,$(call multiply,0,3),0)
  375. $(call test_assert,$(call multiply,0,0),0)
  376. $(call stop_test)
  377. __gmsl_error = $1
  378. $(call start_test,int_divide)
  379. $(call test_assert,$(call int_divide,$(call int_encode,3),$(call int_encode,4)),$(call int_encode,0))
  380. $(call test_assert,$(call int_divide,$(call int_encode,4),$(call int_encode,3)),$(call int_encode,1))
  381. $(call test_assert,$(call int_divide,$(call int_encode,31),$(call int_encode,3)),$(call int_encode,10))
  382. $(call test_assert,$(call int_divide,$(call int_encode,30),$(call int_encode,3)),$(call int_encode,10))
  383. $(call test_assert,$(call int_divide,$(call int_encode,29),$(call int_encode,3)),$(call int_encode,9))
  384. $(call test_assert,$(call int_divide,$(call int_encode,0),$(call int_encode,1)),$(call int_encode,0))
  385. $(call test_assert,$(call int_divide,$(call int_encode,1),$(call int_encode,0)),Division by zero)
  386. $(call stop_test)
  387. $(call start_test,int_modulo)
  388. $(call test_assert,$(call int_modulo,$(call int_encode,3),$(call int_encode,4)),$(call int_encode,3))
  389. $(call test_assert,$(call int_modulo,$(call int_encode,4),$(call int_encode,3)),$(call int_encode,1))
  390. $(call test_assert,$(call int_modulo,$(call int_encode,31),$(call int_encode,3)),$(call int_encode,1))
  391. $(call test_assert,$(call int_modulo,$(call int_encode,30),$(call int_encode,3)),$(call int_encode,0))
  392. $(call test_assert,$(call int_modulo,$(call int_encode,29),$(call int_encode,3)),$(call int_encode,2))
  393. $(call test_assert,$(call int_modulo,$(call int_encode,0),$(call int_encode,1)),$(call int_encode,0))
  394. $(call test_assert,$(call int_modulo,$(call int_encode,1),$(call int_encode,0)),Division by zero)
  395. $(call stop_test)
  396. __gmsl_error = $1
  397. $(call start_test,divide)
  398. $(call test_assert,$(call divide,3,4),0)
  399. $(call test_assert,$(call divide,4,3),1)
  400. $(call test_assert,$(call divide,21,2),10)
  401. $(call test_assert,$(call divide,20,2),10)
  402. $(call test_assert,$(call divide,19,2),9)
  403. $(call test_assert,$(call divide,1,0),Division by zero)
  404. $(call stop_test)
  405. $(call start_test,modulo)
  406. $(call test_assert,$(call modulo,3,4),3)
  407. $(call test_assert,$(call modulo,4,3),1)
  408. $(call test_assert,$(call modulo,21,2),1)
  409. $(call test_assert,$(call modulo,20,2),0)
  410. $(call test_assert,$(call modulo,17,3),2)
  411. $(call test_assert,$(call modulo,1,0),Division by zero)
  412. $(call stop_test)
  413. $(call start_test,dec2hex)
  414. $(call test_assert,$(call dec2hex,0),0)
  415. $(call test_assert,$(call dec2hex,1),1)
  416. $(call test_assert,$(call dec2hex,10),a)
  417. $(call test_assert,$(call dec2hex,15),f)
  418. $(call test_assert,$(call dec2hex,254),fe)
  419. $(call test_assert,$(call dec2hex,255),ff)
  420. $(call test_assert,$(call dec2hex,513),201)
  421. $(call stop_test)
  422. $(call start_test,dec2oct)
  423. $(call test_assert,$(call dec2oct,0),0)
  424. $(call test_assert,$(call dec2oct,1),1)
  425. $(call test_assert,$(call dec2oct,8),10)
  426. $(call test_assert,$(call dec2oct,15),17)
  427. $(call test_assert,$(call dec2oct,1024),2000)
  428. $(call test_assert,$(call dec2oct,1025),2001)
  429. $(call stop_test)
  430. $(call start_test,dec2bin)
  431. $(call test_assert,$(call dec2bin,0),0)
  432. $(call test_assert,$(call dec2bin,1),1)
  433. $(call test_assert,$(call dec2bin,8),1000)
  434. $(call test_assert,$(call dec2bin,15),1111)
  435. $(call test_assert,$(call dec2bin,1024),10000000000)
  436. $(call test_assert,$(call dec2bin,1025),10000000001)
  437. $(call stop_test)
  438. $(call start_test,associative array)
  439. $(call test_assert,$(call get,myarray,key1),)
  440. $(call test_assert,$(call set,myarray,key1,value1),)
  441. $(call test_assert,$(call get,myarray,key1),value1)
  442. $(call test_assert,$(call get,myarray,key2),)
  443. $(call test_assert,$(call get,myarray1,key1),)
  444. $(call test_assert,$(call defined,myarray,key1),T)
  445. $(call test_assert,$(call defined,myarray,key2),)
  446. $(call test_assert,$(call defined,myarray1,key1),)
  447. $(call test_assert,$(call set,myarray,key2,value2),)
  448. $(call test_assert,$(call keys,myarray),key1 key2)
  449. $(call test_assert,$(call keys,myarray1),)
  450. $(call test_assert,$(call set,foo,bar_baz,bob),)
  451. $(call test_assert,$(call set,foo_bar,baz,alice),)
  452. $(call test_assert,$(call get,foo,bar_baz),bob)
  453. $(call test_assert,$(call get,foo_bar,baz),alice)
  454. $(call test_assert,$(call set,foo,bar,baz/baz),)
  455. $(call test_assert,$(call get,foo,bar),baz/baz)
  456. $(call test-assert,$(call set,foo,bar-baz,baz),)
  457. $(call test_assert,$(call get,foo,bar-baz),baz)
  458. $(call set,foo,bar-baz,baz)
  459. $(call set,foo,bar,baz/baz)
  460. $(call stop_test)
  461. $(call start_test,named stack)
  462. $(call test_assert,$(call pop,mystack),)
  463. $(call test_assert,$(call push,mystack,e2))
  464. $(call push,mystack,e1)
  465. $(call test_assert,$(call pop,mystack),e1)
  466. $(call test_assert,$(call pop,mystack),e2)
  467. $(call push,mystack,f3)
  468. $(call push,mystack,f1)
  469. $(call test_assert,$(call pop,mystack),f1)
  470. $(call push,mystack,f2)
  471. $(call test_assert,$(call peek,mystack),f2)
  472. $(call test_assert,$(call depth,mystack),2)
  473. $(call test_assert,$(call pop,mystack),f2)
  474. $(call test_assert,$(call depth,mystack),1)
  475. $(call test_assert,$(call pop,myotherstack),)
  476. $(call stop_test)
  477. $(call start_test,reverse)
  478. $(call test_assert,$(call reverse,),)
  479. $(call test_assert,$(call reverse,1),1)
  480. $(call test_assert,$(call reverse,1 2),2 1)
  481. $(call test_assert,$(call reverse,1 2 3),3 2 1)
  482. $(call stop_test)
  483. $(call start_test,uniq)
  484. $(call test_assert,$(call uniq,),)
  485. $(call test_assert,$(call uniq,a),a)
  486. $(call test_assert,$(call uniq,a a),a)
  487. $(call test_assert,$(call uniq,a aa),a aa)
  488. $(call test_assert,$(call uniq,a aa a),a aa)
  489. $(call test_assert,$(call uniq,a b ba ab b a a ba a),a b ba ab)
  490. $(call stop_test)
  491. c:=,
  492. $(call start_test,split)
  493. $(call test_assert,$(call split,$c,comma$cseparated$cstring),comma separated string)
  494. $(call test_assert,$(call split,*,star*field*record),star field record)
  495. $(call test_assert,$(call split,*,star*),star)
  496. $(call test_assert,$(call split,*,star*field),star field)
  497. $(call test_assert,$(call split,*,star****field),star field)
  498. $(call test_assert,$(call split,*,),)
  499. $(call stop_test)
  500. $(call start_test,merge)
  501. $(call test_assert,$(call merge,$c,list of things),list$cof$cthings)
  502. $(call test_assert,$(call merge,*,list of things),list*of*things)
  503. $(call test_assert,$(call merge,*,list),list)
  504. $(call test_assert,$(call merge,*,),)
  505. $(call stop_test)
  506. $(call start_test,int_max)
  507. $(call test_assert,$(call int_max,$(call int_encode,2),$(call int_encode,1)),$(call int_encode,2))
  508. $(call test_assert,$(call int_max,$(call int_encode,1),$(call int_encode,2)),$(call int_encode,2))
  509. $(call test_assert,$(call int_max,$(call int_encode,2),$(call int_encode,0)),$(call int_encode,2))
  510. $(call test_assert,$(call int_max,$(call int_encode,0),$(call int_encode,2)),$(call int_encode,2))
  511. $(call test_assert,$(call int_max,$(call int_encode,2),$(call int_encode,2)),$(call int_encode,2))
  512. $(call test_assert,$(call int_max,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))
  513. $(call stop_test)
  514. $(call start_test,max)
  515. $(call test_assert,$(call max,2,1),2)
  516. $(call test_assert,$(call max,1,2),2)
  517. $(call test_assert,$(call max,2,0),2)
  518. $(call test_assert,$(call max,0,2),2)
  519. $(call test_assert,$(call max,2,2),2)
  520. $(call test_assert,$(call max,0,0),0)
  521. $(call stop_test)
  522. $(call start_test,int_min)
  523. $(call test_assert,$(call int_min,$(call int_encode,2),$(call int_encode,1)),$(call int_encode,1))
  524. $(call test_assert,$(call int_min,$(call int_encode,1),$(call int_encode,2)),$(call int_encode,1))
  525. $(call test_assert,$(call int_min,$(call int_encode,2),$(call int_encode,0)),$(call int_encode,0))
  526. $(call test_assert,$(call int_min,$(call int_encode,0),$(call int_encode,2)),$(call int_encode,0))
  527. $(call test_assert,$(call int_min,$(call int_encode,2),$(call int_encode,2)),$(call int_encode,2))
  528. $(call test_assert,$(call int_min,$(call int_encode,0),$(call int_encode,0)),$(call int_encode,0))
  529. $(call stop_test)
  530. $(call start_test,min)
  531. $(call test_assert,$(call min,2,1),1)
  532. $(call test_assert,$(call min,1,2),1)
  533. $(call test_assert,$(call min,2,0),0)
  534. $(call test_assert,$(call min,0,2),0)
  535. $(call test_assert,$(call min,2,2),2)
  536. $(call test_assert,$(call min,0,0),0)
  537. $(call stop_test)
  538. __gmsl_error = $1
  539. $(call start_test,assert functions)
  540. $(call test_assert,$(call assert,$(true),ignore),)
  541. $(call test_assert,$(call assert,$(false),failed),Assertion failure: failed)
  542. $(call test_assert,$(call assert_exists,gmsl-tests),)
  543. $(call test_assert,$(call assert_exists,MISSING-gmsl-tests),Assertion failure: file 'MISSING-gmsl-tests' missing)
  544. $(call stop_test)
  545. $(call start_test,int_inc)
  546. $(call test_assert,$(call int_inc,$(call int_encode,0)),$(call int_encode,1))
  547. $(call test_assert,$(call int_inc,$(call int_encode,1)),$(call int_encode,2))
  548. $(call test_assert,$(call int_inc,$(call int_encode,4)),$(call int_encode,5))
  549. $(call test_assert,$(call int_inc,$(call int_encode,10)),$(call int_encode,11))
  550. $(call stop_test)
  551. $(call start_test,inc)
  552. $(call test_assert,$(call inc,0),1)
  553. $(call test_assert,$(call inc,1),2)
  554. $(call test_assert,$(call inc,4),5)
  555. $(call test_assert,$(call inc,10),11)
  556. $(call stop_test)
  557. __gmsl_warning = $1
  558. $(call start_test,int_dec)
  559. $(call test_assert,$(call int_dec,$(call int_encode,1)),$(call int_encode,0))
  560. $(call test_assert,$(call int_dec,$(call int_encode,4)),$(call int_encode,3))
  561. $(call test_assert,$(call int_dec,$(call int_encode,10)),$(call int_encode,9))
  562. $(call stop_test)
  563. __gmsl_warning = x x x x x x x x x x
  564. $(call start_test,dec)
  565. $(call test_assert,$(call dec,1),0)
  566. $(call test_assert,$(call dec,4),3)
  567. $(call test_assert,$(call dec,10),9)
  568. $(call stop_test)
  569. $(call start_test,int_double)
  570. $(call test_assert,$(call int_double,$(call int_encode,0)),$(call int_encode,0))
  571. $(call test_assert,$(call int_double,$(call int_encode,1)),$(call int_encode,2))
  572. $(call test_assert,$(call int_double,$(call int_encode,4)),$(call int_encode,8))
  573. $(call stop_test)
  574. $(call start_test,double)
  575. $(call test_assert,$(call double,0),0)
  576. $(call test_assert,$(call double,1),2)
  577. $(call test_assert,$(call double,4),8)
  578. $(call stop_test)
  579. $(call start_test,int_halve)
  580. $(call test_assert,$(call int_halve,$(call int_encode,0)),$(call int_encode,0))
  581. $(call test_assert,$(call int_halve,$(call int_encode,2)),$(call int_encode,1))
  582. $(call test_assert,$(call int_halve,$(call int_encode,8)),$(call int_encode,4))
  583. $(call test_assert,$(call int_halve,$(call int_encode,7)),$(call int_encode,3))
  584. $(call stop_test)
  585. $(call start_test,halve)
  586. $(call test_assert,$(call halve,0),0)
  587. $(call test_assert,$(call halve,2),1)
  588. $(call test_assert,$(call halve,8),4)
  589. $(call test_assert,$(call halve,7),3)
  590. $(call stop_test)
  591. $(call start_test,gt)
  592. $(call test_assert,$(call gt,2,3),)
  593. $(call test_assert,$(call gt,3,2),$(true))
  594. $(call test_assert,$(call gt,2,2),)
  595. $(call stop_test)
  596. $(call start_test,gte)
  597. $(call test_assert,$(call gte,2,3),)
  598. $(call test_assert,$(call gte,3,2),$(true))
  599. $(call test_assert,$(call gte,2,2),$(true))
  600. $(call stop_test)
  601. $(call start_test,lt)
  602. $(call test_assert,$(call lt,2,3),$(true))
  603. $(call test_assert,$(call lt,3,2),)
  604. $(call test_assert,$(call lt,2,2),)
  605. $(call stop_test)
  606. $(call start_test,lte)
  607. $(call test_assert,$(call lte,2,3),$(true))
  608. $(call test_assert,$(call lte,3,2),)
  609. $(call test_assert,$(call lte,2,2),$(true))
  610. $(call stop_test)
  611. $(call start_test,eq)
  612. $(call test_assert,$(call eq,2,3),)
  613. $(call test_assert,$(call eq,3,2),)
  614. $(call test_assert,$(call eq,2,2),$(true))
  615. $(call stop_test)
  616. $(call start_test,ne)
  617. $(call test_assert,$(call ne,2,3),$(true))
  618. $(call test_assert,$(call ne,3,2),$(true))
  619. $(call test_assert,$(call ne,2,2),)
  620. $(call stop_test)
  621. $(call start_test,int_gt)
  622. $(call test_assert,$(call int_gt,$(call int_encode,2),$(call int_encode,3)),)
  623. $(call test_assert,$(call int_gt,$(call int_encode,3),$(call int_encode,2)),$(true))
  624. $(call test_assert,$(call int_gt,$(call int_encode,2),$(call int_encode,2)),)
  625. $(call stop_test)
  626. $(call start_test,int_gte)
  627. $(call test_assert,$(call int_gte,$(call int_encode,2),$(call int_encode,3)),)
  628. $(call test_assert,$(call int_gte,$(call int_encode,3),$(call int_encode,2)),$(true))
  629. $(call test_assert,$(call int_gte,$(call int_encode,2),$(call int_encode,2)),$(true))
  630. $(call stop_test)
  631. $(call start_test,int_lt)
  632. $(call test_assert,$(call int_lt,$(call int_encode,2),$(call int_encode,3)),$(true))
  633. $(call test_assert,$(call int_lt,$(call int_encode,3),$(call int_encode,2)),)
  634. $(call test_assert,$(call int_lt,$(call int_encode,2),$(call int_encode,2)),)
  635. $(call stop_test)
  636. $(call start_test,int_lte)
  637. $(call test_assert,$(call int_lte,$(call int_encode,2),$(call int_encode,3)),$(true))
  638. $(call test_assert,$(call int_lte,$(call int_encode,3),$(call int_encode,2)),)
  639. $(call test_assert,$(call int_lte,$(call int_encode,2),$(call int_encode,2)),$(true))
  640. $(call stop_test)
  641. $(call start_test,int_eq)
  642. $(call test_assert,$(call int_eq,$(call int_encode,2),$(call int_encode,3)),)
  643. $(call test_assert,$(call int_eq,$(call int_encode,3),$(call int_encode,2)),)
  644. $(call test_assert,$(call int_eq,$(call int_encode,2),$(call int_encode,2)),$(true))
  645. $(call stop_test)
  646. $(call start_test,int_ne)
  647. $(call test_assert,$(call int_ne,$(call int_encode,2),$(call int_encode,3)),$(true))
  648. $(call test_assert,$(call int_ne,$(call int_encode,3),$(call int_encode,2)),$(true))
  649. $(call test_assert,$(call int_ne,$(call int_encode,2),$(call int_encode,2)),)
  650. $(call stop_test)
  651. $(call start_test,sequence)
  652. $(call test_assert,$(call sequence,0,0),0)
  653. $(call test_assert,$(call sequence,1,1),1)
  654. $(call test_assert,$(call sequence,10,10),10)
  655. $(call test_assert,$(call sequence,0,1),0 1)
  656. $(call test_assert,$(call sequence,0,2),0 1 2)
  657. $(call test_assert,$(call sequence,1,2),1 2)
  658. $(call test_assert,$(call sequence,1,4),1 2 3 4)
  659. $(call test_assert,$(call sequence,10,20),10 11 12 13 14 15 16 17 18 19 20)
  660. $(call test_assert,$(call sequence,1,0),1 0)
  661. $(call test_assert,$(call sequence,2,1),2 1)
  662. $(call test_assert,$(call sequence,3,1),3 2 1)
  663. $(call test_assert,$(call sequence,20,10),20 19 18 17 16 15 14 13 12 11 10)
  664. $(call stop_test)
  665. $(call start_test,memoize)
  666. memo_counter = $(call int_encode,0)
  667. memo = $(eval memo_counter := $(call int_inc,$(memo_counter)))$(firstword $1)
  668. $(call test_assert,$(call int_decode,$(memo_counter)),0)
  669. $(call test_assert,$(call memoize,memo,hello john),hello)
  670. $(call test_assert,$(call int_decode,$(memo_counter)),1)
  671. $(call test_assert,$(call memoize,memo,hello john),hello)
  672. $(call test_assert,$(call int_decode,$(memo_counter)),1)
  673. $(call test_assert,$(call memoize,memo,hello john how are you),hello)
  674. $(call test_assert,$(call int_decode,$(memo_counter)),2)
  675. $(call test_assert,$(call memoize,memo,john),john)
  676. $(call test_assert,$(call int_decode,$(memo_counter)),3)
  677. $(call test_assert,$(call memoize,memo,hello john),hello)
  678. $(call test_assert,$(call int_decode,$(memo_counter)),3)
  679. $(call test_assert,$(call memoize,memo,hello john how are you),hello)
  680. $(call test_assert,$(call int_decode,$(memo_counter)),3)
  681. $(call test_assert,$(call memoize,memo,john),john)
  682. $(call test_assert,$(call int_decode,$(memo_counter)),3)
  683. md5_counter = $(call int_encode,0)
  684. ifneq ("$(shell echo -n hello | md5sum 2> /dev/null)","")
  685. md5_program := md5sum
  686. endif
  687. ifneq ("$(shell md5 -s hello 2> /dev/null)","")
  688. md5_program := md5
  689. endif
  690. ifeq ("$(md5_program)","")
  691. $(error Can't find suitable MD5 program. Tried md5sum and md5)
  692. endif
  693. md5 = $(eval md5_counter = $(call int_inc,$(md5_counter)))$(firstword $(shell echo "$1" | $(md5_program)))
  694. $(call test_assert,$(call memoize,md5,hello john),2d62190b10246ee2f2e233f9df840445)
  695. $(call test_assert,$(call int_decode,$(memo_counter)),3)
  696. $(call test_assert,$(call int_decode,$(md5_counter)),1)
  697. $(call test_assert,$(call memoize,memo,hello john),hello)
  698. $(call test_assert,$(call int_decode,$(memo_counter)),3)
  699. $(call test_assert,$(call int_decode,$(md5_counter)),1)
  700. $(call test_assert,$(call memoize,md5,hello john),2d62190b10246ee2f2e233f9df840445)
  701. $(call test_assert,$(call int_decode,$(md5_counter)),1)
  702. $(call test_assert,$(call memoize,md5,hello john how are you),fd9b9651aa9f92d3d6d15a60bf5ccf15)
  703. $(call test_assert,$(call int_decode,$(md5_counter)),2)
  704. $(call test_assert,$(call memoize,md5,hello john),2d62190b10246ee2f2e233f9df840445)
  705. $(call test_assert,$(call int_decode,$(md5_counter)),2)
  706. $(call test_assert,$(call memoize,md5,hello john how are you),fd9b9651aa9f92d3d6d15a60bf5ccf15)
  707. $(call test_assert,$(call int_decode,$(md5_counter)),2)
  708. $(call stop_test)
  709. $(call start_test,gmsl_compatible)
  710. $(call test_assert,$(call gmsl_compatible,$(gmsl_version)),$(true))
  711. $(call test_assert,$(call gmsl_compatible,0 9 0),$(true))
  712. $(call test_assert,$(call gmsl_compatible,0 0 1),$(true))
  713. $(call test_assert,$(call gmsl_compatible,0 0 0),$(true))
  714. $(call test_assert,$(call gmsl_compatible,1 0 8),$(true))
  715. $(call test_assert,$(call gmsl_compatible,1 0 8),$(true))
  716. $(call test_assert,$(call gmsl_compatible,1 0 10),$(true))
  717. $(call test_assert,$(call gmsl_compatible,1 0 11),$(true))
  718. $(call test_assert,$(call gmsl_compatible,1 0 12),$(true))
  719. $(call test_assert,$(call gmsl_compatible,1 0 13),$(true))
  720. $(call test_assert,$(call gmsl_compatible,1 1 0),$(true))
  721. $(call test_assert,$(call gmsl_compatible,1 1 1),$(true))
  722. $(call test_assert,$(call gmsl_compatible,1 1 2),$(true))
  723. $(call test_assert,$(call gmsl_compatible,1 1 3),$(true))
  724. $(call test_assert,$(call gmsl_compatible,1 1 4),$(true))
  725. $(call test_assert,$(call gmsl_compatible,1 1 5),$(true))
  726. $(call test_assert,$(call gmsl_compatible,1 1 6),$(true))
  727. $(call test_assert,$(call gmsl_compatible,1 1 7),$(true))
  728. $(call test_assert,$(call gmsl_compatible,1 1 8),$(true))
  729. $(call test_assert,$(call gmsl_compatible,1 1 9),)
  730. $(call test_assert,$(call gmsl_compatible,1 2 0),)
  731. $(call test_assert,$(call gmsl_compatible,2 0 0),)
  732. $(call stop_test)