script_core 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (381) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/.rubocop.yml +8 -6
  4. data/.ruby-version +1 -1
  5. data/Gemfile +2 -1
  6. data/bin/sandbox +1 -1
  7. data/ext/enterprise_script_service/Rakefile +1 -1
  8. data/ext/enterprise_script_service/flags.rb +5 -0
  9. data/ext/enterprise_script_service/libseccomp/CHANGELOG +15 -0
  10. data/ext/enterprise_script_service/libseccomp/CREDITS +3 -0
  11. data/ext/enterprise_script_service/libseccomp/Makefile.am +1 -1
  12. data/ext/enterprise_script_service/libseccomp/README.md +1 -1
  13. data/ext/enterprise_script_service/libseccomp/SECURITY.md +45 -0
  14. data/ext/enterprise_script_service/libseccomp/configure.ac +3 -3
  15. data/ext/enterprise_script_service/libseccomp/doc/admin/MAINTAINER_PROCESS.md +95 -0
  16. data/ext/enterprise_script_service/libseccomp/{RELEASE_PROCESS.md → doc/admin/RELEASE_PROCESS.md} +9 -1
  17. data/ext/enterprise_script_service/libseccomp/include/Makefile.am +1 -1
  18. data/ext/enterprise_script_service/libseccomp/include/seccomp-syscalls.h +2292 -0
  19. data/ext/enterprise_script_service/libseccomp/include/seccomp.h.in +3 -1065
  20. data/ext/enterprise_script_service/libseccomp/src/arch-aarch64-syscalls.c +35 -3
  21. data/ext/enterprise_script_service/libseccomp/src/arch-arm-syscalls.c +35 -3
  22. data/ext/enterprise_script_service/libseccomp/src/arch-mips-syscalls.c +43 -11
  23. data/ext/enterprise_script_service/libseccomp/src/arch-mips64-syscalls.c +33 -1
  24. data/ext/enterprise_script_service/libseccomp/src/arch-mips64n32-syscalls.c +33 -1
  25. data/ext/enterprise_script_service/libseccomp/src/arch-parisc-syscalls.c +34 -2
  26. data/ext/enterprise_script_service/libseccomp/src/arch-ppc-syscalls.c +43 -11
  27. data/ext/enterprise_script_service/libseccomp/src/arch-ppc64-syscalls.c +44 -12
  28. data/ext/enterprise_script_service/libseccomp/src/arch-s390-syscalls.c +46 -14
  29. data/ext/enterprise_script_service/libseccomp/src/arch-s390.c +142 -18
  30. data/ext/enterprise_script_service/libseccomp/src/arch-s390x-syscalls.c +47 -15
  31. data/ext/enterprise_script_service/libseccomp/src/arch-s390x.c +143 -17
  32. data/ext/enterprise_script_service/libseccomp/src/arch-x32-syscalls.c +33 -1
  33. data/ext/enterprise_script_service/libseccomp/src/arch-x86-syscalls.c +94 -12
  34. data/ext/enterprise_script_service/libseccomp/src/arch-x86.c +142 -19
  35. data/ext/enterprise_script_service/libseccomp/src/arch-x86_64-syscalls.c +33 -1
  36. data/ext/enterprise_script_service/libseccomp/src/db.c +1 -0
  37. data/ext/enterprise_script_service/libseccomp/src/gen_bpf.c +10 -3
  38. data/ext/enterprise_script_service/libseccomp/src/python/Makefile.am +4 -4
  39. data/ext/enterprise_script_service/libseccomp/src/python/seccomp.pyx +2 -0
  40. data/ext/enterprise_script_service/libseccomp/tests/.gitignore +1 -0
  41. data/ext/enterprise_script_service/libseccomp/tests/50-sim-hash_collision.c +98 -0
  42. data/ext/enterprise_script_service/libseccomp/tests/50-sim-hash_collision.py +61 -0
  43. data/ext/enterprise_script_service/libseccomp/tests/50-sim-hash_collision.tests +18 -0
  44. data/ext/enterprise_script_service/libseccomp/tests/Makefile.am +6 -3
  45. data/ext/enterprise_script_service/libseccomp/tools/Makefile.am +0 -2
  46. data/ext/enterprise_script_service/libseccomp/tools/check-syntax +1 -0
  47. data/ext/enterprise_script_service/libseccomp/tools/scmp_bpf_sim.c +2 -0
  48. data/ext/enterprise_script_service/mruby-mpdecimal/src/ext.c +1 -1
  49. data/ext/enterprise_script_service/mruby/.gitignore +2 -2
  50. data/ext/enterprise_script_service/mruby/CONTRIBUTING.md +10 -3
  51. data/ext/enterprise_script_service/mruby/Doxyfile +2408 -0
  52. data/ext/enterprise_script_service/mruby/README.md +21 -8
  53. data/ext/enterprise_script_service/mruby/Rakefile +4 -13
  54. data/ext/enterprise_script_service/mruby/appveyor_config.rb +1 -1
  55. data/ext/enterprise_script_service/mruby/build_config.rb +3 -3
  56. data/ext/enterprise_script_service/mruby/doc/guides/compile.md +42 -42
  57. data/ext/enterprise_script_service/mruby/doc/guides/debugger.md +1 -1
  58. data/ext/enterprise_script_service/mruby/doc/guides/mrbconf.md +45 -6
  59. data/ext/enterprise_script_service/mruby/doc/guides/mrbgems.md +5 -0
  60. data/ext/enterprise_script_service/mruby/doc/limitations.md +88 -38
  61. data/ext/enterprise_script_service/mruby/doc/mruby_logo_red_icon.png +0 -0
  62. data/ext/enterprise_script_service/mruby/doc/opcode.md +94 -94
  63. data/ext/enterprise_script_service/mruby/include/mrbconf.h +74 -11
  64. data/ext/enterprise_script_service/mruby/include/mruby.h +242 -146
  65. data/ext/enterprise_script_service/mruby/include/mruby/array.h +7 -7
  66. data/ext/enterprise_script_service/mruby/include/mruby/boxing_nan.h +2 -9
  67. data/ext/enterprise_script_service/mruby/include/mruby/boxing_no.h +11 -10
  68. data/ext/enterprise_script_service/mruby/include/mruby/boxing_word.h +104 -69
  69. data/ext/enterprise_script_service/mruby/include/mruby/class.h +7 -5
  70. data/ext/enterprise_script_service/mruby/include/mruby/common.h +9 -7
  71. data/ext/enterprise_script_service/mruby/include/mruby/compile.h +6 -6
  72. data/ext/enterprise_script_service/mruby/include/mruby/data.h +5 -5
  73. data/ext/enterprise_script_service/mruby/include/mruby/debug.h +2 -2
  74. data/ext/enterprise_script_service/mruby/include/mruby/dump.h +3 -7
  75. data/ext/enterprise_script_service/mruby/include/mruby/error.h +34 -6
  76. data/ext/enterprise_script_service/mruby/include/mruby/gc.h +2 -2
  77. data/ext/enterprise_script_service/mruby/include/mruby/hash.h +4 -11
  78. data/ext/enterprise_script_service/mruby/include/mruby/irep.h +16 -4
  79. data/ext/enterprise_script_service/mruby/include/mruby/istruct.h +4 -4
  80. data/ext/enterprise_script_service/mruby/include/mruby/khash.h +2 -2
  81. data/ext/enterprise_script_service/mruby/include/mruby/numeric.h +41 -7
  82. data/ext/enterprise_script_service/mruby/include/mruby/object.h +8 -9
  83. data/ext/enterprise_script_service/mruby/include/mruby/opcode.h +2 -2
  84. data/ext/enterprise_script_service/mruby/include/mruby/ops.h +6 -6
  85. data/ext/enterprise_script_service/mruby/include/mruby/proc.h +19 -13
  86. data/ext/enterprise_script_service/mruby/include/mruby/range.h +10 -4
  87. data/ext/enterprise_script_service/mruby/include/mruby/re.h +2 -2
  88. data/ext/enterprise_script_service/mruby/include/mruby/string.h +130 -107
  89. data/ext/enterprise_script_service/mruby/include/mruby/throw.h +2 -2
  90. data/ext/enterprise_script_service/mruby/include/mruby/value.h +137 -49
  91. data/ext/enterprise_script_service/mruby/include/mruby/variable.h +3 -5
  92. data/ext/enterprise_script_service/mruby/include/mruby/version.h +24 -10
  93. data/ext/enterprise_script_service/mruby/lib/mruby-core-ext.rb +2 -39
  94. data/ext/enterprise_script_service/mruby/lib/mruby/build.rb +32 -15
  95. data/ext/enterprise_script_service/mruby/lib/mruby/build/command.rb +63 -17
  96. data/ext/enterprise_script_service/mruby/lib/mruby/build/load_gems.rb +24 -10
  97. data/ext/enterprise_script_service/mruby/lib/mruby/gem.rb +11 -7
  98. data/ext/enterprise_script_service/mruby/lib/mruby/lockfile.rb +81 -0
  99. data/ext/enterprise_script_service/mruby/minirake +27 -11
  100. data/ext/enterprise_script_service/mruby/mrbgems/default.gembox +3 -0
  101. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrbgem.rake +0 -1
  102. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/mrblib/array.rb +47 -9
  103. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/src/array.c +3 -3
  104. data/ext/enterprise_script_service/mruby/mrbgems/mruby-array-ext/test/array.rb +50 -29
  105. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apibreak.c +3 -3
  106. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/apiprint.c +2 -2
  107. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/cmdprint.c +3 -3
  108. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.c +2 -2
  109. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdb.h +1 -1
  110. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-debugger/tools/mrdb/mrdbconf.h +4 -0
  111. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mirb/tools/mirb/mirb.c +28 -1
  112. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mrbc/tools/mrbc/mrbc.c +1 -2
  113. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/bintest/mruby.rb +75 -8
  114. data/ext/enterprise_script_service/mruby/mrbgems/mruby-bin-mruby/tools/mruby/mruby.c +134 -90
  115. data/ext/enterprise_script_service/mruby/mrbgems/mruby-class-ext/src/class.c +7 -8
  116. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/codegen.c +69 -46
  117. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/keywords +0 -3
  118. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/lex.def +51 -59
  119. data/ext/enterprise_script_service/mruby/mrbgems/mruby-compiler/core/parse.y +430 -241
  120. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrbgem.rake +10 -0
  121. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/mrblib/complex.rb +122 -0
  122. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/src/complex.c +249 -0
  123. data/ext/enterprise_script_service/mruby/mrbgems/mruby-complex/test/complex.rb +153 -0
  124. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enum-chain/mrblib/chain.rb +19 -17
  125. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enum-chain/test/enum_chain.rb +41 -9
  126. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enum-ext/mrblib/enum.rb +30 -4
  127. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enum-ext/test/enum.rb +8 -3
  128. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrbgem.rake +0 -1
  129. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/mrblib/enumerator.rb +46 -14
  130. data/ext/enterprise_script_service/mruby/mrbgems/mruby-enumerator/test/enumerator.rb +51 -2
  131. data/ext/enterprise_script_service/mruby/mrbgems/mruby-error/src/exception.c +10 -0
  132. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/src/eval.c +47 -44
  133. data/ext/enterprise_script_service/mruby/mrbgems/mruby-eval/test/eval.rb +2 -2
  134. data/ext/enterprise_script_service/mruby/mrbgems/mruby-exit/src/mruby-exit.c +9 -4
  135. data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/src/fiber.c +16 -12
  136. data/ext/enterprise_script_service/mruby/mrbgems/mruby-fiber/test/fiber.rb +1 -1
  137. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrbgem.rake +0 -2
  138. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/mrblib/hash.rb +3 -0
  139. data/ext/enterprise_script_service/mruby/mrbgems/mruby-hash-ext/test/hash.rb +3 -7
  140. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/README.md +1 -3
  141. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrbgem.rake +1 -1
  142. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/file.rb +0 -5
  143. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/io.rb +24 -38
  144. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/mrblib/kernel.rb +16 -0
  145. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file.c +19 -18
  146. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/file_test.c +5 -16
  147. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/src/io.c +54 -42
  148. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file.rb +24 -20
  149. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/file_test.rb +4 -9
  150. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/io.rb +41 -35
  151. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/test/mruby_io_test.c +9 -36
  152. data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/mrbgem.rake +1 -1
  153. data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/src/kernel.c +9 -27
  154. data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/test/kernel.rb +2 -0
  155. data/ext/enterprise_script_service/mruby/mrbgems/mruby-math/src/math.c +5 -2
  156. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/src/metaprog.c +39 -24
  157. data/ext/enterprise_script_service/mruby/mrbgems/mruby-metaprog/test/metaprog.rb +48 -17
  158. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/mrblib/method.rb +0 -12
  159. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/src/method.c +134 -101
  160. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/test/method.rb +9 -1
  161. data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/mrblib/numeric_ext.rb +1 -5
  162. data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/src/numeric_ext.c +17 -37
  163. data/ext/enterprise_script_service/mruby/mrbgems/mruby-numeric-ext/test/numeric.rb +0 -8
  164. data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/mrbgem.rake +1 -1
  165. data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/mrblib/object.rb +15 -1
  166. data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/src/object.c +35 -6
  167. data/ext/enterprise_script_service/mruby/mrbgems/mruby-object-ext/test/nil.rb +4 -0
  168. data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/src/mruby_objectspace.c +1 -5
  169. data/ext/enterprise_script_service/mruby/mrbgems/mruby-objectspace/test/objectspace.rb +1 -1
  170. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/src/pack.c +28 -23
  171. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/test/pack.rb +43 -49
  172. data/ext/enterprise_script_service/mruby/mrbgems/mruby-print/mrblib/print.rb +3 -9
  173. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/src/proc.c +6 -9
  174. data/ext/enterprise_script_service/mruby/mrbgems/mruby-proc-ext/test/proc.rb +21 -5
  175. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.c +157 -124
  176. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/test/random.rb +72 -26
  177. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/mrblib/range.rb +38 -0
  178. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/src/range.c +26 -11
  179. data/ext/enterprise_script_service/mruby/mrbgems/mruby-range-ext/test/range.rb +111 -1
  180. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrbgem.rake +5 -0
  181. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/mrblib/rational.rb +117 -0
  182. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/src/rational.c +209 -0
  183. data/ext/enterprise_script_service/mruby/mrbgems/mruby-rational/test/rational.rb +308 -0
  184. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/README.md +1 -1
  185. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/src/socket.c +10 -9
  186. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/kernel.c +2 -2
  187. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sprintf/src/sprintf.c +22 -24
  188. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrbgem.rake +0 -1
  189. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/mrblib/string.rb +8 -4
  190. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/src/string.c +116 -117
  191. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/test/numeric.rb +29 -0
  192. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/test/range.rb +26 -0
  193. data/ext/enterprise_script_service/mruby/mrbgems/mruby-string-ext/test/string.rb +32 -50
  194. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/mrblib/struct.rb +5 -7
  195. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/src/struct.c +43 -57
  196. data/ext/enterprise_script_service/mruby/mrbgems/mruby-struct/test/struct.rb +16 -11
  197. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/src/symbol.c +2 -2
  198. data/ext/enterprise_script_service/mruby/mrbgems/mruby-symbol-ext/test/symbol.rb +1 -1
  199. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/driver.c +152 -1
  200. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/mrbgem.rake +4 -3
  201. data/ext/enterprise_script_service/mruby/mrbgems/mruby-test/vformat.c +200 -0
  202. data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/include/mruby/time.h +2 -1
  203. data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/src/time.c +199 -68
  204. data/ext/enterprise_script_service/mruby/mrbgems/mruby-time/test/time.rb +81 -46
  205. data/ext/enterprise_script_service/mruby/mrblib/array.rb +14 -16
  206. data/ext/enterprise_script_service/mruby/mrblib/enum.rb +13 -9
  207. data/ext/enterprise_script_service/mruby/mrblib/hash.rb +5 -7
  208. data/ext/enterprise_script_service/mruby/mrblib/kernel.rb +1 -1
  209. data/ext/enterprise_script_service/mruby/mrblib/numeric.rb +4 -4
  210. data/ext/enterprise_script_service/mruby/mrblib/range.rb +1 -1
  211. data/ext/enterprise_script_service/mruby/mrblib/string.rb +55 -112
  212. data/ext/enterprise_script_service/mruby/mruby-source.gemspec +1 -1
  213. data/ext/enterprise_script_service/mruby/oss-fuzz/config/mruby.dict +105 -0
  214. data/ext/enterprise_script_service/mruby/oss-fuzz/config/mruby_fuzzer.options +5 -0
  215. data/ext/enterprise_script_service/mruby/oss-fuzz/config/mruby_proto_fuzzer.options +4 -0
  216. data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_fuzzer.c +18 -0
  217. data/ext/enterprise_script_service/mruby/oss-fuzz/mruby_proto_fuzzer.cpp +44 -0
  218. data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.cpp +455 -0
  219. data/ext/enterprise_script_service/mruby/oss-fuzz/proto_to_ruby.h +55 -0
  220. data/ext/enterprise_script_service/mruby/oss-fuzz/ruby.proto +201 -0
  221. data/ext/enterprise_script_service/mruby/src/array.c +95 -46
  222. data/ext/enterprise_script_service/mruby/src/backtrace.c +6 -8
  223. data/ext/enterprise_script_service/mruby/src/class.c +370 -278
  224. data/ext/enterprise_script_service/mruby/src/codedump.c +34 -34
  225. data/ext/enterprise_script_service/mruby/src/debug.c +2 -2
  226. data/ext/enterprise_script_service/mruby/src/dump.c +8 -6
  227. data/ext/enterprise_script_service/mruby/src/enum.c +1 -1
  228. data/ext/enterprise_script_service/mruby/src/error.c +157 -55
  229. data/ext/enterprise_script_service/mruby/src/etc.c +13 -46
  230. data/ext/enterprise_script_service/mruby/src/fmt_fp.c +2 -2
  231. data/ext/enterprise_script_service/mruby/src/gc.c +30 -11
  232. data/ext/enterprise_script_service/mruby/src/hash.c +23 -14
  233. data/ext/enterprise_script_service/mruby/src/kernel.c +16 -54
  234. data/ext/enterprise_script_service/mruby/src/load.c +40 -76
  235. data/ext/enterprise_script_service/mruby/src/numeric.c +164 -94
  236. data/ext/enterprise_script_service/mruby/src/object.c +16 -39
  237. data/ext/enterprise_script_service/mruby/src/pool.c +0 -2
  238. data/ext/enterprise_script_service/mruby/src/proc.c +47 -48
  239. data/ext/enterprise_script_service/mruby/src/range.c +22 -35
  240. data/ext/enterprise_script_service/mruby/src/state.c +5 -94
  241. data/ext/enterprise_script_service/mruby/src/string.c +874 -710
  242. data/ext/enterprise_script_service/mruby/src/symbol.c +73 -48
  243. data/ext/enterprise_script_service/mruby/src/variable.c +58 -38
  244. data/ext/enterprise_script_service/mruby/src/vm.c +133 -304
  245. data/ext/enterprise_script_service/mruby/tasks/doc.rake +48 -0
  246. data/ext/enterprise_script_service/mruby/tasks/toolchains/clang.rake +3 -4
  247. data/ext/enterprise_script_service/mruby/tasks/toolchains/gcc.rake +20 -19
  248. data/ext/enterprise_script_service/mruby/tasks/toolchains/visualcpp.rake +0 -12
  249. data/ext/enterprise_script_service/mruby/test/assert.rb +186 -25
  250. data/ext/enterprise_script_service/mruby/test/t/array.rb +34 -6
  251. data/ext/enterprise_script_service/mruby/test/t/class.rb +26 -0
  252. data/ext/enterprise_script_service/mruby/test/t/enumerable.rb +2 -2
  253. data/ext/enterprise_script_service/mruby/test/t/float.rb +17 -17
  254. data/ext/enterprise_script_service/mruby/test/t/hash.rb +2 -0
  255. data/ext/enterprise_script_service/mruby/test/t/integer.rb +14 -6
  256. data/ext/enterprise_script_service/mruby/test/t/kernel.rb +38 -19
  257. data/ext/enterprise_script_service/mruby/test/t/module.rb +87 -14
  258. data/ext/enterprise_script_service/mruby/test/t/numeric.rb +65 -23
  259. data/ext/enterprise_script_service/mruby/test/t/range.rb +4 -4
  260. data/ext/enterprise_script_service/mruby/test/t/string.rb +211 -49
  261. data/ext/enterprise_script_service/mruby/test/t/syntax.rb +19 -2
  262. data/ext/enterprise_script_service/mruby/test/t/vformat.rb +92 -0
  263. data/ext/enterprise_script_service/mruby/travis_config.rb +2 -2
  264. data/ext/enterprise_script_service/mruby_config.rb +10 -0
  265. data/ext/enterprise_script_service/mruby_engine.cpp +2 -2
  266. data/ext/enterprise_script_service/mruby_engine.gembox +1 -0
  267. data/ext/enterprise_script_service/msgpack/CHANGELOG.md +14 -0
  268. data/ext/enterprise_script_service/msgpack/Files.cmake +4 -0
  269. data/ext/enterprise_script_service/msgpack/README.md +1 -1
  270. data/ext/enterprise_script_service/msgpack/appveyor.yml +1 -1
  271. data/ext/enterprise_script_service/msgpack/erb/v1/cpp03_msgpack_tuple.hpp.erb +1 -1
  272. data/ext/enterprise_script_service/msgpack/erb/v1/cpp03_msgpack_tuple_decl.hpp.erb +1 -1
  273. data/ext/enterprise_script_service/msgpack/erb/v1/cpp03_zone.hpp.erb +3 -3
  274. data/ext/enterprise_script_service/msgpack/example/boost/asio_send_recv.cpp +1 -1
  275. data/ext/enterprise_script_service/msgpack/include/msgpack/adaptor/cpp11/timespec.hpp +16 -0
  276. data/ext/enterprise_script_service/msgpack/include/msgpack/adaptor/wstring.hpp +15 -0
  277. data/ext/enterprise_script_service/msgpack/include/msgpack/object.h +2 -0
  278. data/ext/enterprise_script_service/msgpack/include/msgpack/pack_template.h +17 -9
  279. data/ext/enterprise_script_service/msgpack/include/msgpack/sysdep.h +27 -16
  280. data/ext/enterprise_script_service/msgpack/include/msgpack/type.hpp +2 -0
  281. data/ext/enterprise_script_service/msgpack/include/msgpack/unpack_template.h +5 -0
  282. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/array_ref.hpp +0 -1
  283. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/check_container_size.hpp +1 -1
  284. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/cpp11/chrono.hpp +5 -5
  285. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/cpp11/timespec.hpp +140 -0
  286. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple.hpp +32 -32
  287. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/detail/cpp03_msgpack_tuple_decl.hpp +32 -32
  288. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple.hpp +6 -6
  289. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/detail/cpp11_msgpack_tuple_decl.hpp +10 -10
  290. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/ext.hpp +1 -1
  291. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/fixint.hpp +5 -4
  292. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/int.hpp +40 -13
  293. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/int_decl.hpp +3 -2
  294. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/adaptor/wstring.hpp +121 -0
  295. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/detail/cpp03_zone.hpp +3 -3
  296. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/detail/cpp11_zone.hpp +3 -3
  297. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/object.hpp +6 -6
  298. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/object_fwd.hpp +1 -1
  299. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/pack.hpp +40 -5
  300. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/unpack.hpp +11 -11
  301. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/vrefbuffer.hpp +7 -7
  302. data/ext/enterprise_script_service/msgpack/include/msgpack/v1/zbuffer.hpp +5 -5
  303. data/ext/enterprise_script_service/msgpack/include/msgpack/v2/adaptor/int_decl.hpp +1 -1
  304. data/ext/enterprise_script_service/msgpack/include/msgpack/v2/create_object_visitor.hpp +1 -1
  305. data/ext/enterprise_script_service/msgpack/include/msgpack/v2/parse.hpp +13 -13
  306. data/ext/enterprise_script_service/msgpack/include/msgpack/v2/x3_parse.hpp +28 -26
  307. data/ext/enterprise_script_service/msgpack/include/msgpack/v3/adaptor/int_decl.hpp +1 -1
  308. data/ext/enterprise_script_service/msgpack/include/msgpack/v3/parse.hpp +13 -13
  309. data/ext/enterprise_script_service/msgpack/include/msgpack/version_master.h +2 -2
  310. data/ext/enterprise_script_service/msgpack/include/msgpack/zbuffer.h +6 -6
  311. data/ext/enterprise_script_service/msgpack/include/msgpack/zone.h +1 -1
  312. data/ext/enterprise_script_service/msgpack/src/objectc.c +83 -148
  313. data/ext/enterprise_script_service/msgpack/src/unpack.c +73 -47
  314. data/ext/enterprise_script_service/msgpack/test/CMakeLists.txt +1 -1
  315. data/ext/enterprise_script_service/msgpack/test/array_ref.cpp +5 -0
  316. data/ext/enterprise_script_service/msgpack/test/boost_fusion.cpp +5 -0
  317. data/ext/enterprise_script_service/msgpack/test/boost_optional.cpp +7 -0
  318. data/ext/enterprise_script_service/msgpack/test/boost_string_ref.cpp +7 -0
  319. data/ext/enterprise_script_service/msgpack/test/boost_string_view.cpp +6 -0
  320. data/ext/enterprise_script_service/msgpack/test/boost_variant.cpp +15 -9
  321. data/ext/enterprise_script_service/msgpack/test/buffer.cpp +7 -0
  322. data/ext/enterprise_script_service/msgpack/test/carray.cpp +7 -0
  323. data/ext/enterprise_script_service/msgpack/test/cases.cpp +7 -1
  324. data/ext/enterprise_script_service/msgpack/test/convert.cpp +6 -0
  325. data/ext/enterprise_script_service/msgpack/test/fixint.cpp +7 -1
  326. data/ext/enterprise_script_service/msgpack/test/fixint_c.cpp +6 -1
  327. data/ext/enterprise_script_service/msgpack/test/fuzz_unpack_pack_fuzzer_cpp11.cpp +5 -0
  328. data/ext/enterprise_script_service/msgpack/test/iterator_cpp11.cpp +8 -2
  329. data/ext/enterprise_script_service/msgpack/test/json.cpp +6 -0
  330. data/ext/enterprise_script_service/msgpack/test/limit.cpp +7 -0
  331. data/ext/enterprise_script_service/msgpack/test/msgpack_basic.cpp +128 -6
  332. data/ext/enterprise_script_service/msgpack/test/msgpack_c.cpp +7 -2
  333. data/ext/enterprise_script_service/msgpack/test/msgpack_container.cpp +20 -3
  334. data/ext/enterprise_script_service/msgpack/test/msgpack_cpp11.cpp +159 -0
  335. data/ext/enterprise_script_service/msgpack/test/msgpack_cpp17.cpp +5 -0
  336. data/ext/enterprise_script_service/msgpack/test/msgpack_stream.cpp +8 -3
  337. data/ext/enterprise_script_service/msgpack/test/msgpack_tuple.cpp +6 -0
  338. data/ext/enterprise_script_service/msgpack/test/msgpack_vref.cpp +5 -0
  339. data/ext/enterprise_script_service/msgpack/test/msgpack_x3_parse.cpp +23 -18
  340. data/ext/enterprise_script_service/msgpack/test/object.cpp +77 -45
  341. data/ext/enterprise_script_service/msgpack/test/object_with_zone.cpp +28 -10
  342. data/ext/enterprise_script_service/msgpack/test/pack_unpack.cpp +25 -18
  343. data/ext/enterprise_script_service/msgpack/test/pack_unpack_c.cpp +7 -0
  344. data/ext/enterprise_script_service/msgpack/test/raw.cpp +17 -12
  345. data/ext/enterprise_script_service/msgpack/test/reference.cpp +6 -0
  346. data/ext/enterprise_script_service/msgpack/test/reference_cpp11.cpp +6 -0
  347. data/ext/enterprise_script_service/msgpack/test/reference_wrapper_cpp11.cpp +6 -0
  348. data/ext/enterprise_script_service/msgpack/test/shared_ptr_cpp11.cpp +6 -0
  349. data/ext/enterprise_script_service/msgpack/test/size_equal_only.cpp +6 -2
  350. data/ext/enterprise_script_service/msgpack/test/streaming.cpp +10 -3
  351. data/ext/enterprise_script_service/msgpack/test/streaming_c.cpp +7 -0
  352. data/ext/enterprise_script_service/msgpack/test/unique_ptr_cpp11.cpp +6 -0
  353. data/ext/enterprise_script_service/msgpack/test/user_class.cpp +5 -0
  354. data/ext/enterprise_script_service/msgpack/test/version.cpp +6 -0
  355. data/ext/enterprise_script_service/msgpack/test/visitor.cpp +7 -0
  356. data/ext/enterprise_script_service/msgpack/test/zone.cpp +6 -0
  357. data/lib/script_core/version.rb +1 -1
  358. data/lib/tasks/mruby/engine.gembox.example +1 -0
  359. data/lib/tasks/script_core.rake +21 -3
  360. data/spec/dummy/app/helpers/fields_helper.rb +2 -2
  361. data/spec/dummy/mruby/engine.gembox +1 -0
  362. data/spec/script_core_spec.rb +1 -1
  363. metadata +38 -22
  364. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/.gitignore +0 -1
  365. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/.travis.yml +0 -2
  366. data/ext/enterprise_script_service/mruby/mrbgems/mruby-io/run_test.rb +0 -26
  367. data/ext/enterprise_script_service/mruby/mrbgems/mruby-kernel-ext/mrblib/kernel.rb +0 -15
  368. data/ext/enterprise_script_service/mruby/mrbgems/mruby-method/mrblib/unbound_method.rb +0 -9
  369. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/.gitignore +0 -5
  370. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/.travis.yml +0 -2
  371. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/packtest.rb +0 -157
  372. data/ext/enterprise_script_service/mruby/mrbgems/mruby-pack/run_test.rb +0 -26
  373. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/mt19937ar.c +0 -224
  374. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/mt19937ar.h +0 -80
  375. data/ext/enterprise_script_service/mruby/mrbgems/mruby-random/src/random.h +0 -12
  376. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/.gitignore +0 -4
  377. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/.travis.yml +0 -29
  378. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/.travis_build_config.rb +0 -6
  379. data/ext/enterprise_script_service/mruby/mrbgems/mruby-sleep/Rakefile +0 -29
  380. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/.travis.yml +0 -4
  381. data/ext/enterprise_script_service/mruby/mrbgems/mruby-socket/run_test.rb +0 -28
@@ -1,48 +1,58 @@
1
1
  ##
2
2
  # Random Test
3
3
 
4
- assert("Random#srand") do
4
+ assert("Random.new") do
5
5
  r1 = Random.new(123)
6
6
  r2 = Random.new(123)
7
- r1.rand == r2.rand
7
+ r3 = Random.new(124)
8
+ assert_equal(r1.rand, r2.rand)
9
+ assert_not_equal(r1.rand, r3.rand)
8
10
  end
9
11
 
10
- assert("Kernel::srand") do
12
+ assert("Kernel.srand") do
11
13
  srand(234)
12
14
  r1 = rand
13
15
  srand(234)
14
16
  r2 = rand
15
- r1 == r2
17
+ srand(235)
18
+ r3 = rand
19
+ assert_equal(r1, r2)
20
+ assert_not_equal(r1, r3)
16
21
  end
17
22
 
18
- assert("Random::srand") do
23
+ assert("Random.srand") do
19
24
  Random.srand(345)
20
25
  r1 = rand
21
26
  srand(345)
22
27
  r2 = Random.rand
23
- r1 == r2
28
+ Random.srand(346)
29
+ r3 = rand
30
+ assert_equal(r1, r2)
31
+ assert_not_equal(r1, r3)
24
32
  end
25
33
 
26
- assert("fixnum") do
27
- rand(3).class == Fixnum
28
- end
29
-
30
- assert("float") do
31
- rand.class == Float
34
+ assert("return class of Kernel.rand") do
35
+ assert_kind_of(Fixnum, rand(3))
36
+ assert_kind_of(Fixnum, rand(1.5))
37
+ assert_kind_of(Float, rand)
38
+ assert_kind_of(Float, rand(0.5))
32
39
  end
33
40
 
34
41
  assert("Array#shuffle") do
35
- ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
42
+ orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
43
+ ary = orig.dup
36
44
  shuffled = ary.shuffle
37
-
38
- ary == [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] and shuffled != ary and 10.times { |x| ary.include? x }
45
+ assert_equal(orig, ary)
46
+ assert_not_equal(ary, shuffled)
47
+ assert_equal(orig, shuffled.sort)
39
48
  end
40
49
 
41
50
  assert('Array#shuffle!') do
42
- ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
43
- ary.shuffle!
44
-
45
- ary != [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] and 10.times { |x| ary.include? x }
51
+ orig = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
52
+ ary = orig.dup
53
+ assert_same(ary, ary.shuffle!)
54
+ assert_not_equal(orig, ary)
55
+ assert_equal(orig, ary.sort)
46
56
  end
47
57
 
48
58
  assert("Array#shuffle(random)") do
@@ -52,12 +62,12 @@
52
62
  end
53
63
 
54
64
  # verify that the same seed causes the same results
55
- ary1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
56
- shuffle1 = ary1.shuffle Random.new 345
57
- ary2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
58
- shuffle2 = ary2.shuffle Random.new 345
59
-
60
- ary1 != shuffle1 and 10.times { |x| shuffle1.include? x } and shuffle1 == shuffle2
65
+ ary = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
66
+ shuffled1 = ary.shuffle Random.new 345
67
+ shuffled2 = ary.shuffle Random.new 345
68
+ shuffled3 = ary.shuffle Random.new 346
69
+ assert_equal(shuffled1, shuffled2)
70
+ assert_not_equal(shuffled1, shuffled3)
61
71
  end
62
72
 
63
73
  assert('Array#shuffle!(random)') do
@@ -71,6 +81,42 @@
71
81
  ary1.shuffle! Random.new 345
72
82
  ary2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
73
83
  ary2.shuffle! Random.new 345
84
+ ary3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
85
+ ary3.shuffle! Random.new 346
86
+ assert_equal(ary1, ary2)
87
+ assert_not_equal(ary1, ary3)
88
+ end
89
+
90
+ assert('Array#sample') do
91
+ 100.times do
92
+ assert_include([0, 1, 2], [2, 1, 0].sample)
93
+ [2, 1, 0].sample(2).each { |sample| assert_include([0, 1, 2], sample) }
94
+ h = {}
95
+ (1..10).to_a.sample(7).each do |sample|
96
+ assert_not_include(h, sample)
97
+ h[sample] = true
98
+ end
99
+ end
100
+
101
+ assert_nil([].sample)
102
+ assert_equal([], [].sample(1))
103
+ assert_equal([], [2, 1].sample(0))
104
+ assert_raise(TypeError) { [2, 1].sample(true) }
105
+ assert_raise(ArgumentError) { [2, 1].sample(-1) }
106
+ end
74
107
 
75
- ary1 != [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] and 10.times { |x| ary1.include? x } and ary1 == ary2
108
+ assert('Array#sample(random)') do
109
+ assert_raise(TypeError) do
110
+ # this will cause an exception due to the wrong argument
111
+ [1, 2].sample(2, "Not a Random instance")
112
+ end
113
+
114
+ # verify that the same seed causes the same results
115
+ ary = (1..10).to_a
116
+ srand(15)
117
+ samples1 = ary.sample(4)
118
+ samples2 = ary.sample(4, Random.new(15))
119
+ samples3 = ary.sample(4, Random.new(16))
120
+ assert_equal(samples1, samples2)
121
+ assert_not_equal(samples1, samples3)
76
122
  end
@@ -25,4 +25,42 @@ def first(*args)
25
25
  end
26
26
  ary
27
27
  end
28
+
29
+ def max(&block)
30
+ val = self.first
31
+ last = self.last
32
+ return super if block
33
+
34
+ # fast path for numerics
35
+ if val.kind_of?(Numeric) && last.kind_of?(Numeric)
36
+ raise TypeError if exclude_end? && !last.kind_of?(Fixnum)
37
+ return nil if val > last
38
+ return nil if val == last && exclude_end?
39
+
40
+ max = last
41
+ max -= 1 if exclude_end?
42
+ return max
43
+ end
44
+
45
+ # delegate to Enumerable
46
+ super
47
+ end
48
+
49
+ def min(&block)
50
+ val = self.first
51
+ last = self.last
52
+ return super if block
53
+
54
+ # fast path for numerics
55
+ if val.kind_of?(Numeric) && last.kind_of?(Numeric)
56
+ return nil if val > last
57
+ return nil if val == last && exclude_end?
58
+
59
+ min = val
60
+ return min
61
+ end
62
+
63
+ # delegate to Enumerable
64
+ super
65
+ end
28
66
  end
@@ -5,24 +5,16 @@
5
5
  static mrb_bool
6
6
  r_le(mrb_state *mrb, mrb_value a, mrb_value b)
7
7
  {
8
- mrb_value r = mrb_funcall(mrb, a, "<=>", 1, b); /* compare result */
9
- /* output :a < b => -1, a = b => 0, a > b => +1 */
10
-
11
- if (mrb_fixnum_p(r)) {
12
- mrb_int c = mrb_fixnum(r);
13
- if (c == 0 || c == -1) return TRUE;
14
- }
8
+ mrb_int n = mrb_cmp(mrb, a, b);
15
9
 
10
+ if (n == 0 || n == -1) return TRUE;
16
11
  return FALSE;
17
12
  }
18
13
 
19
14
  static mrb_bool
20
15
  r_lt(mrb_state *mrb, mrb_value a, mrb_value b)
21
16
  {
22
- mrb_value r = mrb_funcall(mrb, a, "<=>", 1, b);
23
- /* output :a < b => -1, a = b => 0, a > b => +1 */
24
-
25
- return mrb_fixnum_p(r) && mrb_fixnum(r) == -1;
17
+ return mrb_cmp(mrb, a, b) == -1;
26
18
  }
27
19
 
28
20
  /*
@@ -106,6 +98,7 @@ range_last(mrb_state *mrb, mrb_value range)
106
98
  * ('a'..'z').size #=> nil
107
99
  */
108
100
 
101
+ #ifndef MRB_WITHOUT_FLOAT
109
102
  static mrb_value
110
103
  range_size(mrb_state *mrb, mrb_value range)
111
104
  {
@@ -158,6 +151,28 @@ range_size(mrb_state *mrb, mrb_value range)
158
151
  }
159
152
  return mrb_nil_value();
160
153
  }
154
+ #else
155
+ static mrb_value
156
+ range_size(mrb_state *mrb, mrb_value range)
157
+ {
158
+ struct RRange *r = mrb_range_ptr(mrb, range);
159
+ mrb_value beg, end;
160
+ mrb_int excl;
161
+
162
+ beg = RANGE_BEG(r);
163
+ end = RANGE_END(r);
164
+ excl = RANGE_EXCL(r) ? 0 : 1;
165
+
166
+ if (mrb_fixnum_p(beg) && mrb_fixnum_p(end)) {
167
+ mrb_int a = mrb_fixnum(beg);
168
+ mrb_int b = mrb_fixnum(end);
169
+ mrb_int c = b - a + excl;
170
+
171
+ return mrb_fixnum_value(c);
172
+ }
173
+ return mrb_nil_value();
174
+ }
175
+ #endif /* MRB_WITHOUT_FLOAT */
161
176
 
162
177
  void
163
178
  mrb_mruby_range_ext_gem_init(mrb_state* mrb)
@@ -10,6 +10,8 @@
10
10
  assert('Range#first') do
11
11
  assert_equal 10, (10..20).first
12
12
  assert_equal [10, 11, 12], (10..20).first(3)
13
+
14
+ skip unless Object.const_defined?(:Float)
13
15
  assert_equal [0, 1, 2], (0..Float::INFINITY).first(3)
14
16
  end
15
17
 
@@ -23,10 +25,118 @@
23
25
  assert('Range#size') do
24
26
  assert_equal 42, (1..42).size
25
27
  assert_equal 41, (1...42).size
28
+ assert_nil ('a'..'z').size
29
+
30
+ skip unless Object.const_defined?(:Float)
26
31
  assert_equal 6, (1...6.3).size
27
32
  assert_equal 5, (1...6.0).size
28
33
  assert_equal 5, (1.1...6).size
29
34
  assert_equal 15, (1.0..15.9).size
30
35
  assert_equal Float::INFINITY, (0..Float::INFINITY).size
31
- assert_nil ('a'..'z').size
36
+ end
37
+
38
+ assert('Range#max') do
39
+ # returns the maximum value in the range when called with no arguments
40
+ assert_equal 10, (1..10).max
41
+ assert_equal 9, (1...10).max
42
+ assert_equal 536870911, (0...2**29).max
43
+
44
+ # returns nil when the endpoint is less than the start point
45
+ assert_equal nil, (100..10).max
46
+
47
+ # returns nil when the endpoint equals the start point and the range is exclusive
48
+ assert_equal nil, (5...5).max
49
+
50
+ # returns the endpoint when the endpoint equals the start point and the range is inclusive
51
+ assert_equal 5, (5..5).max
52
+
53
+ skip unless Object.const_defined?(:Float)
54
+
55
+ # returns the maximum value in the Float range when called with no arguments
56
+ assert_equal 908.1111, (303.20..908.1111).max
57
+
58
+ # raises TypeError when called on an exclusive range and a non Integer value
59
+ assert_raise(TypeError) { (303.20...908.1111).max }
60
+
61
+ # returns nil when the endpoint is less than the start point in a Float range
62
+ assert_equal nil, (3003.20..908.1111).max
63
+ end
64
+
65
+ assert('Range#max given a block') do
66
+ # passes each pair of values in the range to the block
67
+ acc = []
68
+ (1..10).max do |a, b|
69
+ acc << a
70
+ acc << b
71
+ a
72
+ end
73
+ (1..10).each do |value|
74
+ assert_true acc.include?(value)
75
+ end
76
+
77
+ # passes each pair of elements to the block in reversed order
78
+ acc = []
79
+ (1..5).max do |a, b|
80
+ acc << [a, b]
81
+ a
82
+ end
83
+ assert_equal [[2, 1], [3, 2], [4, 3], [5, 4]], acc
84
+
85
+ # returns the element the block determines to be the maximum
86
+ assert_equal 1, ((1..3).max { |_a, _b| -3 })
87
+
88
+ # returns nil when the endpoint is less than the start point
89
+ assert_equal nil, ((100..10).max { |x, y| x <=> y })
90
+ assert_equal nil, ((5...5).max { |x, y| x <=> y })
91
+ end
92
+
93
+ assert('Range#min') do
94
+ # returns the minimum value in the range when called with no arguments
95
+ assert_equal 1, (1..10).min
96
+ assert_equal 1, (1...10).min
97
+
98
+ # returns nil when the start point is greater than the endpoint
99
+ assert_equal nil, (100..10).min
100
+
101
+ # returns nil when the endpoint equals the start point and the range is exclusive
102
+ assert_equal nil, (5...5).max
103
+
104
+ # returns the endpoint when the endpoint equals the start point and the range is inclusive
105
+ assert_equal 5, (5..5).max
106
+
107
+ skip unless Object.const_defined?(:Float)
108
+
109
+ # returns the minimum value in the Float range when called with no arguments
110
+ assert_equal 303.20, (303.20..908.1111).min
111
+
112
+ # returns nil when the start point is greater than the endpoint in a Float range
113
+ assert_equal nil, (3003.20..908.1111).max
114
+ end
115
+
116
+ assert('Range#min given a block') do
117
+ # passes each pair of values in the range to the block
118
+ acc = []
119
+ (1..10).min do |a, b|
120
+ acc << a
121
+ acc << b
122
+ a
123
+ end
124
+ (1..10).each do |value|
125
+ assert_true acc.include?(value)
126
+ end
127
+
128
+ # passes each pair of elements to the block in reversed order
129
+ acc = []
130
+ (1..5).min do |a, b|
131
+ acc << [a, b]
132
+ a
133
+ end
134
+ assert_equal [[2, 1], [3, 1], [4, 1], [5, 1]], acc
135
+
136
+ # returns the element the block determines to be the minimum
137
+ assert_equal 3, ((1..3).min { |_a, _b| -3 })
138
+
139
+ # returns nil when the start point is greater than the endpoint
140
+ assert_equal nil, ((100..10).min { |x, y| x <=> y })
141
+ assert_equal nil, ((5...5).min { |x, y| x <=> y })
32
142
  end
@@ -0,0 +1,5 @@
1
+ MRuby::Gem::Specification.new('mruby-rational') do |spec|
2
+ spec.license = 'MIT'
3
+ spec.author = 'mruby developers'
4
+ spec.summary = 'Rational class'
5
+ end
@@ -0,0 +1,117 @@
1
+ class Rational < Numeric
2
+ def inspect
3
+ "(#{to_s})"
4
+ end
5
+
6
+ def to_s
7
+ "#{numerator}/#{denominator}"
8
+ end
9
+
10
+ def *(rhs)
11
+ if rhs.is_a? Rational
12
+ Rational(numerator * rhs.numerator, denominator * rhs.denominator)
13
+ elsif rhs.is_a? Integer
14
+ Rational(numerator * rhs, denominator)
15
+ elsif rhs.is_a? Numeric
16
+ numerator * rhs / denominator
17
+ end
18
+ end
19
+
20
+ def +(rhs)
21
+ if rhs.is_a? Rational
22
+ Rational(numerator * rhs.denominator + rhs.numerator * denominator, denominator * rhs.denominator)
23
+ elsif rhs.is_a? Integer
24
+ Rational(numerator + rhs * denominator, denominator)
25
+ elsif rhs.is_a? Numeric
26
+ (numerator + rhs * denominator) / denominator
27
+ end
28
+ end
29
+
30
+ def -(rhs)
31
+ if rhs.is_a? Rational
32
+ Rational(numerator * rhs.denominator - rhs.numerator * denominator, denominator * rhs.denominator)
33
+ elsif rhs.is_a? Integer
34
+ Rational(numerator - rhs * denominator, denominator)
35
+ elsif rhs.is_a? Numeric
36
+ (numerator - rhs * denominator) / denominator
37
+ end
38
+ end
39
+
40
+ def /(rhs)
41
+ if rhs.is_a? Rational
42
+ Rational(numerator * rhs.denominator, denominator * rhs.numerator)
43
+ elsif rhs.is_a? Integer
44
+ Rational(numerator, denominator * rhs)
45
+ elsif rhs.is_a? Numeric
46
+ numerator / rhs / denominator
47
+ end
48
+ end
49
+
50
+ def <=>(rhs)
51
+ if rhs.is_a?(Integral)
52
+ return numerator <=> rhs if denominator == 1
53
+ rhs = Rational(rhs)
54
+ end
55
+
56
+ case rhs
57
+ when Rational
58
+ (numerator * rhs.denominator - denominator * rhs.numerator) <=> 0
59
+ when Numeric
60
+ (rhs <=> self)&.-@
61
+ else
62
+ nil
63
+ end
64
+ end
65
+
66
+ def ==(rhs)
67
+ return true if self.equal?(rhs)
68
+ if rhs.is_a?(Integral) && denominator == 1
69
+ return numerator == rhs
70
+ end
71
+ if rhs.is_a?(Rational)
72
+ numerator * rhs.denominator == denominator * rhs.numerator
73
+ else
74
+ rhs == self
75
+ end
76
+ end
77
+ end
78
+
79
+ class Numeric
80
+ def to_r
81
+ Rational(self, 1)
82
+ end
83
+ end
84
+
85
+ module Kernel
86
+ def Rational(numerator, denominator = 1)
87
+ a = numerator
88
+ b = denominator
89
+ a, b = b, a % b until b == 0
90
+ Rational._new(numerator.div(a), denominator.div(a))
91
+ end
92
+
93
+ [:+, :-, :*, :/, :<=>, :==, :<, :<=, :>, :>=].each do |op|
94
+ Fixnum.instance_eval do
95
+ original_operator_name = "__original_operator_#{op}_rational"
96
+ alias_method original_operator_name, op
97
+ define_method op do |rhs|
98
+ if rhs.is_a? Rational
99
+ Rational(self).__send__(op, rhs)
100
+ else
101
+ __send__(original_operator_name, rhs)
102
+ end
103
+ end
104
+ end
105
+ Float.instance_eval do
106
+ original_operator_name = "__original_operator_#{op}_rational"
107
+ alias_method original_operator_name, op
108
+ define_method op do |rhs|
109
+ if rhs.is_a? Rational
110
+ rhs = rhs.to_f
111
+ end
112
+ __send__(original_operator_name, rhs)
113
+ end
114
+ end if Object.const_defined?(:Float)
115
+ end
116
+ end
117
+