ooxml_crypt 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (264) hide show
  1. checksums.yaml +7 -0
  2. data/Gemfile +4 -0
  3. data/LICENSE.txt +21 -0
  4. data/README.md +58 -0
  5. data/Rakefile +12 -0
  6. data/bin/console +15 -0
  7. data/bin/setup +8 -0
  8. data/ext/ooxml_crypt/extconf.rb +18 -0
  9. data/ext/ooxml_crypt/ooxml_crypt.c +27 -0
  10. data/ext/ooxml_crypt/ooxml_crypt.h +7 -0
  11. data/lib/ooxml_crypt/version.rb +5 -0
  12. data/lib/ooxml_crypt.rb +75 -0
  13. data/vendor/cybozulib/.github/workflows/main.yml +12 -0
  14. data/vendor/cybozulib/.gitignore +5 -0
  15. data/vendor/cybozulib/CMakeLists.txt +6 -0
  16. data/vendor/cybozulib/COPYRIGHT +27 -0
  17. data/vendor/cybozulib/Makefile +26 -0
  18. data/vendor/cybozulib/bin/libeay32.dll +0 -0
  19. data/vendor/cybozulib/bin/libmecab.dll +0 -0
  20. data/vendor/cybozulib/bin/ssleay32.dll +0 -0
  21. data/vendor/cybozulib/common.mk +116 -0
  22. data/vendor/cybozulib/common.props +25 -0
  23. data/vendor/cybozulib/cybozulib.sln +286 -0
  24. data/vendor/cybozulib/debug.props +14 -0
  25. data/vendor/cybozulib/include/cybozu/array.hpp +197 -0
  26. data/vendor/cybozulib/include/cybozu/atoi.hpp +238 -0
  27. data/vendor/cybozulib/include/cybozu/atomic.hpp +146 -0
  28. data/vendor/cybozulib/include/cybozu/base64.hpp +210 -0
  29. data/vendor/cybozulib/include/cybozu/benchmark.hpp +212 -0
  30. data/vendor/cybozulib/include/cybozu/bfd.hpp +105 -0
  31. data/vendor/cybozulib/include/cybozu/bit_operation.hpp +139 -0
  32. data/vendor/cybozulib/include/cybozu/bitvector.hpp +358 -0
  33. data/vendor/cybozulib/include/cybozu/condition_variable.hpp +113 -0
  34. data/vendor/cybozulib/include/cybozu/condition_variable_cs.hpp +74 -0
  35. data/vendor/cybozulib/include/cybozu/config.hpp +392 -0
  36. data/vendor/cybozulib/include/cybozu/critical_section.hpp +60 -0
  37. data/vendor/cybozulib/include/cybozu/crypto.hpp +321 -0
  38. data/vendor/cybozulib/include/cybozu/csucvector.hpp +624 -0
  39. data/vendor/cybozulib/include/cybozu/csv.hpp +294 -0
  40. data/vendor/cybozulib/include/cybozu/data_type.hpp +27 -0
  41. data/vendor/cybozulib/include/cybozu/endian.hpp +224 -0
  42. data/vendor/cybozulib/include/cybozu/env.hpp +63 -0
  43. data/vendor/cybozulib/include/cybozu/event.hpp +122 -0
  44. data/vendor/cybozulib/include/cybozu/exception.hpp +253 -0
  45. data/vendor/cybozulib/include/cybozu/file.hpp +626 -0
  46. data/vendor/cybozulib/include/cybozu/fmindex.hpp +291 -0
  47. data/vendor/cybozulib/include/cybozu/format.hpp +93 -0
  48. data/vendor/cybozulib/include/cybozu/frequency.hpp +264 -0
  49. data/vendor/cybozulib/include/cybozu/hash.hpp +67 -0
  50. data/vendor/cybozulib/include/cybozu/inttype.hpp +174 -0
  51. data/vendor/cybozulib/include/cybozu/itoa.hpp +336 -0
  52. data/vendor/cybozulib/include/cybozu/json.hpp +120 -0
  53. data/vendor/cybozulib/include/cybozu/line_stream.hpp +149 -0
  54. data/vendor/cybozulib/include/cybozu/link_libeay32.hpp +21 -0
  55. data/vendor/cybozulib/include/cybozu/link_mpir.hpp +18 -0
  56. data/vendor/cybozulib/include/cybozu/link_ssleay32.hpp +19 -0
  57. data/vendor/cybozulib/include/cybozu/log.hpp +237 -0
  58. data/vendor/cybozulib/include/cybozu/minixml.hpp +452 -0
  59. data/vendor/cybozulib/include/cybozu/mmap.hpp +143 -0
  60. data/vendor/cybozulib/include/cybozu/mutex.hpp +144 -0
  61. data/vendor/cybozulib/include/cybozu/nlp/mecab.hpp +96 -0
  62. data/vendor/cybozulib/include/cybozu/nlp/plsi.hpp +315 -0
  63. data/vendor/cybozulib/include/cybozu/nlp/random.hpp +74 -0
  64. data/vendor/cybozulib/include/cybozu/nlp/sparse.hpp +529 -0
  65. data/vendor/cybozulib/include/cybozu/nlp/svd.hpp +486 -0
  66. data/vendor/cybozulib/include/cybozu/nlp/tfidf.hpp +226 -0
  67. data/vendor/cybozulib/include/cybozu/nlp/top_score.hpp +75 -0
  68. data/vendor/cybozulib/include/cybozu/option.hpp +743 -0
  69. data/vendor/cybozulib/include/cybozu/parallel.hpp +88 -0
  70. data/vendor/cybozulib/include/cybozu/pcg.hpp +72 -0
  71. data/vendor/cybozulib/include/cybozu/process.hpp +324 -0
  72. data/vendor/cybozulib/include/cybozu/quit_signal_handler.hpp +66 -0
  73. data/vendor/cybozulib/include/cybozu/random_generator.hpp +144 -0
  74. data/vendor/cybozulib/include/cybozu/regex.hpp +463 -0
  75. data/vendor/cybozulib/include/cybozu/select8.hpp +279 -0
  76. data/vendor/cybozulib/include/cybozu/serializer.hpp +363 -0
  77. data/vendor/cybozulib/include/cybozu/sha1.hpp +209 -0
  78. data/vendor/cybozulib/include/cybozu/sha2.hpp +506 -0
  79. data/vendor/cybozulib/include/cybozu/siphash.hpp +105 -0
  80. data/vendor/cybozulib/include/cybozu/socket.hpp +785 -0
  81. data/vendor/cybozulib/include/cybozu/ssl.hpp +203 -0
  82. data/vendor/cybozulib/include/cybozu/stacktrace.hpp +291 -0
  83. data/vendor/cybozulib/include/cybozu/stream.hpp +269 -0
  84. data/vendor/cybozulib/include/cybozu/string.hpp +1746 -0
  85. data/vendor/cybozulib/include/cybozu/string_operation.hpp +365 -0
  86. data/vendor/cybozulib/include/cybozu/sucvector.hpp +378 -0
  87. data/vendor/cybozulib/include/cybozu/test.hpp +373 -0
  88. data/vendor/cybozulib/include/cybozu/thread.hpp +229 -0
  89. data/vendor/cybozulib/include/cybozu/time.hpp +281 -0
  90. data/vendor/cybozulib/include/cybozu/tls.hpp +115 -0
  91. data/vendor/cybozulib/include/cybozu/unordered_map.hpp +13 -0
  92. data/vendor/cybozulib/include/cybozu/unordered_set.hpp +13 -0
  93. data/vendor/cybozulib/include/cybozu/v128.hpp +376 -0
  94. data/vendor/cybozulib/include/cybozu/wavelet_matrix.hpp +345 -0
  95. data/vendor/cybozulib/include/cybozu/xorshift.hpp +189 -0
  96. data/vendor/cybozulib/include/cybozu/zlib.hpp +325 -0
  97. data/vendor/cybozulib/include/sais.hxx +364 -0
  98. data/vendor/cybozulib/misc/make_select8tbl.cpp +26 -0
  99. data/vendor/cybozulib/mk.bat +37 -0
  100. data/vendor/cybozulib/readme.md +29 -0
  101. data/vendor/cybozulib/release.props +12 -0
  102. data/vendor/cybozulib/sample/Makefile +30 -0
  103. data/vendor/cybozulib/sample/csucvector_smpl.cpp +42 -0
  104. data/vendor/cybozulib/sample/data/svd/org/test1.S +4 -0
  105. data/vendor/cybozulib/sample/data/svd/org/test1.U +4 -0
  106. data/vendor/cybozulib/sample/data/svd/org/test1.V +6 -0
  107. data/vendor/cybozulib/sample/data/svd/test1 +4 -0
  108. data/vendor/cybozulib/sample/data/svd/test2 +4 -0
  109. data/vendor/cybozulib/sample/desymbol.cpp +127 -0
  110. data/vendor/cybozulib/sample/exception_smpl.cpp +46 -0
  111. data/vendor/cybozulib/sample/fmindex_smpl.cpp +231 -0
  112. data/vendor/cybozulib/sample/log_smpl.cpp +19 -0
  113. data/vendor/cybozulib/sample/mecab_smpl.cpp +37 -0
  114. data/vendor/cybozulib/sample/option2_smpl.cpp +68 -0
  115. data/vendor/cybozulib/sample/option_smpl.cpp +42 -0
  116. data/vendor/cybozulib/sample/plsi_smpl.cpp +207 -0
  117. data/vendor/cybozulib/sample/proj/exception_smpl.vcproj +184 -0
  118. data/vendor/cybozulib/sample/proj/mecab_smpl.vcproj +184 -0
  119. data/vendor/cybozulib/sample/proj/ssl_smpl/ssl_smpl.vcxproj +85 -0
  120. data/vendor/cybozulib/sample/proj/ssl_smpl.vcproj +347 -0
  121. data/vendor/cybozulib/sample/proj/stacktrace_smpl/stacktrace_smpl.vcxproj +85 -0
  122. data/vendor/cybozulib/sample/proj/svd_smpl.vcproj +184 -0
  123. data/vendor/cybozulib/sample/quit_signal_handler.cpp +30 -0
  124. data/vendor/cybozulib/sample/serializer_smpl.cpp +196 -0
  125. data/vendor/cybozulib/sample/socket_smpl.cpp +82 -0
  126. data/vendor/cybozulib/sample/ssl_smpl.cpp +39 -0
  127. data/vendor/cybozulib/sample/stacktrace_smpl.cpp +52 -0
  128. data/vendor/cybozulib/sample/svd_bench_smpl.cpp +143 -0
  129. data/vendor/cybozulib/sample/svd_smpl.cpp +94 -0
  130. data/vendor/cybozulib/sample/wm_bench_smpl.cpp +182 -0
  131. data/vendor/cybozulib/sample/zlib_smpl.cpp +41 -0
  132. data/vendor/cybozulib/src/Makefile +8 -0
  133. data/vendor/cybozulib/src/base/Makefile +19 -0
  134. data/vendor/cybozulib/test/Makefile +12 -0
  135. data/vendor/cybozulib/test/base/Makefile +37 -0
  136. data/vendor/cybozulib/test/base/array_test.cpp +173 -0
  137. data/vendor/cybozulib/test/base/atoi_test.cpp +774 -0
  138. data/vendor/cybozulib/test/base/atomic_test.cpp +49 -0
  139. data/vendor/cybozulib/test/base/base64_test.cpp +113 -0
  140. data/vendor/cybozulib/test/base/bit_operation_test.cpp +134 -0
  141. data/vendor/cybozulib/test/base/bitvector_test.cpp +204 -0
  142. data/vendor/cybozulib/test/base/condition_variable_cs_test.cpp +92 -0
  143. data/vendor/cybozulib/test/base/condition_variable_test.cpp +88 -0
  144. data/vendor/cybozulib/test/base/config_test.cpp +236 -0
  145. data/vendor/cybozulib/test/base/crypto_test.cpp +122 -0
  146. data/vendor/cybozulib/test/base/csucvector_test.cpp +63 -0
  147. data/vendor/cybozulib/test/base/csv_test.cpp +182 -0
  148. data/vendor/cybozulib/test/base/data/a.xml +26 -0
  149. data/vendor/cybozulib/test/base/endian_test.cpp +56 -0
  150. data/vendor/cybozulib/test/base/env_test.cpp +22 -0
  151. data/vendor/cybozulib/test/base/event_test.cpp +41 -0
  152. data/vendor/cybozulib/test/base/file_test.cpp +233 -0
  153. data/vendor/cybozulib/test/base/fmindex_test.cpp +118 -0
  154. data/vendor/cybozulib/test/base/format_test.cpp +12 -0
  155. data/vendor/cybozulib/test/base/frequency_test.cpp +104 -0
  156. data/vendor/cybozulib/test/base/itoa_test.cpp +522 -0
  157. data/vendor/cybozulib/test/base/line_stream_test.cpp +208 -0
  158. data/vendor/cybozulib/test/base/mecab_test.cpp +41 -0
  159. data/vendor/cybozulib/test/base/minixml_test.cpp +103 -0
  160. data/vendor/cybozulib/test/base/mmap_test.cpp +15 -0
  161. data/vendor/cybozulib/test/base/option_test.cpp +487 -0
  162. data/vendor/cybozulib/test/base/parallel_test.cpp +48 -0
  163. data/vendor/cybozulib/test/base/proj/array_test/array_test.vcxproj +86 -0
  164. data/vendor/cybozulib/test/base/proj/atoi_test/atoi_test.vcxproj +86 -0
  165. data/vendor/cybozulib/test/base/proj/atomic_test/atomic_test.vcxproj +86 -0
  166. data/vendor/cybozulib/test/base/proj/base64_test/base64_test.vcxproj +86 -0
  167. data/vendor/cybozulib/test/base/proj/condition_variable_cs_test/condition_variable_cs_test.vcxproj +86 -0
  168. data/vendor/cybozulib/test/base/proj/condition_variable_test/condition_variable_test.vcxproj +86 -0
  169. data/vendor/cybozulib/test/base/proj/config_test/config_test.vcxproj +86 -0
  170. data/vendor/cybozulib/test/base/proj/csv_test/csv_test.vcxproj +86 -0
  171. data/vendor/cybozulib/test/base/proj/endian_test/endian_test.vcxproj +86 -0
  172. data/vendor/cybozulib/test/base/proj/env_test/env_test.vcxproj +86 -0
  173. data/vendor/cybozulib/test/base/proj/event_test/event_test.vcxproj +86 -0
  174. data/vendor/cybozulib/test/base/proj/file_test/file_test.vcxproj +86 -0
  175. data/vendor/cybozulib/test/base/proj/itoa_test/itoa_test.vcxproj +86 -0
  176. data/vendor/cybozulib/test/base/proj/mecab_test/mecab_test.vcxproj +88 -0
  177. data/vendor/cybozulib/test/base/proj/minixml_test/minixml_test.vcxproj +86 -0
  178. data/vendor/cybozulib/test/base/proj/mmap_test/mmap_test.vcxproj +86 -0
  179. data/vendor/cybozulib/test/base/proj/serializer_test/serializer_test.vcxproj +86 -0
  180. data/vendor/cybozulib/test/base/proj/sha1_test/sha1_test.vcxproj +86 -0
  181. data/vendor/cybozulib/test/base/proj/stream_test/stream_test.vcxproj +86 -0
  182. data/vendor/cybozulib/test/base/proj/string_operation_test/string_operation_test.vcxproj +86 -0
  183. data/vendor/cybozulib/test/base/proj/string_test/string_test.vcxproj +86 -0
  184. data/vendor/cybozulib/test/base/proj/thread_test/thread_test.vcxproj +86 -0
  185. data/vendor/cybozulib/test/base/proj/time_test/time_test.vcxproj +86 -0
  186. data/vendor/cybozulib/test/base/proj/tls_test/tls_test.vcxproj +86 -0
  187. data/vendor/cybozulib/test/base/proj/zlib_test/zlib_test.vcxproj +86 -0
  188. data/vendor/cybozulib/test/base/random_generator_test.cpp +28 -0
  189. data/vendor/cybozulib/test/base/regex_test.cpp +74 -0
  190. data/vendor/cybozulib/test/base/serializer_test.cpp +483 -0
  191. data/vendor/cybozulib/test/base/sha1_test.cpp +61 -0
  192. data/vendor/cybozulib/test/base/sha2_test.cpp +191 -0
  193. data/vendor/cybozulib/test/base/siphash_test.cpp +33 -0
  194. data/vendor/cybozulib/test/base/socket_test.cpp +76 -0
  195. data/vendor/cybozulib/test/base/stream_test.cpp +101 -0
  196. data/vendor/cybozulib/test/base/string_operation_test.cpp +340 -0
  197. data/vendor/cybozulib/test/base/string_test.cpp +1705 -0
  198. data/vendor/cybozulib/test/base/sucvector_test.cpp +312 -0
  199. data/vendor/cybozulib/test/base/thread_test.cpp +62 -0
  200. data/vendor/cybozulib/test/base/time_test.cpp +164 -0
  201. data/vendor/cybozulib/test/base/tls_test.cpp +50 -0
  202. data/vendor/cybozulib/test/base/wavelet_matrix_test.cpp +145 -0
  203. data/vendor/cybozulib/test/base/zlib_test.cpp +371 -0
  204. data/vendor/cybozulib/test/nlp/Makefile +27 -0
  205. data/vendor/cybozulib/test/nlp/proj/random_test.vcproj +184 -0
  206. data/vendor/cybozulib/test/nlp/proj/sparse_test.vcproj +184 -0
  207. data/vendor/cybozulib/test/nlp/proj/svd_test.vcproj +184 -0
  208. data/vendor/cybozulib/test/nlp/random_test.cpp +62 -0
  209. data/vendor/cybozulib/test/nlp/sparse_test.cpp +347 -0
  210. data/vendor/cybozulib/test/nlp/svd_test.cpp +234 -0
  211. data/vendor/cybozulib/test/nlp/top_score_test.cpp +40 -0
  212. data/vendor/cybozulib/tool/create_vcproj.py +186 -0
  213. data/vendor/cybozulib/tool/vcproj_tmpl.py +185 -0
  214. data/vendor/msoffice/COPYRIGHT +27 -0
  215. data/vendor/msoffice/Makefile +29 -0
  216. data/vendor/msoffice/bin/64/msoc.dll +0 -0
  217. data/vendor/msoffice/bin/64/msocsample.exe +0 -0
  218. data/vendor/msoffice/bin/64/msoffice-crypt.exe +0 -0
  219. data/vendor/msoffice/bin/msoc.dll +0 -0
  220. data/vendor/msoffice/bin/msocsample.exe +0 -0
  221. data/vendor/msoffice/bin/msoffice-crypt.exe +0 -0
  222. data/vendor/msoffice/common.mk +71 -0
  223. data/vendor/msoffice/common.props +26 -0
  224. data/vendor/msoffice/debug.props +14 -0
  225. data/vendor/msoffice/include/attack.hpp +211 -0
  226. data/vendor/msoffice/include/cfb.hpp +777 -0
  227. data/vendor/msoffice/include/crypto_util.hpp +450 -0
  228. data/vendor/msoffice/include/custom_sha1.hpp +342 -0
  229. data/vendor/msoffice/include/decode.hpp +240 -0
  230. data/vendor/msoffice/include/encode.hpp +221 -0
  231. data/vendor/msoffice/include/make_dataspace.hpp +316 -0
  232. data/vendor/msoffice/include/msoc.h +129 -0
  233. data/vendor/msoffice/include/resource.hpp +7 -0
  234. data/vendor/msoffice/include/standard_encryption.hpp +145 -0
  235. data/vendor/msoffice/include/uint32vec.hpp +179 -0
  236. data/vendor/msoffice/include/util.hpp +212 -0
  237. data/vendor/msoffice/lib/.emptydir +0 -0
  238. data/vendor/msoffice/misc/decrypt-xls.vbs +46 -0
  239. data/vendor/msoffice/mk.bat +1 -0
  240. data/vendor/msoffice/mkdll.bat +3 -0
  241. data/vendor/msoffice/msoc.def +13 -0
  242. data/vendor/msoffice/msocsample.py +178 -0
  243. data/vendor/msoffice/msoffice12.sln +31 -0
  244. data/vendor/msoffice/readme.md +110 -0
  245. data/vendor/msoffice/release.props +28 -0
  246. data/vendor/msoffice/src/Makefile +19 -0
  247. data/vendor/msoffice/src/attack.cpp +124 -0
  248. data/vendor/msoffice/src/cfb_test.cpp +77 -0
  249. data/vendor/msoffice/src/minisample.c +54 -0
  250. data/vendor/msoffice/src/msocdll.cpp +276 -0
  251. data/vendor/msoffice/src/msocsample.c +136 -0
  252. data/vendor/msoffice/src/msoffice-crypt.cpp +219 -0
  253. data/vendor/msoffice/src/proj/attack/attack.vcxproj +88 -0
  254. data/vendor/msoffice/src/proj/main/msoffice-crypt.vcxproj +88 -0
  255. data/vendor/msoffice/src/sha1.cpp +234 -0
  256. data/vendor/msoffice/test/Makefile +20 -0
  257. data/vendor/msoffice/test/cfb_test.cpp +74 -0
  258. data/vendor/msoffice/test/hash_test.cpp +59 -0
  259. data/vendor/msoffice/test/proj/cfb/cfb_test.vcxproj +90 -0
  260. data/vendor/msoffice/test/proj/hash/hash_test.vcxproj +90 -0
  261. data/vendor/msoffice/test/sampl.bat +8 -0
  262. data/vendor/msoffice/test_all.py +46 -0
  263. data/vendor/update +4 -0
  264. metadata +351 -0
@@ -0,0 +1,774 @@
1
+ #include <stdio.h>
2
+ #include <iostream>
3
+ #include <cybozu/atoi.hpp>
4
+ #include <cybozu/test.hpp>
5
+
6
+ CYBOZU_TEST_AUTO(test_int8_t)
7
+ {
8
+ const struct {
9
+ const char *str;
10
+ int8_t x;
11
+ } okTbl[] = {
12
+ { "0", 0 },
13
+ { "1", 1 },
14
+ { "12", 12 },
15
+ { "123", 123 },
16
+ { "126", 126 },
17
+ { "127", 127 },
18
+ { "-1", -1 },
19
+ { "-12", -12 },
20
+ { "-123", -123 },
21
+ { "-126", -126 },
22
+ { "-127", -127 },
23
+ { "-128", -128 },
24
+ { "00000", 0 },
25
+ { "-0", 0 },
26
+ { "00000", 0 },
27
+ { "001", 1 },
28
+ { "0012", 12 },
29
+ { "00000123", 123 },
30
+ { "-00000", 0 },
31
+ { "-001", -1 },
32
+ { "-0012", -12 },
33
+ { "-00000123", -123 },
34
+ };
35
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(okTbl); i++) {
36
+ int8_t x = 0;
37
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(okTbl[i].str));
38
+ CYBOZU_TEST_EQUAL(x, okTbl[i].x);
39
+ }
40
+ {
41
+ const int8_t numTbl[] = { 1, 12, 123 };
42
+ const char str[] = "123";
43
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(numTbl); i++) {
44
+ int8_t x = 0;
45
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str, i + 1));
46
+ CYBOZU_TEST_EQUAL(x, numTbl[i]);
47
+ }
48
+ const char str2[] = "12abc";
49
+ int8_t x = 0;
50
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str2, 2));
51
+ CYBOZU_TEST_EQUAL(x, 12);
52
+ }
53
+ const char ngTbl[][40] = {
54
+ "", "a", "000-", "-", "00s",
55
+ "128", "129", "-129", "-130",
56
+ };
57
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ngTbl); i++) {
58
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<int8_t>(cybozu::atoi(ngTbl[i]))), cybozu::Exception);
59
+ }
60
+ const struct {
61
+ const char *str;
62
+ size_t len;
63
+ } ng2Tbl[] = {
64
+ { "", 0 },
65
+ { "", 1 },
66
+ { "1a", 2 },
67
+ { "1a", 3 },
68
+ { "234b", 4 },
69
+ };
70
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ng2Tbl); i++) {
71
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<int8_t>(cybozu::atoi(ng2Tbl[i].str, ng2Tbl[i].len))), cybozu::Exception);
72
+ }
73
+ }
74
+
75
+ CYBOZU_TEST_AUTO(test_uint8_t)
76
+ {
77
+ const struct {
78
+ const char *str;
79
+ uint8_t x;
80
+ } okTbl[] = {
81
+ { "0", 0 },
82
+ { "1", 1 },
83
+ { "12", 12 },
84
+ { "123", 123 },
85
+ { "254", 254 },
86
+ { "255", 255 },
87
+ { "00000", 0 },
88
+ { "001", 1 },
89
+ { "0012", 12 },
90
+ { "00000123", 123 },
91
+ { "000255", 255 },
92
+ };
93
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(okTbl); i++) {
94
+ uint8_t x = 0;
95
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(okTbl[i].str));
96
+ CYBOZU_TEST_EQUAL(x, okTbl[i].x);
97
+ }
98
+ {
99
+ const uint8_t numTbl[] = { 1, 12, 123 };
100
+ const char str[] = "123";
101
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(numTbl); i++) {
102
+ uint8_t x = 0;
103
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str, i + 1));
104
+ CYBOZU_TEST_EQUAL(x, numTbl[i]);
105
+ }
106
+ const char str2[] = "12abc";
107
+ uint8_t x = 0;
108
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str2, 2));
109
+ CYBOZU_TEST_EQUAL(x, 12U);
110
+ }
111
+ const char ngTbl[][40] = {
112
+ "", "a", "000-", "-", "00s",
113
+ "-2", "4294967296", "4294967297", "4294967298", "4294967299", "4294967300"
114
+ };
115
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ngTbl); i++) {
116
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<uint8_t>(cybozu::atoi(ngTbl[i]))), cybozu::Exception);
117
+ }
118
+ const struct {
119
+ const char *str;
120
+ size_t len;
121
+ } ng2Tbl[] = {
122
+ { "", 0 },
123
+ { "", 1 },
124
+ { "1a", 2 },
125
+ { "1a", 3 },
126
+ { "234b", 4 },
127
+ };
128
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ng2Tbl); i++) {
129
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<uint8_t>(cybozu::atoi(ng2Tbl[i].str, ng2Tbl[i].len))), cybozu::Exception);
130
+ }
131
+ }
132
+
133
+ CYBOZU_TEST_AUTO(test_int)
134
+ {
135
+ const struct {
136
+ const char *str;
137
+ int x;
138
+ } okTbl[] = {
139
+ { "0", 0 },
140
+ { "1", 1 },
141
+ { "12", 12 },
142
+ { "123", 123 },
143
+ { "1223424", 1223424 },
144
+ { "214748364", 214748364 },
145
+ { "314748364", 314748364 },
146
+ { "2147483639", 2147483639 },
147
+ { "2147483640", 2147483640 },
148
+ { "2147483641", 2147483641 },
149
+ { "2147483642", 2147483642 },
150
+ { "2147483643", 2147483643 },
151
+ { "2147483644", 2147483644 },
152
+ { "2147483645", 2147483645 },
153
+ { "2147483646", 2147483646 },
154
+ { "2147483647", 2147483647 },
155
+ { "-1", -1 },
156
+ { "-12", -12 },
157
+ { "-123", -123 },
158
+ { "-1223424", -1223424 },
159
+ { "-214748364", -214748364 },
160
+ { "-314748364", -314748364 },
161
+ { "-2147483645", -2147483645 },
162
+ { "-2147483646", -2147483646 },
163
+ { "-2147483647", -2147483647 },
164
+ { "-2147483648", -2147483647 - 1 },
165
+ { "00000", 0 },
166
+ { "-0", 0 },
167
+ { "00000", 0 },
168
+ { "001", 1 },
169
+ { "0012", 12 },
170
+ { "00000123", 123 },
171
+ { "01223424", 1223424 },
172
+ { "0000214748364", 214748364 },
173
+ { "00314748364", 314748364 },
174
+ { "002147483645", 2147483645 },
175
+ { "002147483646", 2147483646 },
176
+ { "0002147483647", 2147483647 },
177
+ { "-00000", 0 },
178
+ { "-001", -1 },
179
+ { "-0012", -12 },
180
+ { "-00000123", -123 },
181
+ { "-01223424", -1223424 },
182
+ { "-0000214748364", -214748364 },
183
+ { "-00314748364", -314748364 },
184
+ { "-002147483645", -2147483645 },
185
+ { "-002147483646", -2147483646 },
186
+ { "-0002147483647",-2147483647 },
187
+ { "-0002147483648", -2147483647 - 1 },
188
+ };
189
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(okTbl); i++) {
190
+ int x = 0;
191
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(okTbl[i].str));
192
+ CYBOZU_TEST_EQUAL(x, okTbl[i].x);
193
+ }
194
+ {
195
+ const int numTbl[] = { 1, 12, 123, 1234, 12345, 12345, 12345 };
196
+ const char str[] = "12345";
197
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(numTbl); i++) {
198
+ int x = 0;
199
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str, i + 1));
200
+ CYBOZU_TEST_EQUAL(x, numTbl[i]);
201
+ }
202
+ const char str2[] = "12abc";
203
+ int x = 0;
204
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str2, 2));
205
+ CYBOZU_TEST_EQUAL(x, 12);
206
+ }
207
+ const char ngTbl[][40] = {
208
+ "", "a", "000-", "-", "00s",
209
+ "2147483648", "2147483649", "2147483650", "2147483651",
210
+ "-2147483649", "-2147483650", "-2147483651",
211
+ };
212
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ngTbl); i++) {
213
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<int>(cybozu::atoi(ngTbl[i]))), cybozu::Exception);
214
+ }
215
+ const struct {
216
+ const char *str;
217
+ size_t len;
218
+ } ng2Tbl[] = {
219
+ { "", 0 },
220
+ { "", 1 },
221
+ { "1a", 2 },
222
+ { "1a", 3 },
223
+ { "234b", 4 },
224
+ };
225
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ng2Tbl); i++) {
226
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<int>(cybozu::atoi(ng2Tbl[i].str, ng2Tbl[i].len))), cybozu::Exception);
227
+ }
228
+ }
229
+
230
+ CYBOZU_TEST_AUTO(test_short)
231
+ {
232
+ const struct {
233
+ const char *str;
234
+ short x;
235
+ } okTbl[] = {
236
+ { "0", 0 },
237
+ { "1", 1 },
238
+ { "12", 12 },
239
+ { "123", 123 },
240
+ { "32765", 32765 },
241
+ { "32766", 32766 },
242
+ { "32767", 32767 },
243
+ { "-1", -1 },
244
+ { "-12", -12 },
245
+ { "-123", -123 },
246
+ { "-32766", -32766 },
247
+ { "-32767", -32767 },
248
+ { "-32768", -32768 },
249
+ { "00000", 0 },
250
+ { "-0", 0 },
251
+ { "00000", 0 },
252
+ { "001", 1 },
253
+ { "0012", 12 },
254
+ { "00000123", 123 },
255
+ { "0032766", 32766 },
256
+ { "00032767", 32767 },
257
+ { "-00000", 0 },
258
+ { "-001", -1 },
259
+ { "-0012", -12 },
260
+ { "-00000123", -123 },
261
+ { "-000032767", -32767 },
262
+ { "-000032768", -32768 },
263
+ };
264
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(okTbl); i++) {
265
+ short x = 0;
266
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(okTbl[i].str));
267
+ CYBOZU_TEST_EQUAL(x, okTbl[i].x);
268
+ }
269
+ {
270
+ const short numTbl[] = { 1, 12, 123, 1234, 12345, 12345, 12345 };
271
+ const char str[] = "12345";
272
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(numTbl); i++) {
273
+ short x = 0;
274
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str, i + 1));
275
+ CYBOZU_TEST_EQUAL(x, numTbl[i]);
276
+ }
277
+ const char str2[] = "12abc";
278
+ short x = 0;
279
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str2, 2));
280
+ CYBOZU_TEST_EQUAL(x, 12);
281
+ }
282
+ const char ngTbl[][40] = {
283
+ "", "a", "000-", "-", "00s",
284
+ "32768", "32769",
285
+ "-32769", "-32770", "-32771",
286
+ };
287
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ngTbl); i++) {
288
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<short>(cybozu::atoi(ngTbl[i]))), cybozu::Exception);
289
+ }
290
+ const struct {
291
+ const char *str;
292
+ size_t len;
293
+ } ng2Tbl[] = {
294
+ { "", 0 },
295
+ { "", 1 },
296
+ { "1a", 2 },
297
+ { "1a", 3 },
298
+ { "234b", 4 },
299
+ };
300
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ng2Tbl); i++) {
301
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<short>(cybozu::atoi(ng2Tbl[i].str, ng2Tbl[i].len))), cybozu::Exception);
302
+ }
303
+ }
304
+
305
+ CYBOZU_TEST_AUTO(test_unsigned_short)
306
+ {
307
+ const struct {
308
+ const char *str;
309
+ unsigned short x;
310
+ } okTbl[] = {
311
+ { "0", 0 },
312
+ { "1", 1 },
313
+ { "12", 12 },
314
+ { "123", 123 },
315
+ { "12234", 12234 },
316
+ { "32767", 32767 },
317
+ { "32768", 32768 },
318
+ { "65534", 65534 },
319
+ { "65535", 65535 },
320
+ { "00000", 0 },
321
+ { "001", 1 },
322
+ { "0012", 12 },
323
+ { "00000123", 123 },
324
+ { "01223", 1223 },
325
+ { "000065534", 65534 },
326
+ { "000065535", 65535 },
327
+ };
328
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(okTbl); i++) {
329
+ unsigned short x = 0;
330
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(okTbl[i].str));
331
+ CYBOZU_TEST_EQUAL(x, okTbl[i].x);
332
+ }
333
+ {
334
+ const unsigned short numTbl[] = { 1, 12, 123, 1234, 12345, 12345, 12345 };
335
+ const char str[] = "12345";
336
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(numTbl); i++) {
337
+ unsigned short x = 0;
338
+ CYBOZU_TEST_NO_EXCEPTION(cybozu::disable_warning_unused_variable(x = cybozu::atoi(str, i + 1)));
339
+ CYBOZU_TEST_EQUAL(x, numTbl[i]);
340
+ }
341
+ const char str2[] = "12abc";
342
+ unsigned short x = 0;
343
+ CYBOZU_TEST_NO_EXCEPTION(cybozu::disable_warning_unused_variable(x = cybozu::atoi(str2, 2)));
344
+ CYBOZU_TEST_EQUAL(x, 12);
345
+ }
346
+ const char ngTbl[][40] = {
347
+ "", "a", "000-", "-", "00s",
348
+ "-2", "65536", "65537",
349
+ };
350
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ngTbl); i++) {
351
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<unsigned short>(cybozu::atoi(ngTbl[i]))), cybozu::Exception);
352
+ }
353
+ const struct {
354
+ const char *str;
355
+ size_t len;
356
+ } ng2Tbl[] = {
357
+ { "", 0 },
358
+ { "", 1 },
359
+ { "1a", 2 },
360
+ { "1a", 3 },
361
+ { "234b", 4 },
362
+ };
363
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ng2Tbl); i++) {
364
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<unsigned short>(cybozu::atoi(ng2Tbl[i].str, ng2Tbl[i].len))), cybozu::Exception);
365
+ }
366
+ }
367
+
368
+ CYBOZU_TEST_AUTO(test_uint)
369
+ {
370
+ const struct {
371
+ const char *str;
372
+ unsigned int x;
373
+ } okTbl[] = {
374
+ { "0", 0 },
375
+ { "1", 1 },
376
+ { "12", 12 },
377
+ { "123", 123 },
378
+ { "1223424", 1223424 },
379
+ { "214748364", 214748364 },
380
+ { "314748364", 314748364 },
381
+ { "2147483639", 2147483639 },
382
+ { "2147483640", 2147483640 },
383
+ { "2147483641", 2147483641 },
384
+ { "2147483642", 2147483642 },
385
+ { "2147483643", 2147483643 },
386
+ { "2147483644", 2147483644 },
387
+ { "2147483645", 2147483645 },
388
+ { "2147483646", 2147483646 },
389
+ { "2147483647", 2147483647 },
390
+ { "2147483648", 2147483648U },
391
+ { "2147483649", 2147483649U },
392
+ { "2147483650", 2147483650U },
393
+ { "2147483651", 2147483651U },
394
+ { "2147483652", 2147483652U },
395
+ { "2147483653", 2147483653U },
396
+ { "2147483654", 2147483654U },
397
+ { "2147483655", 2147483655U },
398
+ { "4294967286", 4294967286U },
399
+ { "4294967287", 4294967287U },
400
+ { "4294967288", 4294967288U },
401
+ { "4294967289", 4294967289U },
402
+ { "4294967290", 4294967290U },
403
+ { "4294967291", 4294967291U },
404
+ { "4294967292", 4294967292U },
405
+ { "4294967293", 4294967293U },
406
+ { "4294967294", 4294967294U },
407
+ { "4294967295", 4294967295U },
408
+ { "00000", 0 },
409
+ { "001", 1 },
410
+ { "0012", 12 },
411
+ { "00000123", 123 },
412
+ { "01223424", 1223424 },
413
+ { "0000214748364", 214748364 },
414
+ { "00314748364", 314748364 },
415
+ { "002147483645", 2147483645 },
416
+ { "002147483646", 2147483646 },
417
+ { "0002147483647", 2147483647 },
418
+ };
419
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(okTbl); i++) {
420
+ unsigned int x = 0;
421
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(okTbl[i].str));
422
+ CYBOZU_TEST_EQUAL(x, okTbl[i].x);
423
+ }
424
+ {
425
+ const unsigned numTbl[] = { 1, 12, 123, 1234, 12345, 12345, 12345 };
426
+ const char str[] = "12345";
427
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(numTbl); i++) {
428
+ unsigned int x = 0;
429
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str, i + 1));
430
+ CYBOZU_TEST_EQUAL(x, numTbl[i]);
431
+ }
432
+ const char str2[] = "12abc";
433
+ unsigned int x = 0;
434
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str2, 2));
435
+ CYBOZU_TEST_EQUAL(x, 12U);
436
+ }
437
+ const char ngTbl[][40] = {
438
+ "", "a", "000-", "-", "00s",
439
+ "-2", "4294967296", "4294967297", "4294967298", "4294967299", "4294967300"
440
+ };
441
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ngTbl); i++) {
442
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<unsigned int>(cybozu::atoi(ngTbl[i]))), cybozu::Exception);
443
+ }
444
+ const struct {
445
+ const char *str;
446
+ size_t len;
447
+ } ng2Tbl[] = {
448
+ { "", 0 },
449
+ { "", 1 },
450
+ { "1a", 2 },
451
+ { "1a", 3 },
452
+ { "234b", 4 },
453
+ };
454
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ng2Tbl); i++) {
455
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<unsigned int>(cybozu::atoi(ng2Tbl[i].str, ng2Tbl[i].len))), cybozu::Exception);
456
+ }
457
+ }
458
+
459
+ CYBOZU_TEST_AUTO(test_int64)
460
+ {
461
+ const struct {
462
+ const char *str;
463
+ int64_t x;
464
+ } okTbl[] = {
465
+ { "0", 0 },
466
+ { "1", 1 },
467
+ { "12", 12 },
468
+ { "123", 123 },
469
+ { "1223424", 1223424 },
470
+ { "214748364", 214748364 },
471
+ { "314748364", 314748364 },
472
+ { "2147483639", 2147483639 },
473
+ { "2147483640", 2147483640 },
474
+ { "2147483641", 2147483641 },
475
+ { "2147483642", 2147483642 },
476
+ { "2147483643", 2147483643 },
477
+ { "2147483644", 2147483644 },
478
+ { "2147483645", 2147483645 },
479
+ { "2147483646", 2147483646 },
480
+ { "2147483647", 2147483647 },
481
+ { "9223372036854775794", 9223372036854775794LL },
482
+ { "9223372036854775795", 9223372036854775795LL },
483
+ { "9223372036854775796", 9223372036854775796LL },
484
+ { "9223372036854775797", 9223372036854775797LL },
485
+ { "9223372036854775798", 9223372036854775798LL },
486
+ { "9223372036854775799", 9223372036854775799LL },
487
+ { "9223372036854775800", 9223372036854775800LL },
488
+ { "9223372036854775801", 9223372036854775801LL },
489
+ { "9223372036854775802", 9223372036854775802LL },
490
+ { "9223372036854775803", 9223372036854775803LL },
491
+ { "9223372036854775804", 9223372036854775804LL },
492
+ { "9223372036854775805", 9223372036854775805LL },
493
+ { "9223372036854775806", 9223372036854775806LL },
494
+ { "9223372036854775807", 9223372036854775807LL },
495
+ { "-1", -1 },
496
+ { "-12", -12 },
497
+ { "-123", -123 },
498
+ { "-1223424", -1223424 },
499
+ { "-214748364", -214748364 },
500
+ { "-314748364", -314748364 },
501
+ { "-2147483645", -2147483645 },
502
+ { "-2147483646", -2147483646 },
503
+ { "-2147483647", -2147483647 },
504
+ { "-2147483648", -2147483647 - 1 },
505
+ { "-9223372036854775795", -9223372036854775795LL },
506
+ { "-9223372036854775796", -9223372036854775796LL },
507
+ { "-9223372036854775797", -9223372036854775797LL },
508
+ { "-9223372036854775798", -9223372036854775798LL },
509
+ { "-9223372036854775799", -9223372036854775799LL },
510
+ { "-9223372036854775800", -9223372036854775800LL },
511
+ { "-9223372036854775801", -9223372036854775801LL },
512
+ { "-9223372036854775802", -9223372036854775802LL },
513
+ { "-9223372036854775803", -9223372036854775803LL },
514
+ { "-9223372036854775804", -9223372036854775804LL },
515
+ { "-9223372036854775805", -9223372036854775805LL },
516
+ { "-9223372036854775806", -9223372036854775806LL },
517
+ { "-9223372036854775807", -9223372036854775807LL },
518
+ { "-9223372036854775808", -9223372036854775807LL - 1 },
519
+ { "00000", 0 },
520
+ { "001", 1 },
521
+ { "0012", 12 },
522
+ { "00000123", 123 },
523
+ { "01223424", 1223424 },
524
+ { "0000214748364", 214748364 },
525
+ { "00314748364", 314748364 },
526
+ { "002147483645", 2147483645 },
527
+ { "002147483646", 2147483646 },
528
+ { "0002147483647", 2147483647 },
529
+ { "-0", 0 },
530
+ { "-00000", 0 },
531
+ { "-001", -1 },
532
+ { "-0012", -12 },
533
+ { "-00000123", -123 },
534
+ { "-01223424", -1223424 },
535
+ { "-0000214748364", -214748364 },
536
+ { "-00314748364", -314748364 },
537
+ { "-002147483645", -2147483645 },
538
+ { "-002147483646", -2147483646 },
539
+ { "-0002147483647",-2147483647 },
540
+ { "-0002147483648", -2147483647 - 1 },
541
+ };
542
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(okTbl); i++) {
543
+ int64_t x = 0;
544
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(okTbl[i].str));
545
+ CYBOZU_TEST_EQUAL(x, okTbl[i].x);
546
+ }
547
+ {
548
+ const int64_t numTbl[] = { 1, 12, 123, 1234, 12345, 12345, 12345 };
549
+ const char str[] = "12345";
550
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(numTbl); i++) {
551
+ int64_t x = 0;
552
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str, i + 1));
553
+ CYBOZU_TEST_EQUAL(x, numTbl[i]);
554
+ }
555
+ const char str2[] = "12abc";
556
+ int64_t x = 0;
557
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str2, 2));
558
+ CYBOZU_TEST_EQUAL(x, 12);
559
+ }
560
+ const char ngTbl[][40] = {
561
+ "", "a", "000-", "-", "00s",
562
+ "9223372036854775808", "9223372036854775809", "9223372036854775810",
563
+ "-9223372036854775809",
564
+ };
565
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ngTbl); i++) {
566
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<int64_t>(cybozu::atoi(ngTbl[i]))), cybozu::Exception);
567
+ }
568
+ const struct {
569
+ const char *str;
570
+ size_t len;
571
+ } ng2Tbl[] = {
572
+ { "", 0 },
573
+ { "", 1 },
574
+ { "1a", 2 },
575
+ { "1a", 3 },
576
+ { "234b", 4 },
577
+ };
578
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ng2Tbl); i++) {
579
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<int64_t>(cybozu::atoi(ng2Tbl[i].str, ng2Tbl[i].len))), cybozu::Exception);
580
+ }
581
+ }
582
+
583
+ CYBOZU_TEST_AUTO(test_uint64)
584
+ {
585
+ const struct {
586
+ const char *str;
587
+ uint64_t x;
588
+ } okTbl[] = {
589
+ { "0", 0 },
590
+ { "1", 1 },
591
+ { "12", 12 },
592
+ { "123", 123 },
593
+ { "1223424", 1223424 },
594
+ { "214748364", 214748364 },
595
+ { "314748364", 314748364 },
596
+ { "2147483639", 2147483639 },
597
+ { "2147483640", 2147483640 },
598
+ { "2147483641", 2147483641 },
599
+ { "2147483642", 2147483642 },
600
+ { "2147483643", 2147483643 },
601
+ { "2147483644", 2147483644 },
602
+ { "2147483645", 2147483645 },
603
+ { "2147483646", 2147483646 },
604
+ { "2147483647", 2147483647 },
605
+ { "9223372036854775794", 9223372036854775794LL },
606
+ { "9223372036854775795", 9223372036854775795LL },
607
+ { "9223372036854775796", 9223372036854775796LL },
608
+ { "9223372036854775797", 9223372036854775797LL },
609
+ { "9223372036854775798", 9223372036854775798LL },
610
+ { "9223372036854775799", 9223372036854775799LL },
611
+ { "9223372036854775800", 9223372036854775800LL },
612
+ { "9223372036854775801", 9223372036854775801LL },
613
+ { "9223372036854775802", 9223372036854775802LL },
614
+ { "9223372036854775803", 9223372036854775803LL },
615
+ { "9223372036854775804", 9223372036854775804LL },
616
+ { "9223372036854775805", 9223372036854775805LL },
617
+ { "9223372036854775806", 9223372036854775806LL },
618
+ { "9223372036854775807", 9223372036854775807LL },
619
+ { "18446744073709551607", 18446744073709551607ULL },
620
+ { "18446744073709551608", 18446744073709551608ULL },
621
+ { "18446744073709551609", 18446744073709551609ULL },
622
+ { "18446744073709551610", 18446744073709551610ULL },
623
+ { "18446744073709551611", 18446744073709551611ULL },
624
+ { "18446744073709551612", 18446744073709551612ULL },
625
+ { "18446744073709551613", 18446744073709551613ULL },
626
+ { "18446744073709551614", 18446744073709551614ULL },
627
+ { "18446744073709551615", 18446744073709551615ULL },
628
+ { "00000", 0 },
629
+ { "001", 1 },
630
+ { "0012", 12 },
631
+ { "00000123", 123 },
632
+ { "01223424", 1223424 },
633
+ { "0000214748364", 214748364 },
634
+ { "00314748364", 314748364 },
635
+ { "002147483645", 2147483645 },
636
+ { "002147483646", 2147483646 },
637
+ { "0002147483647", 2147483647 },
638
+ };
639
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(okTbl); i++) {
640
+ uint64_t x = 0;
641
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(okTbl[i].str));
642
+ CYBOZU_TEST_EQUAL(x, okTbl[i].x);
643
+ }
644
+ {
645
+ const uint64_t numTbl[] = { 1, 12, 123, 1234, 12345, 12345, 12345 };
646
+ const char str[] = "12345";
647
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(numTbl); i++) {
648
+ uint64_t x = 0;
649
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str, i + 1));
650
+ CYBOZU_TEST_EQUAL(x, numTbl[i]);
651
+ }
652
+ const char str2[] = "12abc";
653
+ uint64_t x = 0;
654
+ CYBOZU_TEST_NO_EXCEPTION(x = cybozu::atoi(str2, 2));
655
+ CYBOZU_TEST_EQUAL(x, 12U);
656
+ }
657
+ const char ngTbl[][40] = {
658
+ "", "a", "000-", "-", "00s",
659
+ "-2", "18446744073709551616", "18446744073709551617", "18446744073709551618",
660
+ "18446744073709551619", "18446744073709551620"
661
+ };
662
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ngTbl); i++) {
663
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<uint64_t>(cybozu::atoi(ngTbl[i]))), cybozu::Exception);
664
+ }
665
+ const struct {
666
+ const char *str;
667
+ size_t len;
668
+ } ng2Tbl[] = {
669
+ { "", 0 },
670
+ { "", 1 },
671
+ { "1a", 2 },
672
+ { "1a", 3 },
673
+ { "234b", 4 },
674
+ };
675
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(ng2Tbl); i++) {
676
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<uint64_t>(cybozu::atoi(ng2Tbl[i].str, ng2Tbl[i].len))), cybozu::Exception);
677
+ }
678
+ }
679
+
680
+ CYBOZU_TEST_AUTO(itohexchar)
681
+ {
682
+ const struct {
683
+ const char *strL;
684
+ const char *strH;
685
+ unsigned char val;
686
+ } tbl[] = {
687
+ { "00", "00", 0 },
688
+ { "01", "01", 1 },
689
+ { "02", "02", 2 },
690
+ { "03", "03", 3 },
691
+ { "04", "04", 4 },
692
+ { "05", "05", 5 },
693
+ { "06", "06", 6 },
694
+ { "07", "07", 7 },
695
+ { "08", "08", 8 },
696
+ { "09", "09", 9 },
697
+ { "0a", "0A", 10 },
698
+ { "0b", "0B", 11 },
699
+ { "0c", "0C", 12 },
700
+ { "0d", "0D", 13 },
701
+ { "0e", "0E", 14 },
702
+ { "0f", "0F", 15 },
703
+ { "31", "31", 49 },
704
+ { "32", "32", 50 },
705
+ { "33", "33", 51 },
706
+ { "34", "34", 52 },
707
+ { "35", "35", 53 },
708
+ { "36", "36", 54 },
709
+ { "37", "37", 55 },
710
+ { "38", "38", 56 },
711
+ { "39", "39", 57 },
712
+ { "3a", "3A", 58 },
713
+ { "3b", "3B", 59 },
714
+ { "3c", "3C", 60 },
715
+ { "3d", "3D", 61 },
716
+ { "3e", "3E", 62 },
717
+ { "3f", "3F", 63 },
718
+ };
719
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
720
+ unsigned char a = cybozu::hextoi(tbl[i].strL);
721
+ CYBOZU_TEST_EQUAL(a, tbl[i].val);
722
+ unsigned char b = cybozu::hextoi(tbl[i].strH);
723
+ CYBOZU_TEST_EQUAL(b, tbl[i].val);
724
+ }
725
+ }
726
+
727
+ CYBOZU_TEST_AUTO(hextoi)
728
+ {
729
+ CYBOZU_TEST_EQUAL(static_cast<unsigned char>(cybozu::hextoi("ff")), 0xff);
730
+ CYBOZU_TEST_EQUAL(static_cast<unsigned short>(cybozu::hextoi("ff")), 0xff);
731
+ CYBOZU_TEST_EQUAL(static_cast<unsigned short>(cybozu::hextoi("ff")), 0xff);
732
+ CYBOZU_TEST_EQUAL(static_cast<unsigned short>(cybozu::hextoi("ffff")), 0xffff);
733
+ CYBOZU_TEST_EQUAL(static_cast<unsigned int>(cybozu::hextoi("ffffffff")), 0xffffffff);
734
+ CYBOZU_TEST_EQUAL(static_cast<uint64_t>(cybozu::hextoi("ffffffff")), uint64_t(0xffffffffULL));
735
+ CYBOZU_TEST_EQUAL(static_cast<unsigned char>(cybozu::hextoi("00000ff")), 0xff);
736
+ CYBOZU_TEST_EQUAL(static_cast<unsigned short>(cybozu::hextoi("00000ff")), 0xff);
737
+ CYBOZU_TEST_EQUAL(static_cast<unsigned short>(cybozu::hextoi("00000ff")), 0xff);
738
+ CYBOZU_TEST_EQUAL(static_cast<unsigned short>(cybozu::hextoi("00000ffff")), 0xffff);
739
+ CYBOZU_TEST_EQUAL(static_cast<unsigned int>(cybozu::hextoi("00000ffffffff")), 0xffffffff);
740
+ CYBOZU_TEST_EQUAL(static_cast<uint64_t>(cybozu::hextoi("00000ffffffff")), uint64_t(0xffffffffULL));
741
+
742
+ CYBOZU_TEST_EQUAL(static_cast<unsigned int>(cybozu::hextoi("123xxx", 3)), 0x123U);
743
+ CYBOZU_TEST_EQUAL(static_cast<unsigned int>(cybozu::hextoi("1234xx", 4)), 0x1234U);
744
+ CYBOZU_TEST_EQUAL(static_cast<unsigned int>(cybozu::hextoi("12345x", 5)), 0x12345U);
745
+ CYBOZU_TEST_EQUAL(static_cast<unsigned int>(cybozu::hextoi("12345", 5)), 0x12345U);
746
+ CYBOZU_TEST_EQUAL(static_cast<unsigned int>(cybozu::hextoi("12345", 6)), 0x12345U);
747
+
748
+ CYBOZU_TEST_EQUAL(static_cast<int>(cybozu::hextoi("123xxx", 3)), 0x123);
749
+ CYBOZU_TEST_EQUAL(static_cast<int>(cybozu::hextoi("1234xx", 4)), 0x1234);
750
+ CYBOZU_TEST_EQUAL(static_cast<int>(cybozu::hextoi("12345x", 5)), 0x12345);
751
+ CYBOZU_TEST_EQUAL(static_cast<int>(cybozu::hextoi("12345", 5)), 0x12345);
752
+ CYBOZU_TEST_EQUAL(static_cast<int>(cybozu::hextoi("12345", 6)), 0x12345);
753
+
754
+ CYBOZU_TEST_EQUAL(static_cast<char>(cybozu::hextoi("7f")), 0x7f);
755
+ CYBOZU_TEST_EQUAL(static_cast<short>(cybozu::hextoi("7fff")), 0x7fff);
756
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<uint8_t>(cybozu::hextoi("100"))), cybozu::Exception);
757
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<int8_t>(cybozu::hextoi("80"))), cybozu::Exception);
758
+
759
+ const struct {
760
+ const char *str;
761
+ size_t len;
762
+ } tbl[] = {
763
+ { "", 0 },
764
+ { "", 1 },
765
+ { "x", 1 },
766
+ { "234x", 10 },
767
+ { "234x", 10 },
768
+ { "fffffffff", 20 },
769
+ { "fffffffff", 9 },
770
+ };
771
+ for (size_t i = 0; i < CYBOZU_NUM_OF_ARRAY(tbl); i++) {
772
+ CYBOZU_TEST_EXCEPTION(cybozu::disable_warning_unused_variable(static_cast<unsigned int>(cybozu::hextoi(tbl[i].str, tbl[i].len))), cybozu::Exception);
773
+ }
774
+ }