script_core 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
+