protocol-quic 0.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (343) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data/ext/ngtcp2/AUTHORS +44 -0
  4. data/ext/ngtcp2/CMakeLists.txt +431 -0
  5. data/ext/ngtcp2/CMakeOptions.txt +17 -0
  6. data/ext/ngtcp2/COPYING +22 -0
  7. data/ext/ngtcp2/ChangeLog +0 -0
  8. data/ext/ngtcp2/Makefile.am +60 -0
  9. data/ext/ngtcp2/NEWS +0 -0
  10. data/ext/ngtcp2/README +1 -0
  11. data/ext/ngtcp2/README.rst +258 -0
  12. data/ext/ngtcp2/ci/build_boringssl.sh +10 -0
  13. data/ext/ngtcp2/ci/build_nghttp3.sh +9 -0
  14. data/ext/ngtcp2/ci/build_openssl1.sh +8 -0
  15. data/ext/ngtcp2/ci/build_openssl1_cross.sh +9 -0
  16. data/ext/ngtcp2/ci/build_openssl3.sh +8 -0
  17. data/ext/ngtcp2/ci/build_picotls.sh +26 -0
  18. data/ext/ngtcp2/ci/build_wolfssl.sh +9 -0
  19. data/ext/ngtcp2/ci/gen-certificate.sh +8 -0
  20. data/ext/ngtcp2/cmake/ExtractValidFlags.cmake +31 -0
  21. data/ext/ngtcp2/cmake/FindCUnit.cmake +40 -0
  22. data/ext/ngtcp2/cmake/FindJemalloc.cmake +40 -0
  23. data/ext/ngtcp2/cmake/FindLibev.cmake +38 -0
  24. data/ext/ngtcp2/cmake/FindLibnghttp3.cmake +41 -0
  25. data/ext/ngtcp2/cmake/Findwolfssl.cmake +41 -0
  26. data/ext/ngtcp2/cmake/Version.cmake +11 -0
  27. data/ext/ngtcp2/cmakeconfig.h.in +36 -0
  28. data/ext/ngtcp2/configure.ac +755 -0
  29. data/ext/ngtcp2/crypto/CMakeLists.txt +56 -0
  30. data/ext/ngtcp2/crypto/Makefile.am +49 -0
  31. data/ext/ngtcp2/crypto/boringssl/CMakeLists.txt +64 -0
  32. data/ext/ngtcp2/crypto/boringssl/Makefile.am +39 -0
  33. data/ext/ngtcp2/crypto/boringssl/boringssl.c +630 -0
  34. data/ext/ngtcp2/crypto/boringssl/libngtcp2_crypto_boringssl.pc.in +33 -0
  35. data/ext/ngtcp2/crypto/gnutls/CMakeLists.txt +86 -0
  36. data/ext/ngtcp2/crypto/gnutls/Makefile.am +43 -0
  37. data/ext/ngtcp2/crypto/gnutls/gnutls.c +644 -0
  38. data/ext/ngtcp2/crypto/gnutls/libngtcp2_crypto_gnutls.pc.in +33 -0
  39. data/ext/ngtcp2/crypto/includes/CMakeLists.txt +56 -0
  40. data/ext/ngtcp2/crypto/includes/Makefile.am +45 -0
  41. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto.h +893 -0
  42. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_boringssl.h +104 -0
  43. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_gnutls.h +107 -0
  44. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_openssl.h +132 -0
  45. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_picotls.h +246 -0
  46. data/ext/ngtcp2/crypto/includes/ngtcp2/ngtcp2_crypto_wolfssl.h +106 -0
  47. data/ext/ngtcp2/crypto/openssl/CMakeLists.txt +86 -0
  48. data/ext/ngtcp2/crypto/openssl/Makefile.am +43 -0
  49. data/ext/ngtcp2/crypto/openssl/libngtcp2_crypto_openssl.pc.in +33 -0
  50. data/ext/ngtcp2/crypto/openssl/openssl.c +807 -0
  51. data/ext/ngtcp2/crypto/picotls/CMakeLists.txt +65 -0
  52. data/ext/ngtcp2/crypto/picotls/Makefile.am +39 -0
  53. data/ext/ngtcp2/crypto/picotls/libngtcp2_crypto_picotls.pc.in +33 -0
  54. data/ext/ngtcp2/crypto/picotls/picotls.c +707 -0
  55. data/ext/ngtcp2/crypto/shared.c +1431 -0
  56. data/ext/ngtcp2/crypto/shared.h +350 -0
  57. data/ext/ngtcp2/crypto/wolfssl/CMakeLists.txt +84 -0
  58. data/ext/ngtcp2/crypto/wolfssl/Makefile.am +43 -0
  59. data/ext/ngtcp2/crypto/wolfssl/libngtcp2_crypto_wolfssl.pc.in +33 -0
  60. data/ext/ngtcp2/crypto/wolfssl/wolfssl.c +534 -0
  61. data/ext/ngtcp2/doc/Makefile.am +65 -0
  62. data/ext/ngtcp2/doc/make.bat +35 -0
  63. data/ext/ngtcp2/doc/mkapiref.py +356 -0
  64. data/ext/ngtcp2/doc/source/conf.py.in +94 -0
  65. data/ext/ngtcp2/doc/source/index.rst +22 -0
  66. data/ext/ngtcp2/doc/source/programmers-guide.rst +476 -0
  67. data/ext/ngtcp2/docker/Dockerfile +39 -0
  68. data/ext/ngtcp2/examples/CMakeLists.txt +361 -0
  69. data/ext/ngtcp2/examples/Makefile.am +228 -0
  70. data/ext/ngtcp2/examples/client.cc +3049 -0
  71. data/ext/ngtcp2/examples/client.h +192 -0
  72. data/ext/ngtcp2/examples/client_base.cc +202 -0
  73. data/ext/ngtcp2/examples/client_base.h +213 -0
  74. data/ext/ngtcp2/examples/debug.cc +298 -0
  75. data/ext/ngtcp2/examples/debug.h +124 -0
  76. data/ext/ngtcp2/examples/examplestest.cc +84 -0
  77. data/ext/ngtcp2/examples/gtlssimpleclient.c +720 -0
  78. data/ext/ngtcp2/examples/h09client.cc +2601 -0
  79. data/ext/ngtcp2/examples/h09client.h +196 -0
  80. data/ext/ngtcp2/examples/h09server.cc +3024 -0
  81. data/ext/ngtcp2/examples/h09server.h +237 -0
  82. data/ext/ngtcp2/examples/http.cc +138 -0
  83. data/ext/ngtcp2/examples/http.h +44 -0
  84. data/ext/ngtcp2/examples/network.h +80 -0
  85. data/ext/ngtcp2/examples/server.cc +3731 -0
  86. data/ext/ngtcp2/examples/server.h +256 -0
  87. data/ext/ngtcp2/examples/server_base.cc +58 -0
  88. data/ext/ngtcp2/examples/server_base.h +195 -0
  89. data/ext/ngtcp2/examples/shared.cc +385 -0
  90. data/ext/ngtcp2/examples/shared.h +96 -0
  91. data/ext/ngtcp2/examples/simpleclient.c +683 -0
  92. data/ext/ngtcp2/examples/template.h +71 -0
  93. data/ext/ngtcp2/examples/tests/README.rst +60 -0
  94. data/ext/ngtcp2/examples/tests/__init__.py +0 -0
  95. data/ext/ngtcp2/examples/tests/config.ini.in +32 -0
  96. data/ext/ngtcp2/examples/tests/conftest.py +28 -0
  97. data/ext/ngtcp2/examples/tests/ngtcp2test/__init__.py +6 -0
  98. data/ext/ngtcp2/examples/tests/ngtcp2test/certs.py +476 -0
  99. data/ext/ngtcp2/examples/tests/ngtcp2test/client.py +187 -0
  100. data/ext/ngtcp2/examples/tests/ngtcp2test/env.py +191 -0
  101. data/ext/ngtcp2/examples/tests/ngtcp2test/log.py +101 -0
  102. data/ext/ngtcp2/examples/tests/ngtcp2test/server.py +137 -0
  103. data/ext/ngtcp2/examples/tests/ngtcp2test/tls.py +983 -0
  104. data/ext/ngtcp2/examples/tests/test_01_handshake.py +30 -0
  105. data/ext/ngtcp2/examples/tests/test_02_resume.py +46 -0
  106. data/ext/ngtcp2/examples/tests/test_03_earlydata.py +56 -0
  107. data/ext/ngtcp2/examples/tests/test_04_clientcert.py +57 -0
  108. data/ext/ngtcp2/examples/tests/test_05_ciphers.py +46 -0
  109. data/ext/ngtcp2/examples/tls_client_context.h +52 -0
  110. data/ext/ngtcp2/examples/tls_client_context_boringssl.cc +126 -0
  111. data/ext/ngtcp2/examples/tls_client_context_boringssl.h +49 -0
  112. data/ext/ngtcp2/examples/tls_client_context_gnutls.cc +74 -0
  113. data/ext/ngtcp2/examples/tls_client_context_gnutls.h +50 -0
  114. data/ext/ngtcp2/examples/tls_client_context_openssl.cc +137 -0
  115. data/ext/ngtcp2/examples/tls_client_context_openssl.h +49 -0
  116. data/ext/ngtcp2/examples/tls_client_context_picotls.cc +158 -0
  117. data/ext/ngtcp2/examples/tls_client_context_picotls.h +53 -0
  118. data/ext/ngtcp2/examples/tls_client_context_wolfssl.cc +177 -0
  119. data/ext/ngtcp2/examples/tls_client_context_wolfssl.h +51 -0
  120. data/ext/ngtcp2/examples/tls_client_session.h +52 -0
  121. data/ext/ngtcp2/examples/tls_client_session_boringssl.cc +110 -0
  122. data/ext/ngtcp2/examples/tls_client_session_boringssl.h +52 -0
  123. data/ext/ngtcp2/examples/tls_client_session_gnutls.cc +190 -0
  124. data/ext/ngtcp2/examples/tls_client_session_gnutls.h +52 -0
  125. data/ext/ngtcp2/examples/tls_client_session_openssl.cc +113 -0
  126. data/ext/ngtcp2/examples/tls_client_session_openssl.h +52 -0
  127. data/ext/ngtcp2/examples/tls_client_session_picotls.cc +147 -0
  128. data/ext/ngtcp2/examples/tls_client_session_picotls.h +52 -0
  129. data/ext/ngtcp2/examples/tls_client_session_wolfssl.cc +160 -0
  130. data/ext/ngtcp2/examples/tls_client_session_wolfssl.h +52 -0
  131. data/ext/ngtcp2/examples/tls_server_context.h +52 -0
  132. data/ext/ngtcp2/examples/tls_server_context_boringssl.cc +257 -0
  133. data/ext/ngtcp2/examples/tls_server_context_boringssl.h +54 -0
  134. data/ext/ngtcp2/examples/tls_server_context_gnutls.cc +99 -0
  135. data/ext/ngtcp2/examples/tls_server_context_gnutls.h +59 -0
  136. data/ext/ngtcp2/examples/tls_server_context_openssl.cc +338 -0
  137. data/ext/ngtcp2/examples/tls_server_context_openssl.h +54 -0
  138. data/ext/ngtcp2/examples/tls_server_context_picotls.cc +321 -0
  139. data/ext/ngtcp2/examples/tls_server_context_picotls.h +58 -0
  140. data/ext/ngtcp2/examples/tls_server_context_wolfssl.cc +284 -0
  141. data/ext/ngtcp2/examples/tls_server_context_wolfssl.h +55 -0
  142. data/ext/ngtcp2/examples/tls_server_session.h +52 -0
  143. data/ext/ngtcp2/examples/tls_server_session_boringssl.cc +84 -0
  144. data/ext/ngtcp2/examples/tls_server_session_boringssl.h +47 -0
  145. data/ext/ngtcp2/examples/tls_server_session_gnutls.cc +155 -0
  146. data/ext/ngtcp2/examples/tls_server_session_gnutls.h +46 -0
  147. data/ext/ngtcp2/examples/tls_server_session_openssl.cc +54 -0
  148. data/ext/ngtcp2/examples/tls_server_session_openssl.h +47 -0
  149. data/ext/ngtcp2/examples/tls_server_session_picotls.cc +70 -0
  150. data/ext/ngtcp2/examples/tls_server_session_picotls.h +47 -0
  151. data/ext/ngtcp2/examples/tls_server_session_wolfssl.cc +55 -0
  152. data/ext/ngtcp2/examples/tls_server_session_wolfssl.h +47 -0
  153. data/ext/ngtcp2/examples/tls_session_base_gnutls.cc +87 -0
  154. data/ext/ngtcp2/examples/tls_session_base_gnutls.h +51 -0
  155. data/ext/ngtcp2/examples/tls_session_base_openssl.cc +54 -0
  156. data/ext/ngtcp2/examples/tls_session_base_openssl.h +52 -0
  157. data/ext/ngtcp2/examples/tls_session_base_picotls.cc +56 -0
  158. data/ext/ngtcp2/examples/tls_session_base_picotls.h +54 -0
  159. data/ext/ngtcp2/examples/tls_session_base_wolfssl.cc +54 -0
  160. data/ext/ngtcp2/examples/tls_session_base_wolfssl.h +54 -0
  161. data/ext/ngtcp2/examples/tls_shared_picotls.cc +59 -0
  162. data/ext/ngtcp2/examples/tls_shared_picotls.h +36 -0
  163. data/ext/ngtcp2/examples/util.cc +646 -0
  164. data/ext/ngtcp2/examples/util.h +361 -0
  165. data/ext/ngtcp2/examples/util_gnutls.cc +136 -0
  166. data/ext/ngtcp2/examples/util_openssl.cc +131 -0
  167. data/ext/ngtcp2/examples/util_test.cc +237 -0
  168. data/ext/ngtcp2/examples/util_test.h +45 -0
  169. data/ext/ngtcp2/examples/util_wolfssl.cc +130 -0
  170. data/ext/ngtcp2/fuzz/corpus/decode_frame/ack +0 -0
  171. data/ext/ngtcp2/fuzz/corpus/decode_frame/ack_ecn +0 -0
  172. data/ext/ngtcp2/fuzz/corpus/decode_frame/connection_close +0 -0
  173. data/ext/ngtcp2/fuzz/corpus/decode_frame/crypto +1 -0
  174. data/ext/ngtcp2/fuzz/corpus/decode_frame/data_blocked +1 -0
  175. data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram +1 -0
  176. data/ext/ngtcp2/fuzz/corpus/decode_frame/datagram_len +1 -0
  177. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_data +1 -0
  178. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_stream_data +0 -0
  179. data/ext/ngtcp2/fuzz/corpus/decode_frame/max_streams +0 -0
  180. data/ext/ngtcp2/fuzz/corpus/decode_frame/new_connection_id +1 -0
  181. data/ext/ngtcp2/fuzz/corpus/decode_frame/new_token +1 -0
  182. data/ext/ngtcp2/fuzz/corpus/decode_frame/path_challenge +1 -0
  183. data/ext/ngtcp2/fuzz/corpus/decode_frame/path_response +1 -0
  184. data/ext/ngtcp2/fuzz/corpus/decode_frame/reset_stream +0 -0
  185. data/ext/ngtcp2/fuzz/corpus/decode_frame/retire_connection_id +1 -0
  186. data/ext/ngtcp2/fuzz/corpus/decode_frame/stop_sending +0 -0
  187. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream +0 -0
  188. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_data_blocked +0 -0
  189. data/ext/ngtcp2/fuzz/corpus/decode_frame/stream_len +0 -0
  190. data/ext/ngtcp2/fuzz/corpus/decode_frame/streams_blocked +0 -0
  191. data/ext/ngtcp2/fuzz/corpus/ksl/random +0 -0
  192. data/ext/ngtcp2/fuzz/decode_frame.cc +25 -0
  193. data/ext/ngtcp2/fuzz/ksl.cc +77 -0
  194. data/ext/ngtcp2/interop/Dockerfile +39 -0
  195. data/ext/ngtcp2/interop/run_endpoint.sh +93 -0
  196. data/ext/ngtcp2/lib/CMakeLists.txt +110 -0
  197. data/ext/ngtcp2/lib/Makefile.am +122 -0
  198. data/ext/ngtcp2/lib/includes/CMakeLists.txt +4 -0
  199. data/ext/ngtcp2/lib/includes/Makefile.am +25 -0
  200. data/ext/ngtcp2/lib/includes/ngtcp2/ngtcp2.h +5843 -0
  201. data/ext/ngtcp2/lib/includes/ngtcp2/version.h.in +51 -0
  202. data/ext/ngtcp2/lib/libngtcp2.pc.in +33 -0
  203. data/ext/ngtcp2/lib/ngtcp2_acktr.c +335 -0
  204. data/ext/ngtcp2/lib/ngtcp2_acktr.h +221 -0
  205. data/ext/ngtcp2/lib/ngtcp2_addr.c +117 -0
  206. data/ext/ngtcp2/lib/ngtcp2_addr.h +69 -0
  207. data/ext/ngtcp2/lib/ngtcp2_balloc.c +90 -0
  208. data/ext/ngtcp2/lib/ngtcp2_balloc.h +91 -0
  209. data/ext/ngtcp2/lib/ngtcp2_bbr.c +693 -0
  210. data/ext/ngtcp2/lib/ngtcp2_bbr.h +157 -0
  211. data/ext/ngtcp2/lib/ngtcp2_bbr2.c +1490 -0
  212. data/ext/ngtcp2/lib/ngtcp2_bbr2.h +149 -0
  213. data/ext/ngtcp2/lib/ngtcp2_buf.c +56 -0
  214. data/ext/ngtcp2/lib/ngtcp2_buf.h +108 -0
  215. data/ext/ngtcp2/lib/ngtcp2_cc.c +616 -0
  216. data/ext/ngtcp2/lib/ngtcp2_cc.h +422 -0
  217. data/ext/ngtcp2/lib/ngtcp2_cid.c +147 -0
  218. data/ext/ngtcp2/lib/ngtcp2_cid.h +175 -0
  219. data/ext/ngtcp2/lib/ngtcp2_conn.c +13731 -0
  220. data/ext/ngtcp2/lib/ngtcp2_conn.h +1119 -0
  221. data/ext/ngtcp2/lib/ngtcp2_conn_stat.h +131 -0
  222. data/ext/ngtcp2/lib/ngtcp2_conv.c +291 -0
  223. data/ext/ngtcp2/lib/ngtcp2_conv.h +208 -0
  224. data/ext/ngtcp2/lib/ngtcp2_crypto.c +895 -0
  225. data/ext/ngtcp2/lib/ngtcp2_crypto.h +148 -0
  226. data/ext/ngtcp2/lib/ngtcp2_err.c +154 -0
  227. data/ext/ngtcp2/lib/ngtcp2_err.h +34 -0
  228. data/ext/ngtcp2/lib/ngtcp2_gaptr.c +167 -0
  229. data/ext/ngtcp2/lib/ngtcp2_gaptr.h +98 -0
  230. data/ext/ngtcp2/lib/ngtcp2_idtr.c +79 -0
  231. data/ext/ngtcp2/lib/ngtcp2_idtr.h +89 -0
  232. data/ext/ngtcp2/lib/ngtcp2_ksl.c +819 -0
  233. data/ext/ngtcp2/lib/ngtcp2_ksl.h +345 -0
  234. data/ext/ngtcp2/lib/ngtcp2_log.c +822 -0
  235. data/ext/ngtcp2/lib/ngtcp2_log.h +123 -0
  236. data/ext/ngtcp2/lib/ngtcp2_macro.h +58 -0
  237. data/ext/ngtcp2/lib/ngtcp2_map.c +336 -0
  238. data/ext/ngtcp2/lib/ngtcp2_map.h +136 -0
  239. data/ext/ngtcp2/lib/ngtcp2_mem.c +113 -0
  240. data/ext/ngtcp2/lib/ngtcp2_mem.h +72 -0
  241. data/ext/ngtcp2/lib/ngtcp2_net.h +136 -0
  242. data/ext/ngtcp2/lib/ngtcp2_objalloc.c +40 -0
  243. data/ext/ngtcp2/lib/ngtcp2_objalloc.h +140 -0
  244. data/ext/ngtcp2/lib/ngtcp2_opl.c +46 -0
  245. data/ext/ngtcp2/lib/ngtcp2_opl.h +65 -0
  246. data/ext/ngtcp2/lib/ngtcp2_path.c +77 -0
  247. data/ext/ngtcp2/lib/ngtcp2_path.h +49 -0
  248. data/ext/ngtcp2/lib/ngtcp2_pkt.c +2527 -0
  249. data/ext/ngtcp2/lib/ngtcp2_pkt.h +1235 -0
  250. data/ext/ngtcp2/lib/ngtcp2_pmtud.c +160 -0
  251. data/ext/ngtcp2/lib/ngtcp2_pmtud.h +123 -0
  252. data/ext/ngtcp2/lib/ngtcp2_ppe.c +230 -0
  253. data/ext/ngtcp2/lib/ngtcp2_ppe.h +153 -0
  254. data/ext/ngtcp2/lib/ngtcp2_pq.c +164 -0
  255. data/ext/ngtcp2/lib/ngtcp2_pq.h +126 -0
  256. data/ext/ngtcp2/lib/ngtcp2_pv.c +172 -0
  257. data/ext/ngtcp2/lib/ngtcp2_pv.h +194 -0
  258. data/ext/ngtcp2/lib/ngtcp2_qlog.c +1219 -0
  259. data/ext/ngtcp2/lib/ngtcp2_qlog.h +161 -0
  260. data/ext/ngtcp2/lib/ngtcp2_range.c +61 -0
  261. data/ext/ngtcp2/lib/ngtcp2_range.h +80 -0
  262. data/ext/ngtcp2/lib/ngtcp2_rcvry.h +40 -0
  263. data/ext/ngtcp2/lib/ngtcp2_ringbuf.c +121 -0
  264. data/ext/ngtcp2/lib/ngtcp2_ringbuf.h +132 -0
  265. data/ext/ngtcp2/lib/ngtcp2_rob.c +319 -0
  266. data/ext/ngtcp2/lib/ngtcp2_rob.h +197 -0
  267. data/ext/ngtcp2/lib/ngtcp2_rst.c +138 -0
  268. data/ext/ngtcp2/lib/ngtcp2_rst.h +86 -0
  269. data/ext/ngtcp2/lib/ngtcp2_rtb.c +1676 -0
  270. data/ext/ngtcp2/lib/ngtcp2_rtb.h +468 -0
  271. data/ext/ngtcp2/lib/ngtcp2_str.c +233 -0
  272. data/ext/ngtcp2/lib/ngtcp2_str.h +94 -0
  273. data/ext/ngtcp2/lib/ngtcp2_strm.c +698 -0
  274. data/ext/ngtcp2/lib/ngtcp2_strm.h +310 -0
  275. data/ext/ngtcp2/lib/ngtcp2_unreachable.c +71 -0
  276. data/ext/ngtcp2/lib/ngtcp2_unreachable.h +46 -0
  277. data/ext/ngtcp2/lib/ngtcp2_vec.c +243 -0
  278. data/ext/ngtcp2/lib/ngtcp2_vec.h +120 -0
  279. data/ext/ngtcp2/lib/ngtcp2_version.c +39 -0
  280. data/ext/ngtcp2/lib/ngtcp2_window_filter.c +99 -0
  281. data/ext/ngtcp2/lib/ngtcp2_window_filter.h +65 -0
  282. data/ext/ngtcp2/m4/ax_check_compile_flag.m4 +74 -0
  283. data/ext/ngtcp2/m4/ax_cxx_compile_stdcxx.m4 +1009 -0
  284. data/ext/ngtcp2/tests/CMakeLists.txt +68 -0
  285. data/ext/ngtcp2/tests/Makefile.am +94 -0
  286. data/ext/ngtcp2/tests/main.c +358 -0
  287. data/ext/ngtcp2/tests/ngtcp2_acktr_test.c +367 -0
  288. data/ext/ngtcp2/tests/ngtcp2_acktr_test.h +37 -0
  289. data/ext/ngtcp2/tests/ngtcp2_conn_test.c +9821 -0
  290. data/ext/ngtcp2/tests/ngtcp2_conn_test.h +104 -0
  291. data/ext/ngtcp2/tests/ngtcp2_conv_test.c +430 -0
  292. data/ext/ngtcp2/tests/ngtcp2_conv_test.h +46 -0
  293. data/ext/ngtcp2/tests/ngtcp2_crypto_test.c +667 -0
  294. data/ext/ngtcp2/tests/ngtcp2_crypto_test.h +35 -0
  295. data/ext/ngtcp2/tests/ngtcp2_gaptr_test.c +127 -0
  296. data/ext/ngtcp2/tests/ngtcp2_gaptr_test.h +36 -0
  297. data/ext/ngtcp2/tests/ngtcp2_idtr_test.c +79 -0
  298. data/ext/ngtcp2/tests/ngtcp2_idtr_test.h +34 -0
  299. data/ext/ngtcp2/tests/ngtcp2_ksl_test.c +502 -0
  300. data/ext/ngtcp2/tests/ngtcp2_ksl_test.h +39 -0
  301. data/ext/ngtcp2/tests/ngtcp2_map_test.c +206 -0
  302. data/ext/ngtcp2/tests/ngtcp2_map_test.h +38 -0
  303. data/ext/ngtcp2/tests/ngtcp2_pkt_test.c +1645 -0
  304. data/ext/ngtcp2/tests/ngtcp2_pkt_test.h +68 -0
  305. data/ext/ngtcp2/tests/ngtcp2_pmtud_test.c +153 -0
  306. data/ext/ngtcp2/tests/ngtcp2_pmtud_test.h +34 -0
  307. data/ext/ngtcp2/tests/ngtcp2_pv_test.c +129 -0
  308. data/ext/ngtcp2/tests/ngtcp2_pv_test.h +35 -0
  309. data/ext/ngtcp2/tests/ngtcp2_range_test.c +105 -0
  310. data/ext/ngtcp2/tests/ngtcp2_range_test.h +36 -0
  311. data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.c +91 -0
  312. data/ext/ngtcp2/tests/ngtcp2_ringbuf_test.h +35 -0
  313. data/ext/ngtcp2/tests/ngtcp2_rob_test.c +552 -0
  314. data/ext/ngtcp2/tests/ngtcp2_rob_test.h +37 -0
  315. data/ext/ngtcp2/tests/ngtcp2_rtb_test.c +470 -0
  316. data/ext/ngtcp2/tests/ngtcp2_rtb_test.h +38 -0
  317. data/ext/ngtcp2/tests/ngtcp2_str_test.c +96 -0
  318. data/ext/ngtcp2/tests/ngtcp2_str_test.h +36 -0
  319. data/ext/ngtcp2/tests/ngtcp2_strm_test.c +575 -0
  320. data/ext/ngtcp2/tests/ngtcp2_strm_test.h +36 -0
  321. data/ext/ngtcp2/tests/ngtcp2_test_helper.c +404 -0
  322. data/ext/ngtcp2/tests/ngtcp2_test_helper.h +191 -0
  323. data/ext/ngtcp2/tests/ngtcp2_vec_test.c +426 -0
  324. data/ext/ngtcp2/tests/ngtcp2_vec_test.h +36 -0
  325. data/ext/ngtcp2/third-party/CMakeLists.txt +34 -0
  326. data/ext/ngtcp2/third-party/Makefile.am +31 -0
  327. data/ext/ngtcp2/third-party/http-parser/AUTHORS +68 -0
  328. data/ext/ngtcp2/third-party/http-parser/LICENSE-MIT +23 -0
  329. data/ext/ngtcp2/third-party/http-parser/Makefile +157 -0
  330. data/ext/ngtcp2/third-party/http-parser/README.md +246 -0
  331. data/ext/ngtcp2/third-party/http-parser/bench.c +111 -0
  332. data/ext/ngtcp2/third-party/http-parser/contrib/parsertrace.c +160 -0
  333. data/ext/ngtcp2/third-party/http-parser/contrib/url_parser.c +47 -0
  334. data/ext/ngtcp2/third-party/http-parser/http_parser.c +2419 -0
  335. data/ext/ngtcp2/third-party/http-parser/http_parser.gyp +111 -0
  336. data/ext/ngtcp2/third-party/http-parser/http_parser.h +431 -0
  337. data/ext/ngtcp2/third-party/http-parser/test.c +4411 -0
  338. data/lib/protocol/quic/version.rb +10 -0
  339. data/lib/protocol/quic.rb +9 -0
  340. data/license.md +21 -0
  341. data.tar.gz.sig +1 -0
  342. metadata +424 -0
  343. metadata.gz.sig +1 -0
@@ -0,0 +1,1009 @@
1
+ # ===========================================================================
2
+ # https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html
3
+ # ===========================================================================
4
+ #
5
+ # SYNOPSIS
6
+ #
7
+ # AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional])
8
+ #
9
+ # DESCRIPTION
10
+ #
11
+ # Check for baseline language coverage in the compiler for the specified
12
+ # version of the C++ standard. If necessary, add switches to CXX and
13
+ # CXXCPP to enable support. VERSION may be '11', '14', '17', or '20' for
14
+ # the respective C++ standard version.
15
+ #
16
+ # The second argument, if specified, indicates whether you insist on an
17
+ # extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g.
18
+ # -std=c++11). If neither is specified, you get whatever works, with
19
+ # preference for no added switch, and then for an extended mode.
20
+ #
21
+ # The third argument, if specified 'mandatory' or if left unspecified,
22
+ # indicates that baseline support for the specified C++ standard is
23
+ # required and that the macro should error out if no mode with that
24
+ # support is found. If specified 'optional', then configuration proceeds
25
+ # regardless, after defining HAVE_CXX${VERSION} if and only if a
26
+ # supporting mode is found.
27
+ #
28
+ # LICENSE
29
+ #
30
+ # Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com>
31
+ # Copyright (c) 2012 Zack Weinberg <zackw@panix.com>
32
+ # Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu>
33
+ # Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com>
34
+ # Copyright (c) 2015 Paul Norman <penorman@mac.com>
35
+ # Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu>
36
+ # Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com>
37
+ # Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com>
38
+ # Copyright (c) 2020 Jason Merrill <jason@redhat.com>
39
+ # Copyright (c) 2021 Jörn Heusipp <osmanx@problemloesungsmaschine.de>
40
+ #
41
+ # Copying and distribution of this file, with or without modification, are
42
+ # permitted in any medium without royalty provided the copyright notice
43
+ # and this notice are preserved. This file is offered as-is, without any
44
+ # warranty.
45
+
46
+ #serial 15
47
+
48
+ dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro
49
+ dnl (serial version number 13).
50
+
51
+ AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl
52
+ m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"],
53
+ [$1], [14], [ax_cxx_compile_alternatives="14 1y"],
54
+ [$1], [17], [ax_cxx_compile_alternatives="17 1z"],
55
+ [$1], [20], [ax_cxx_compile_alternatives="20"],
56
+ [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl
57
+ m4_if([$2], [], [],
58
+ [$2], [ext], [],
59
+ [$2], [noext], [],
60
+ [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl
61
+ m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true],
62
+ [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true],
63
+ [$3], [optional], [ax_cxx_compile_cxx$1_required=false],
64
+ [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])])
65
+ AC_LANG_PUSH([C++])dnl
66
+ ac_success=no
67
+
68
+ m4_if([$2], [], [dnl
69
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features by default,
70
+ ax_cv_cxx_compile_cxx$1,
71
+ [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
72
+ [ax_cv_cxx_compile_cxx$1=yes],
73
+ [ax_cv_cxx_compile_cxx$1=no])])
74
+ if test x$ax_cv_cxx_compile_cxx$1 = xyes; then
75
+ ac_success=yes
76
+ fi])
77
+
78
+ m4_if([$2], [noext], [], [dnl
79
+ if test x$ac_success = xno; then
80
+ for alternative in ${ax_cxx_compile_alternatives}; do
81
+ switch="-std=gnu++${alternative}"
82
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
83
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
84
+ $cachevar,
85
+ [ac_save_CXX="$CXX"
86
+ CXX="$CXX $switch"
87
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
88
+ [eval $cachevar=yes],
89
+ [eval $cachevar=no])
90
+ CXX="$ac_save_CXX"])
91
+ if eval test x\$$cachevar = xyes; then
92
+ CXX="$CXX $switch"
93
+ if test -n "$CXXCPP" ; then
94
+ CXXCPP="$CXXCPP $switch"
95
+ fi
96
+ ac_success=yes
97
+ break
98
+ fi
99
+ done
100
+ fi])
101
+
102
+ m4_if([$2], [ext], [], [dnl
103
+ if test x$ac_success = xno; then
104
+ dnl HP's aCC needs +std=c++11 according to:
105
+ dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf
106
+ dnl Cray's crayCC needs "-h std=c++11"
107
+ for alternative in ${ax_cxx_compile_alternatives}; do
108
+ for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do
109
+ cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch])
110
+ AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch,
111
+ $cachevar,
112
+ [ac_save_CXX="$CXX"
113
+ CXX="$CXX $switch"
114
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])],
115
+ [eval $cachevar=yes],
116
+ [eval $cachevar=no])
117
+ CXX="$ac_save_CXX"])
118
+ if eval test x\$$cachevar = xyes; then
119
+ CXX="$CXX $switch"
120
+ if test -n "$CXXCPP" ; then
121
+ CXXCPP="$CXXCPP $switch"
122
+ fi
123
+ ac_success=yes
124
+ break
125
+ fi
126
+ done
127
+ if test x$ac_success = xyes; then
128
+ break
129
+ fi
130
+ done
131
+ fi])
132
+ AC_LANG_POP([C++])
133
+ if test x$ax_cxx_compile_cxx$1_required = xtrue; then
134
+ if test x$ac_success = xno; then
135
+ AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.])
136
+ fi
137
+ fi
138
+ if test x$ac_success = xno; then
139
+ HAVE_CXX$1=0
140
+ AC_MSG_NOTICE([No compiler with C++$1 support was found])
141
+ else
142
+ HAVE_CXX$1=1
143
+ AC_DEFINE(HAVE_CXX$1,1,
144
+ [define if the compiler supports basic C++$1 syntax])
145
+ fi
146
+ AC_SUBST(HAVE_CXX$1)
147
+ ])
148
+
149
+
150
+ dnl Test body for checking C++11 support
151
+
152
+ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11],
153
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
154
+ )
155
+
156
+ dnl Test body for checking C++14 support
157
+
158
+ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14],
159
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
160
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
161
+ )
162
+
163
+ dnl Test body for checking C++17 support
164
+
165
+ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17],
166
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
167
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
168
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
169
+ )
170
+
171
+ dnl Test body for checking C++20 support
172
+
173
+ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_20],
174
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_11
175
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_14
176
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_17
177
+ _AX_CXX_COMPILE_STDCXX_testbody_new_in_20
178
+ )
179
+
180
+
181
+ dnl Tests for new features in C++11
182
+
183
+ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[
184
+
185
+ // If the compiler admits that it is not ready for C++11, why torture it?
186
+ // Hopefully, this will speed up the test.
187
+
188
+ #ifndef __cplusplus
189
+
190
+ #error "This is not a C++ compiler"
191
+
192
+ // MSVC always sets __cplusplus to 199711L in older versions; newer versions
193
+ // only set it correctly if /Zc:__cplusplus is specified as well as a
194
+ // /std:c++NN switch:
195
+ // https://devblogs.microsoft.com/cppblog/msvc-now-correctly-reports-__cplusplus/
196
+ #elif __cplusplus < 201103L && !defined _MSC_VER
197
+
198
+ #error "This is not a C++11 compiler"
199
+
200
+ #else
201
+
202
+ namespace cxx11
203
+ {
204
+
205
+ namespace test_static_assert
206
+ {
207
+
208
+ template <typename T>
209
+ struct check
210
+ {
211
+ static_assert(sizeof(int) <= sizeof(T), "not big enough");
212
+ };
213
+
214
+ }
215
+
216
+ namespace test_final_override
217
+ {
218
+
219
+ struct Base
220
+ {
221
+ virtual ~Base() {}
222
+ virtual void f() {}
223
+ };
224
+
225
+ struct Derived : public Base
226
+ {
227
+ virtual ~Derived() override {}
228
+ virtual void f() override {}
229
+ };
230
+
231
+ }
232
+
233
+ namespace test_double_right_angle_brackets
234
+ {
235
+
236
+ template < typename T >
237
+ struct check {};
238
+
239
+ typedef check<void> single_type;
240
+ typedef check<check<void>> double_type;
241
+ typedef check<check<check<void>>> triple_type;
242
+ typedef check<check<check<check<void>>>> quadruple_type;
243
+
244
+ }
245
+
246
+ namespace test_decltype
247
+ {
248
+
249
+ int
250
+ f()
251
+ {
252
+ int a = 1;
253
+ decltype(a) b = 2;
254
+ return a + b;
255
+ }
256
+
257
+ }
258
+
259
+ namespace test_type_deduction
260
+ {
261
+
262
+ template < typename T1, typename T2 >
263
+ struct is_same
264
+ {
265
+ static const bool value = false;
266
+ };
267
+
268
+ template < typename T >
269
+ struct is_same<T, T>
270
+ {
271
+ static const bool value = true;
272
+ };
273
+
274
+ template < typename T1, typename T2 >
275
+ auto
276
+ add(T1 a1, T2 a2) -> decltype(a1 + a2)
277
+ {
278
+ return a1 + a2;
279
+ }
280
+
281
+ int
282
+ test(const int c, volatile int v)
283
+ {
284
+ static_assert(is_same<int, decltype(0)>::value == true, "");
285
+ static_assert(is_same<int, decltype(c)>::value == false, "");
286
+ static_assert(is_same<int, decltype(v)>::value == false, "");
287
+ auto ac = c;
288
+ auto av = v;
289
+ auto sumi = ac + av + 'x';
290
+ auto sumf = ac + av + 1.0;
291
+ static_assert(is_same<int, decltype(ac)>::value == true, "");
292
+ static_assert(is_same<int, decltype(av)>::value == true, "");
293
+ static_assert(is_same<int, decltype(sumi)>::value == true, "");
294
+ static_assert(is_same<int, decltype(sumf)>::value == false, "");
295
+ static_assert(is_same<int, decltype(add(c, v))>::value == true, "");
296
+ return (sumf > 0.0) ? sumi : add(c, v);
297
+ }
298
+
299
+ }
300
+
301
+ namespace test_noexcept
302
+ {
303
+
304
+ int f() { return 0; }
305
+ int g() noexcept { return 0; }
306
+
307
+ static_assert(noexcept(f()) == false, "");
308
+ static_assert(noexcept(g()) == true, "");
309
+
310
+ }
311
+
312
+ namespace test_constexpr
313
+ {
314
+
315
+ template < typename CharT >
316
+ unsigned long constexpr
317
+ strlen_c_r(const CharT *const s, const unsigned long acc) noexcept
318
+ {
319
+ return *s ? strlen_c_r(s + 1, acc + 1) : acc;
320
+ }
321
+
322
+ template < typename CharT >
323
+ unsigned long constexpr
324
+ strlen_c(const CharT *const s) noexcept
325
+ {
326
+ return strlen_c_r(s, 0UL);
327
+ }
328
+
329
+ static_assert(strlen_c("") == 0UL, "");
330
+ static_assert(strlen_c("1") == 1UL, "");
331
+ static_assert(strlen_c("example") == 7UL, "");
332
+ static_assert(strlen_c("another\0example") == 7UL, "");
333
+
334
+ }
335
+
336
+ namespace test_rvalue_references
337
+ {
338
+
339
+ template < int N >
340
+ struct answer
341
+ {
342
+ static constexpr int value = N;
343
+ };
344
+
345
+ answer<1> f(int&) { return answer<1>(); }
346
+ answer<2> f(const int&) { return answer<2>(); }
347
+ answer<3> f(int&&) { return answer<3>(); }
348
+
349
+ void
350
+ test()
351
+ {
352
+ int i = 0;
353
+ const int c = 0;
354
+ static_assert(decltype(f(i))::value == 1, "");
355
+ static_assert(decltype(f(c))::value == 2, "");
356
+ static_assert(decltype(f(0))::value == 3, "");
357
+ }
358
+
359
+ }
360
+
361
+ namespace test_uniform_initialization
362
+ {
363
+
364
+ struct test
365
+ {
366
+ static const int zero {};
367
+ static const int one {1};
368
+ };
369
+
370
+ static_assert(test::zero == 0, "");
371
+ static_assert(test::one == 1, "");
372
+
373
+ }
374
+
375
+ namespace test_lambdas
376
+ {
377
+
378
+ void
379
+ test1()
380
+ {
381
+ auto lambda1 = [](){};
382
+ auto lambda2 = lambda1;
383
+ lambda1();
384
+ lambda2();
385
+ }
386
+
387
+ int
388
+ test2()
389
+ {
390
+ auto a = [](int i, int j){ return i + j; }(1, 2);
391
+ auto b = []() -> int { return '0'; }();
392
+ auto c = [=](){ return a + b; }();
393
+ auto d = [&](){ return c; }();
394
+ auto e = [a, &b](int x) mutable {
395
+ const auto identity = [](int y){ return y; };
396
+ for (auto i = 0; i < a; ++i)
397
+ a += b--;
398
+ return x + identity(a + b);
399
+ }(0);
400
+ return a + b + c + d + e;
401
+ }
402
+
403
+ int
404
+ test3()
405
+ {
406
+ const auto nullary = [](){ return 0; };
407
+ const auto unary = [](int x){ return x; };
408
+ using nullary_t = decltype(nullary);
409
+ using unary_t = decltype(unary);
410
+ const auto higher1st = [](nullary_t f){ return f(); };
411
+ const auto higher2nd = [unary](nullary_t f1){
412
+ return [unary, f1](unary_t f2){ return f2(unary(f1())); };
413
+ };
414
+ return higher1st(nullary) + higher2nd(nullary)(unary);
415
+ }
416
+
417
+ }
418
+
419
+ namespace test_variadic_templates
420
+ {
421
+
422
+ template <int...>
423
+ struct sum;
424
+
425
+ template <int N0, int... N1toN>
426
+ struct sum<N0, N1toN...>
427
+ {
428
+ static constexpr auto value = N0 + sum<N1toN...>::value;
429
+ };
430
+
431
+ template <>
432
+ struct sum<>
433
+ {
434
+ static constexpr auto value = 0;
435
+ };
436
+
437
+ static_assert(sum<>::value == 0, "");
438
+ static_assert(sum<1>::value == 1, "");
439
+ static_assert(sum<23>::value == 23, "");
440
+ static_assert(sum<1, 2>::value == 3, "");
441
+ static_assert(sum<5, 5, 11>::value == 21, "");
442
+ static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, "");
443
+
444
+ }
445
+
446
+ // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae
447
+ // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function
448
+ // because of this.
449
+ namespace test_template_alias_sfinae
450
+ {
451
+
452
+ struct foo {};
453
+
454
+ template<typename T>
455
+ using member = typename T::member_type;
456
+
457
+ template<typename T>
458
+ void func(...) {}
459
+
460
+ template<typename T>
461
+ void func(member<T>*) {}
462
+
463
+ void test();
464
+
465
+ void test() { func<foo>(0); }
466
+
467
+ }
468
+
469
+ } // namespace cxx11
470
+
471
+ #endif // __cplusplus >= 201103L
472
+
473
+ ]])
474
+
475
+
476
+ dnl Tests for new features in C++14
477
+
478
+ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[
479
+
480
+ // If the compiler admits that it is not ready for C++14, why torture it?
481
+ // Hopefully, this will speed up the test.
482
+
483
+ #ifndef __cplusplus
484
+
485
+ #error "This is not a C++ compiler"
486
+
487
+ #elif __cplusplus < 201402L && !defined _MSC_VER
488
+
489
+ #error "This is not a C++14 compiler"
490
+
491
+ #else
492
+
493
+ namespace cxx14
494
+ {
495
+
496
+ namespace test_polymorphic_lambdas
497
+ {
498
+
499
+ int
500
+ test()
501
+ {
502
+ const auto lambda = [](auto&&... args){
503
+ const auto istiny = [](auto x){
504
+ return (sizeof(x) == 1UL) ? 1 : 0;
505
+ };
506
+ const int aretiny[] = { istiny(args)... };
507
+ return aretiny[0];
508
+ };
509
+ return lambda(1, 1L, 1.0f, '1');
510
+ }
511
+
512
+ }
513
+
514
+ namespace test_binary_literals
515
+ {
516
+
517
+ constexpr auto ivii = 0b0000000000101010;
518
+ static_assert(ivii == 42, "wrong value");
519
+
520
+ }
521
+
522
+ namespace test_generalized_constexpr
523
+ {
524
+
525
+ template < typename CharT >
526
+ constexpr unsigned long
527
+ strlen_c(const CharT *const s) noexcept
528
+ {
529
+ auto length = 0UL;
530
+ for (auto p = s; *p; ++p)
531
+ ++length;
532
+ return length;
533
+ }
534
+
535
+ static_assert(strlen_c("") == 0UL, "");
536
+ static_assert(strlen_c("x") == 1UL, "");
537
+ static_assert(strlen_c("test") == 4UL, "");
538
+ static_assert(strlen_c("another\0test") == 7UL, "");
539
+
540
+ }
541
+
542
+ namespace test_lambda_init_capture
543
+ {
544
+
545
+ int
546
+ test()
547
+ {
548
+ auto x = 0;
549
+ const auto lambda1 = [a = x](int b){ return a + b; };
550
+ const auto lambda2 = [a = lambda1(x)](){ return a; };
551
+ return lambda2();
552
+ }
553
+
554
+ }
555
+
556
+ namespace test_digit_separators
557
+ {
558
+
559
+ constexpr auto ten_million = 100'000'000;
560
+ static_assert(ten_million == 100000000, "");
561
+
562
+ }
563
+
564
+ namespace test_return_type_deduction
565
+ {
566
+
567
+ auto f(int& x) { return x; }
568
+ decltype(auto) g(int& x) { return x; }
569
+
570
+ template < typename T1, typename T2 >
571
+ struct is_same
572
+ {
573
+ static constexpr auto value = false;
574
+ };
575
+
576
+ template < typename T >
577
+ struct is_same<T, T>
578
+ {
579
+ static constexpr auto value = true;
580
+ };
581
+
582
+ int
583
+ test()
584
+ {
585
+ auto x = 0;
586
+ static_assert(is_same<int, decltype(f(x))>::value, "");
587
+ static_assert(is_same<int&, decltype(g(x))>::value, "");
588
+ return x;
589
+ }
590
+
591
+ }
592
+
593
+ } // namespace cxx14
594
+
595
+ #endif // __cplusplus >= 201402L
596
+
597
+ ]])
598
+
599
+
600
+ dnl Tests for new features in C++17
601
+
602
+ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[
603
+
604
+ // If the compiler admits that it is not ready for C++17, why torture it?
605
+ // Hopefully, this will speed up the test.
606
+
607
+ #ifndef __cplusplus
608
+
609
+ #error "This is not a C++ compiler"
610
+
611
+ #elif __cplusplus < 201703L && !defined _MSC_VER
612
+
613
+ #error "This is not a C++17 compiler"
614
+
615
+ #else
616
+
617
+ #include <initializer_list>
618
+ #include <utility>
619
+ #include <type_traits>
620
+
621
+ namespace cxx17
622
+ {
623
+
624
+ namespace test_constexpr_lambdas
625
+ {
626
+
627
+ constexpr int foo = [](){return 42;}();
628
+
629
+ }
630
+
631
+ namespace test::nested_namespace::definitions
632
+ {
633
+
634
+ }
635
+
636
+ namespace test_fold_expression
637
+ {
638
+
639
+ template<typename... Args>
640
+ int multiply(Args... args)
641
+ {
642
+ return (args * ... * 1);
643
+ }
644
+
645
+ template<typename... Args>
646
+ bool all(Args... args)
647
+ {
648
+ return (args && ...);
649
+ }
650
+
651
+ }
652
+
653
+ namespace test_extended_static_assert
654
+ {
655
+
656
+ static_assert (true);
657
+
658
+ }
659
+
660
+ namespace test_auto_brace_init_list
661
+ {
662
+
663
+ auto foo = {5};
664
+ auto bar {5};
665
+
666
+ static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value);
667
+ static_assert(std::is_same<int, decltype(bar)>::value);
668
+ }
669
+
670
+ namespace test_typename_in_template_template_parameter
671
+ {
672
+
673
+ template<template<typename> typename X> struct D;
674
+
675
+ }
676
+
677
+ namespace test_fallthrough_nodiscard_maybe_unused_attributes
678
+ {
679
+
680
+ int f1()
681
+ {
682
+ return 42;
683
+ }
684
+
685
+ [[nodiscard]] int f2()
686
+ {
687
+ [[maybe_unused]] auto unused = f1();
688
+
689
+ switch (f1())
690
+ {
691
+ case 17:
692
+ f1();
693
+ [[fallthrough]];
694
+ case 42:
695
+ f1();
696
+ }
697
+ return f1();
698
+ }
699
+
700
+ }
701
+
702
+ namespace test_extended_aggregate_initialization
703
+ {
704
+
705
+ struct base1
706
+ {
707
+ int b1, b2 = 42;
708
+ };
709
+
710
+ struct base2
711
+ {
712
+ base2() {
713
+ b3 = 42;
714
+ }
715
+ int b3;
716
+ };
717
+
718
+ struct derived : base1, base2
719
+ {
720
+ int d;
721
+ };
722
+
723
+ derived d1 {{1, 2}, {}, 4}; // full initialization
724
+ derived d2 {{}, {}, 4}; // value-initialized bases
725
+
726
+ }
727
+
728
+ namespace test_general_range_based_for_loop
729
+ {
730
+
731
+ struct iter
732
+ {
733
+ int i;
734
+
735
+ int& operator* ()
736
+ {
737
+ return i;
738
+ }
739
+
740
+ const int& operator* () const
741
+ {
742
+ return i;
743
+ }
744
+
745
+ iter& operator++()
746
+ {
747
+ ++i;
748
+ return *this;
749
+ }
750
+ };
751
+
752
+ struct sentinel
753
+ {
754
+ int i;
755
+ };
756
+
757
+ bool operator== (const iter& i, const sentinel& s)
758
+ {
759
+ return i.i == s.i;
760
+ }
761
+
762
+ bool operator!= (const iter& i, const sentinel& s)
763
+ {
764
+ return !(i == s);
765
+ }
766
+
767
+ struct range
768
+ {
769
+ iter begin() const
770
+ {
771
+ return {0};
772
+ }
773
+
774
+ sentinel end() const
775
+ {
776
+ return {5};
777
+ }
778
+ };
779
+
780
+ void f()
781
+ {
782
+ range r {};
783
+
784
+ for (auto i : r)
785
+ {
786
+ [[maybe_unused]] auto v = i;
787
+ }
788
+ }
789
+
790
+ }
791
+
792
+ namespace test_lambda_capture_asterisk_this_by_value
793
+ {
794
+
795
+ struct t
796
+ {
797
+ int i;
798
+ int foo()
799
+ {
800
+ return [*this]()
801
+ {
802
+ return i;
803
+ }();
804
+ }
805
+ };
806
+
807
+ }
808
+
809
+ namespace test_enum_class_construction
810
+ {
811
+
812
+ enum class byte : unsigned char
813
+ {};
814
+
815
+ byte foo {42};
816
+
817
+ }
818
+
819
+ namespace test_constexpr_if
820
+ {
821
+
822
+ template <bool cond>
823
+ int f ()
824
+ {
825
+ if constexpr(cond)
826
+ {
827
+ return 13;
828
+ }
829
+ else
830
+ {
831
+ return 42;
832
+ }
833
+ }
834
+
835
+ }
836
+
837
+ namespace test_selection_statement_with_initializer
838
+ {
839
+
840
+ int f()
841
+ {
842
+ return 13;
843
+ }
844
+
845
+ int f2()
846
+ {
847
+ if (auto i = f(); i > 0)
848
+ {
849
+ return 3;
850
+ }
851
+
852
+ switch (auto i = f(); i + 4)
853
+ {
854
+ case 17:
855
+ return 2;
856
+
857
+ default:
858
+ return 1;
859
+ }
860
+ }
861
+
862
+ }
863
+
864
+ namespace test_template_argument_deduction_for_class_templates
865
+ {
866
+
867
+ template <typename T1, typename T2>
868
+ struct pair
869
+ {
870
+ pair (T1 p1, T2 p2)
871
+ : m1 {p1},
872
+ m2 {p2}
873
+ {}
874
+
875
+ T1 m1;
876
+ T2 m2;
877
+ };
878
+
879
+ void f()
880
+ {
881
+ [[maybe_unused]] auto p = pair{13, 42u};
882
+ }
883
+
884
+ }
885
+
886
+ namespace test_non_type_auto_template_parameters
887
+ {
888
+
889
+ template <auto n>
890
+ struct B
891
+ {};
892
+
893
+ B<5> b1;
894
+ B<'a'> b2;
895
+
896
+ }
897
+
898
+ namespace test_structured_bindings
899
+ {
900
+
901
+ int arr[2] = { 1, 2 };
902
+ std::pair<int, int> pr = { 1, 2 };
903
+
904
+ auto f1() -> int(&)[2]
905
+ {
906
+ return arr;
907
+ }
908
+
909
+ auto f2() -> std::pair<int, int>&
910
+ {
911
+ return pr;
912
+ }
913
+
914
+ struct S
915
+ {
916
+ int x1 : 2;
917
+ volatile double y1;
918
+ };
919
+
920
+ S f3()
921
+ {
922
+ return {};
923
+ }
924
+
925
+ auto [ x1, y1 ] = f1();
926
+ auto& [ xr1, yr1 ] = f1();
927
+ auto [ x2, y2 ] = f2();
928
+ auto& [ xr2, yr2 ] = f2();
929
+ const auto [ x3, y3 ] = f3();
930
+
931
+ }
932
+
933
+ namespace test_exception_spec_type_system
934
+ {
935
+
936
+ struct Good {};
937
+ struct Bad {};
938
+
939
+ void g1() noexcept;
940
+ void g2();
941
+
942
+ template<typename T>
943
+ Bad
944
+ f(T*, T*);
945
+
946
+ template<typename T1, typename T2>
947
+ Good
948
+ f(T1*, T2*);
949
+
950
+ static_assert (std::is_same_v<Good, decltype(f(g1, g2))>);
951
+
952
+ }
953
+
954
+ namespace test_inline_variables
955
+ {
956
+
957
+ template<class T> void f(T)
958
+ {}
959
+
960
+ template<class T> inline T g(T)
961
+ {
962
+ return T{};
963
+ }
964
+
965
+ template<> inline void f<>(int)
966
+ {}
967
+
968
+ template<> int g<>(int)
969
+ {
970
+ return 5;
971
+ }
972
+
973
+ }
974
+
975
+ } // namespace cxx17
976
+
977
+ #endif // __cplusplus < 201703L && !defined _MSC_VER
978
+
979
+ ]])
980
+
981
+
982
+ dnl Tests for new features in C++20
983
+
984
+ m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_20], [[
985
+
986
+ #ifndef __cplusplus
987
+
988
+ #error "This is not a C++ compiler"
989
+
990
+ #elif __cplusplus < 202002L && !defined _MSC_VER
991
+
992
+ #error "This is not a C++20 compiler"
993
+
994
+ #else
995
+
996
+ #include <version>
997
+
998
+ namespace cxx20
999
+ {
1000
+
1001
+ // As C++20 supports feature test macros in the standard, there is no
1002
+ // immediate need to actually test for feature availability on the
1003
+ // Autoconf side.
1004
+
1005
+ } // namespace cxx20
1006
+
1007
+ #endif // __cplusplus < 202002L && !defined _MSC_VER
1008
+
1009
+ ]])