From 44fdd53f2e5bac6fe1cbc2ceb653aa5f2de965e6 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 5 Sep 2018 13:30:14 +0900 Subject: Add `mruby-sleep` gem to the core. --- mrbgems/mruby-sleep/.gitignore | 4 + mrbgems/mruby-sleep/.travis.yml | 29 ++++++ mrbgems/mruby-sleep/.travis_build_config.rb | 6 ++ mrbgems/mruby-sleep/README.md | 27 ++++++ mrbgems/mruby-sleep/Rakefile | 29 ++++++ mrbgems/mruby-sleep/example/sleep.rb | 3 + mrbgems/mruby-sleep/mrbgem.rake | 5 + mrbgems/mruby-sleep/src/mrb_sleep.c | 137 ++++++++++++++++++++++++++++ mrbgems/mruby-sleep/src/mrb_sleep.h | 12 +++ mrbgems/mruby-sleep/test/sleep_test.rb | 36 ++++++++ 10 files changed, 288 insertions(+) create mode 100644 mrbgems/mruby-sleep/.gitignore create mode 100644 mrbgems/mruby-sleep/.travis.yml create mode 100644 mrbgems/mruby-sleep/.travis_build_config.rb create mode 100644 mrbgems/mruby-sleep/README.md create mode 100644 mrbgems/mruby-sleep/Rakefile create mode 100644 mrbgems/mruby-sleep/example/sleep.rb create mode 100644 mrbgems/mruby-sleep/mrbgem.rake create mode 100644 mrbgems/mruby-sleep/src/mrb_sleep.c create mode 100644 mrbgems/mruby-sleep/src/mrb_sleep.h create mode 100644 mrbgems/mruby-sleep/test/sleep_test.rb (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/.gitignore b/mrbgems/mruby-sleep/.gitignore new file mode 100644 index 000000000..b9f9e71df --- /dev/null +++ b/mrbgems/mruby-sleep/.gitignore @@ -0,0 +1,4 @@ +/mruby + +*.so +*.a \ No newline at end of file diff --git a/mrbgems/mruby-sleep/.travis.yml b/mrbgems/mruby-sleep/.travis.yml new file mode 100644 index 000000000..ad6b007b6 --- /dev/null +++ b/mrbgems/mruby-sleep/.travis.yml @@ -0,0 +1,29 @@ +dist: trusty + +language: c +compiler: + - gcc + - clang +env: + - MRUBY_VERSION=1.2.0 + - MRUBY_VERSION=master +matrix: + allow_failures: + - env: MRUBY_VERSION=master +branches: + only: + - master +addons: + apt: + packages: + - rake + - bison + - git + - gperf + # - aclocal + # - automake + # - autoconf + # - autotools-dev + +script: + - rake test \ No newline at end of file diff --git a/mrbgems/mruby-sleep/.travis_build_config.rb b/mrbgems/mruby-sleep/.travis_build_config.rb new file mode 100644 index 000000000..b32e38a9d --- /dev/null +++ b/mrbgems/mruby-sleep/.travis_build_config.rb @@ -0,0 +1,6 @@ +MRuby::Build.new do |conf| + toolchain :gcc + conf.gembox 'default' + conf.gem '../mruby-sleep' + conf.enable_test +end diff --git a/mrbgems/mruby-sleep/README.md b/mrbgems/mruby-sleep/README.md new file mode 100644 index 000000000..4543c49cf --- /dev/null +++ b/mrbgems/mruby-sleep/README.md @@ -0,0 +1,27 @@ +# Sleep Module for mruby +mruby sleep module + +## install by mrbgems + - add conf.gem line to `build_config.rb` +```ruby +MRuby::Build.new do |conf| + + # ... (snip) ... + + conf.gem :git => 'https://github.com/matsumoto-r/mruby-sleep.git' +end +``` + +## example + +```ruby +Sleep::sleep(10) +Sleep::usleep(10000) +``` + +# License +under the MIT License: + +* http://www.opensource.org/licenses/mit-license.php + + diff --git a/mrbgems/mruby-sleep/Rakefile b/mrbgems/mruby-sleep/Rakefile new file mode 100644 index 000000000..5e3c46173 --- /dev/null +++ b/mrbgems/mruby-sleep/Rakefile @@ -0,0 +1,29 @@ +MRUBY_CONFIG=File.expand_path(ENV["MRUBY_CONFIG"] || ".travis_build_config.rb") +MRUBY_VERSION=ENV["MRUBY_VERSION"] || "1.2.0" + +file :mruby do + cmd = "git clone --depth=1 git://github.com/mruby/mruby.git" + if MRUBY_VERSION != 'master' + cmd << " && cd mruby" + cmd << " && git fetch --tags && git checkout $(git rev-parse #{MRUBY_VERSION})" + end + sh cmd +end + +desc "compile binary" +task :compile => :mruby do + sh "cd mruby && MRUBY_CONFIG=#{MRUBY_CONFIG} rake all" +end + +desc "test" +task :test => :mruby do + sh "cd mruby && MRUBY_CONFIG=#{MRUBY_CONFIG} rake all test" +end + +desc "cleanup" +task :clean do + exit 0 unless File.directory?('mruby') + sh "cd mruby && rake deep_clean" +end + +task :default => :compile diff --git a/mrbgems/mruby-sleep/example/sleep.rb b/mrbgems/mruby-sleep/example/sleep.rb new file mode 100644 index 000000000..dfe86af27 --- /dev/null +++ b/mrbgems/mruby-sleep/example/sleep.rb @@ -0,0 +1,3 @@ +Sleep::sleep(10) +Sleep::usleep(10000) + diff --git a/mrbgems/mruby-sleep/mrbgem.rake b/mrbgems/mruby-sleep/mrbgem.rake new file mode 100644 index 000000000..8827b3580 --- /dev/null +++ b/mrbgems/mruby-sleep/mrbgem.rake @@ -0,0 +1,5 @@ +MRuby::Gem::Specification.new('mruby-sleep') do |spec| + spec.license = 'MIT' + spec.authors = 'MATSUMOTO Ryosuke' + spec.version = '0.0.1' +end diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c new file mode 100644 index 000000000..b711dd5c9 --- /dev/null +++ b/mrbgems/mruby-sleep/src/mrb_sleep.c @@ -0,0 +1,137 @@ +/* +** mrb_sleep - sleep class for mruby +** +** Copyright (c) mod_mruby developers 2012- +** +** Permission is hereby granted, free of charge, to any person obtaining +** a copy of this software and associated documentation files (the +** "Software"), to deal in the Software without restriction, including +** without limitation the rights to use, copy, modify, merge, publish, +** distribute, sublicense, and/or sell copies of the Software, and to +** permit persons to whom the Software is furnished to do so, subject to +** the following conditions: +** +** The above copyright notice and this permission notice shall be +** included in all copies or substantial portions of the Software. +** +** THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +** EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +** MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +** IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +** CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +** TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +** SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +** +** [ MIT license: http://www.opensource.org/licenses/mit-license.php ] +*/ + +#include +#ifdef _WIN32 + #include + #define sleep(x) Sleep(x * 1000) + #define usleep(x) Sleep(((x)<1000) ? 1 : ((x)/1000)) +#else + #include + #include +#endif + +#include "mruby.h" + +mrb_value mrb_f_sleep_sleep(mrb_state *mrb, mrb_value self) +{ + time_t beg, end; + mrb_value *argv; + mrb_int argc; + int iargc; + + beg = time(0); + mrb_get_args(mrb, "*", &argv, &argc); + + iargc = (int)argc; + + /* not implemented forever sleep (called without an argument)*/ + if (iargc == 0 || iargc >= 2) { + mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); + } + + if (mrb_fixnum_p(argv[0]) && mrb_fixnum(argv[0]) >= 0) { + sleep(mrb_fixnum(argv[0])); + } else { + mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); + } + end = time(0) - beg; + + return mrb_fixnum_value(end); +} + +mrb_value mrb_f_usleep_usleep(mrb_state *mrb, mrb_value self) +{ + mrb_int argc; + mrb_value *argv; +#ifdef _WIN32 + FILETIME st_ft,ed_ft; + unsigned __int64 st_time = 0; + unsigned __int64 ed_time = 0; +#else + struct timeval st_tm,ed_tm; +#endif + time_t slp_tm; + +#ifdef _WIN32 + GetSystemTimeAsFileTime(&st_ft); +#else + gettimeofday( &st_tm, NULL ); +#endif + + mrb_get_args(mrb, "*", &argv, &argc); + + /* not implemented forever sleep (called without an argument)*/ + if(argc == 0 || argc >= 2) { + mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); + } + + if (mrb_fixnum_p(argv[0]) && mrb_fixnum(argv[0]) >= 0) { + usleep(mrb_fixnum(argv[0])); + } else { + mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); + } + +#ifdef _WIN32 + GetSystemTimeAsFileTime(&ed_ft); + + st_time |= st_ft.dwHighDateTime; + st_time <<=32; + st_time |= st_ft.dwLowDateTime; + ed_time |= ed_ft.dwHighDateTime; + ed_time <<=32; + ed_time |= ed_ft.dwLowDateTime; + + slp_tm = (ed_time - st_time) / 10; +#else + gettimeofday( &ed_tm, NULL ); + + if ( st_tm.tv_usec > ed_tm.tv_usec ) { + slp_tm = 1000000 + ed_tm.tv_usec - st_tm.tv_usec; + } else { + slp_tm = ed_tm.tv_usec - st_tm.tv_usec; + } +#endif + + return mrb_fixnum_value(slp_tm); +} + +void mrb_mruby_sleep_gem_init(mrb_state *mrb) +{ + struct RClass *sleep; + + sleep = mrb_define_module(mrb, "Sleep"); + mrb_define_class_method(mrb, sleep, "sleep", mrb_f_sleep_sleep, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, sleep, "usleep", mrb_f_usleep_usleep, MRB_ARGS_REQ(1)); + + mrb_define_method(mrb, mrb->kernel_module, "sleep", mrb_f_sleep_sleep, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, mrb->kernel_module, "usleep", mrb_f_usleep_usleep, MRB_ARGS_REQ(1)); +} + +void mrb_mruby_sleep_gem_final(mrb_state *mrb) +{ +} diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.h b/mrbgems/mruby-sleep/src/mrb_sleep.h new file mode 100644 index 000000000..bf71d91f4 --- /dev/null +++ b/mrbgems/mruby-sleep/src/mrb_sleep.h @@ -0,0 +1,12 @@ +/* +// mrb_sleep.h - to provide sleep methods +// +// See Copyright Notice in mrb_sleep.c +*/ + +#ifndef MRB_SLEEP_H +#define MRB_SLEEP_H + +void mrb_mruby_sleep_gem_init(mrb_state *mrb); + +#endif diff --git a/mrbgems/mruby-sleep/test/sleep_test.rb b/mrbgems/mruby-sleep/test/sleep_test.rb new file mode 100644 index 000000000..e5ea5f69e --- /dev/null +++ b/mrbgems/mruby-sleep/test/sleep_test.rb @@ -0,0 +1,36 @@ +def run_with_catching_error &b + e = nil + begin + b.call + rescue => _e + e = _e + end + + return e +end + +assert("sleep works") do + e = run_with_catching_error { sleep 1 } + + assert_nil e +end + +assert("sleep would not accept negative value") do + e = run_with_catching_error { sleep -1 } + + assert_not_equal e, nil + assert_equal e.class, ArgumentError +end + +assert("usleep works") do + e = run_with_catching_error { usleep 100 } + + assert_nil e +end + +assert("usleep would not accept negative value") do + e = run_with_catching_error { usleep -100 } + + assert_not_equal e, nil + assert_equal e.class, ArgumentError +end -- cgit v1.2.3 From a170c1dd7072120ba2c2cae8e1ed23bdd4b7b532 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Wed, 5 Sep 2018 14:54:14 +0900 Subject: Refactored `mruby-sleep` gem. * Method implementation functions made `static`. * Function declaration style has been changed. * Unnecessary header file `mrb_sleep.h` removed. * Used `mrb_get_args()` instead of self parsing. * Indentation kept untouched. --- mrbgems/mruby-sleep/src/mrb_sleep.c | 65 ++++++++++++++++--------------------- mrbgems/mruby-sleep/src/mrb_sleep.h | 12 ------- 2 files changed, 28 insertions(+), 49 deletions(-) delete mode 100644 mrbgems/mruby-sleep/src/mrb_sleep.h (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c index b711dd5c9..19a4f082f 100644 --- a/mrbgems/mruby-sleep/src/mrb_sleep.c +++ b/mrbgems/mruby-sleep/src/mrb_sleep.c @@ -37,25 +37,17 @@ #include "mruby.h" -mrb_value mrb_f_sleep_sleep(mrb_state *mrb, mrb_value self) -{ +static mrb_value +mrb_f_sleep(mrb_state *mrb, mrb_value self) +{ time_t beg, end; - mrb_value *argv; - mrb_int argc; - int iargc; - + mrb_int sec; + beg = time(0); - mrb_get_args(mrb, "*", &argv, &argc); - - iargc = (int)argc; - /* not implemented forever sleep (called without an argument)*/ - if (iargc == 0 || iargc >= 2) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); - } - - if (mrb_fixnum_p(argv[0]) && mrb_fixnum(argv[0]) >= 0) { - sleep(mrb_fixnum(argv[0])); + mrb_get_args(mrb, "i", &sec); + if (sec >= 0) { + sleep(sec); } else { mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); } @@ -64,10 +56,10 @@ mrb_value mrb_f_sleep_sleep(mrb_state *mrb, mrb_value self) return mrb_fixnum_value(end); } -mrb_value mrb_f_usleep_usleep(mrb_state *mrb, mrb_value self) -{ - mrb_int argc; - mrb_value *argv; +static mrb_value +mrb_f_usleep(mrb_state *mrb, mrb_value self) +{ + mrb_int usec; #ifdef _WIN32 FILETIME st_ft,ed_ft; unsigned __int64 st_time = 0; @@ -80,18 +72,14 @@ mrb_value mrb_f_usleep_usleep(mrb_state *mrb, mrb_value self) #ifdef _WIN32 GetSystemTimeAsFileTime(&st_ft); #else - gettimeofday( &st_tm, NULL ); + gettimeofday(&st_tm, NULL); #endif - mrb_get_args(mrb, "*", &argv, &argc); - /* not implemented forever sleep (called without an argument)*/ - if(argc == 0 || argc >= 2) { - mrb_raise(mrb, E_ARGUMENT_ERROR, "wrong number of arguments"); - } + mrb_get_args(mrb, "i", &usec); - if (mrb_fixnum_p(argv[0]) && mrb_fixnum(argv[0]) >= 0) { - usleep(mrb_fixnum(argv[0])); + if (usec >= 0) { + usleep(usec); } else { mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); } @@ -108,11 +96,12 @@ mrb_value mrb_f_usleep_usleep(mrb_state *mrb, mrb_value self) slp_tm = (ed_time - st_time) / 10; #else - gettimeofday( &ed_tm, NULL ); + gettimeofday(&ed_tm, NULL); - if ( st_tm.tv_usec > ed_tm.tv_usec ) { + if (st_tm.tv_usec > ed_tm.tv_usec) { slp_tm = 1000000 + ed_tm.tv_usec - st_tm.tv_usec; - } else { + } + else { slp_tm = ed_tm.tv_usec - st_tm.tv_usec; } #endif @@ -120,18 +109,20 @@ mrb_value mrb_f_usleep_usleep(mrb_state *mrb, mrb_value self) return mrb_fixnum_value(slp_tm); } -void mrb_mruby_sleep_gem_init(mrb_state *mrb) +void +mrb_mruby_sleep_gem_init(mrb_state *mrb) { struct RClass *sleep; sleep = mrb_define_module(mrb, "Sleep"); - mrb_define_class_method(mrb, sleep, "sleep", mrb_f_sleep_sleep, MRB_ARGS_REQ(1)); - mrb_define_class_method(mrb, sleep, "usleep", mrb_f_usleep_usleep, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, sleep, "sleep", mrb_f_sleep, MRB_ARGS_REQ(1)); + mrb_define_class_method(mrb, sleep, "usleep", mrb_f_usleep, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, mrb->kernel_module, "sleep", mrb_f_sleep_sleep, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, mrb->kernel_module, "usleep", mrb_f_usleep_usleep, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, mrb->kernel_module, "sleep", mrb_f_sleep, MRB_ARGS_REQ(1)); + mrb_define_method(mrb, mrb->kernel_module, "usleep", mrb_f_usleep, MRB_ARGS_REQ(1)); } -void mrb_mruby_sleep_gem_final(mrb_state *mrb) +void +mrb_mruby_sleep_gem_final(mrb_state *mrb) { } diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.h b/mrbgems/mruby-sleep/src/mrb_sleep.h deleted file mode 100644 index bf71d91f4..000000000 --- a/mrbgems/mruby-sleep/src/mrb_sleep.h +++ /dev/null @@ -1,12 +0,0 @@ -/* -// mrb_sleep.h - to provide sleep methods -// -// See Copyright Notice in mrb_sleep.c -*/ - -#ifndef MRB_SLEEP_H -#define MRB_SLEEP_H - -void mrb_mruby_sleep_gem_init(mrb_state *mrb); - -#endif -- cgit v1.2.3 From 72522f8e0ecd7a94af4df0cf7c892fb5ed971deb Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 6 Sep 2018 23:33:53 +0900 Subject: Remove `Sleep` module that does not exist in CRuby. --- mrbgems/mruby-sleep/src/mrb_sleep.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c index 19a4f082f..37d18e482 100644 --- a/mrbgems/mruby-sleep/src/mrb_sleep.c +++ b/mrbgems/mruby-sleep/src/mrb_sleep.c @@ -1,5 +1,5 @@ /* -** mrb_sleep - sleep class for mruby +** mrb_sleep - sleep methods for mruby ** ** Copyright (c) mod_mruby developers 2012- ** @@ -112,12 +112,6 @@ mrb_f_usleep(mrb_state *mrb, mrb_value self) void mrb_mruby_sleep_gem_init(mrb_state *mrb) { - struct RClass *sleep; - - sleep = mrb_define_module(mrb, "Sleep"); - mrb_define_class_method(mrb, sleep, "sleep", mrb_f_sleep, MRB_ARGS_REQ(1)); - mrb_define_class_method(mrb, sleep, "usleep", mrb_f_usleep, MRB_ARGS_REQ(1)); - mrb_define_method(mrb, mrb->kernel_module, "sleep", mrb_f_sleep, MRB_ARGS_REQ(1)); mrb_define_method(mrb, mrb->kernel_module, "usleep", mrb_f_usleep, MRB_ARGS_REQ(1)); } -- cgit v1.2.3 From fdaec907802c11867e977b30b2e1dddcb7a0ebcd Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 6 Sep 2018 23:42:05 +0900 Subject: Make `Kernel#sleep` to accept float as a duration time. But when `MRB_WITHOUT_FLOAT` is set, there's no way to sleep for sub seconds. So mruby specific `usleep` is provided. --- mrbgems/mruby-sleep/src/mrb_sleep.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c index 37d18e482..ce643cf12 100644 --- a/mrbgems/mruby-sleep/src/mrb_sleep.c +++ b/mrbgems/mruby-sleep/src/mrb_sleep.c @@ -37,25 +37,38 @@ #include "mruby.h" +/* not implemented forever sleep (called without an argument)*/ static mrb_value mrb_f_sleep(mrb_state *mrb, mrb_value self) { - time_t beg, end; + time_t beg = time(0); + time_t end; +#ifndef MRB_WITHOUT_FLOAT + mrb_float sec; + + mrb_get_args(mrb, "f", &sec); + if (sec >= 0) { + usleep(sec * 1000000); + } + else { + mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); + } +#else mrb_int sec; - beg = time(0); - /* not implemented forever sleep (called without an argument)*/ mrb_get_args(mrb, "i", &sec); if (sec >= 0) { sleep(sec); } else { mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); } +#endif end = time(0) - beg; return mrb_fixnum_value(end); } +/* mruby special; needed for mruby without float numbers */ static mrb_value mrb_f_usleep(mrb_state *mrb, mrb_value self) { -- cgit v1.2.3 From 87ce74016894940355b402f58884c48396fcf570 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Tue, 25 Sep 2018 09:18:32 +0900 Subject: Disambiguate block braces. --- mrbgems/mruby-sleep/test/sleep_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/test/sleep_test.rb b/mrbgems/mruby-sleep/test/sleep_test.rb index e5ea5f69e..74030c0d3 100644 --- a/mrbgems/mruby-sleep/test/sleep_test.rb +++ b/mrbgems/mruby-sleep/test/sleep_test.rb @@ -16,7 +16,7 @@ assert("sleep works") do end assert("sleep would not accept negative value") do - e = run_with_catching_error { sleep -1 } + e = run_with_catching_error{ sleep -1 } assert_not_equal e, nil assert_equal e.class, ArgumentError @@ -29,7 +29,7 @@ assert("usleep works") do end assert("usleep would not accept negative value") do - e = run_with_catching_error { usleep -100 } + e = run_with_catching_error{ usleep -100 } assert_not_equal e, nil assert_equal e.class, ArgumentError -- cgit v1.2.3 From 1b185f08e771ecbe6a0baec67499f41bfcea5698 Mon Sep 17 00:00:00 2001 From: take-cheeze Date: Mon, 29 Oct 2018 13:58:25 +0900 Subject: Suppress sleep test script warning --- mrbgems/mruby-sleep/test/sleep_test.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/test/sleep_test.rb b/mrbgems/mruby-sleep/test/sleep_test.rb index 74030c0d3..349f169b3 100644 --- a/mrbgems/mruby-sleep/test/sleep_test.rb +++ b/mrbgems/mruby-sleep/test/sleep_test.rb @@ -16,7 +16,7 @@ assert("sleep works") do end assert("sleep would not accept negative value") do - e = run_with_catching_error{ sleep -1 } + e = run_with_catching_error{ sleep(-1) } assert_not_equal e, nil assert_equal e.class, ArgumentError @@ -29,7 +29,7 @@ assert("usleep works") do end assert("usleep would not accept negative value") do - e = run_with_catching_error{ usleep -100 } + e = run_with_catching_error{ usleep(-100) } assert_not_equal e, nil assert_equal e.class, ArgumentError -- cgit v1.2.3 From 7ad53273a2c5346557a233d040ad233019c03277 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Thu, 1 Nov 2018 22:52:12 +0900 Subject: Silence Appveyor's VC compilation warnings. --- mrbgems/mruby-pack/src/pack.c | 2 +- mrbgems/mruby-sleep/src/mrb_sleep.c | 2 +- mrbgems/mruby-string-ext/src/string.c | 5 +++-- src/vm.c | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-pack/src/pack.c b/mrbgems/mruby-pack/src/pack.c index f970d9339..796ba4d34 100644 --- a/mrbgems/mruby-pack/src/pack.c +++ b/mrbgems/mruby-pack/src/pack.c @@ -64,7 +64,7 @@ static int littleendian = 0; const static unsigned char base64chars[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -static signed char base64_dec_tab[128]; +static unsigned char base64_dec_tab[128]; static int diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c index ce643cf12..0428f29eb 100644 --- a/mrbgems/mruby-sleep/src/mrb_sleep.c +++ b/mrbgems/mruby-sleep/src/mrb_sleep.c @@ -29,7 +29,7 @@ #ifdef _WIN32 #include #define sleep(x) Sleep(x * 1000) - #define usleep(x) Sleep(((x)<1000) ? 1 : ((x)/1000)) + #define usleep(x) Sleep((DWORD)((x)<1000) ? 1 : ((x)/1000)) #else #include #include diff --git a/mrbgems/mruby-string-ext/src/string.c b/mrbgems/mruby-string-ext/src/string.c index 9fd84af7b..c0105fbd9 100644 --- a/mrbgems/mruby-string-ext/src/string.c +++ b/mrbgems/mruby-string-ext/src/string.c @@ -279,7 +279,7 @@ static struct tr_pattern* tr_parse_pattern(mrb_state *mrb, struct tr_pattern *ret, const mrb_value v_pattern, mrb_bool flag_reverse_enable) { const char *pattern = RSTRING_PTR(v_pattern); - int pattern_length = RSTRING_LEN(v_pattern); + mrb_int pattern_length = RSTRING_LEN(v_pattern); mrb_bool flag_reverse = FALSE; struct tr_pattern *pat1; int i = 0; @@ -438,7 +438,8 @@ str_tr(mrb_state *mrb, mrb_value str, mrb_value p1, mrb_value p2, mrb_bool squee mrb_raisef(mrb, E_ARGUMENT_ERROR, "character (%S) out of range", mrb_fixnum_value((mrb_int)c)); } - lastch = s[i] = c; + lastch = c; + s[i] = (char)c; } } } diff --git a/src/vm.c b/src/vm.c index 28b375c68..8157f6ca0 100644 --- a/src/vm.c +++ b/src/vm.c @@ -186,7 +186,7 @@ stack_extend_alloc(mrb_state *mrb, mrb_int room) if (off > size) size = off; #ifdef MRB_STACK_EXTEND_DOUBLING - if (room <= (size_t)size) + if ((size_t)room <= size) size *= 2; else size += room; -- cgit v1.2.3 From 74c54022118578c65a7ad97a23bb68599986be65 Mon Sep 17 00:00:00 2001 From: icm7216 Date: Wed, 12 Dec 2018 00:52:07 +0900 Subject: Sleep module is undefined. Remove module name. --- mrbgems/mruby-sleep/README.md | 4 ++-- mrbgems/mruby-sleep/example/sleep.rb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/README.md b/mrbgems/mruby-sleep/README.md index 4543c49cf..a4ecba7d7 100644 --- a/mrbgems/mruby-sleep/README.md +++ b/mrbgems/mruby-sleep/README.md @@ -15,8 +15,8 @@ end ## example ```ruby -Sleep::sleep(10) -Sleep::usleep(10000) +sleep(10) +usleep(10000) ``` # License diff --git a/mrbgems/mruby-sleep/example/sleep.rb b/mrbgems/mruby-sleep/example/sleep.rb index dfe86af27..e5acea3b2 100644 --- a/mrbgems/mruby-sleep/example/sleep.rb +++ b/mrbgems/mruby-sleep/example/sleep.rb @@ -1,3 +1,3 @@ -Sleep::sleep(10) -Sleep::usleep(10000) +sleep(10) +usleep(10000) -- cgit v1.2.3 From 59651f43ad30dc48e2872b950697562d4a14e62a Mon Sep 17 00:00:00 2001 From: icm7216 Date: Wed, 12 Dec 2018 00:54:15 +0900 Subject: Specify the core library instead of the external library. --- mrbgems/mruby-sleep/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/README.md b/mrbgems/mruby-sleep/README.md index a4ecba7d7..7707cd040 100644 --- a/mrbgems/mruby-sleep/README.md +++ b/mrbgems/mruby-sleep/README.md @@ -8,7 +8,7 @@ MRuby::Build.new do |conf| # ... (snip) ... - conf.gem :git => 'https://github.com/matsumoto-r/mruby-sleep.git' + conf.gem :core => 'mruby-sleep' end ``` -- cgit v1.2.3 From 3707ef3d1cd2ed1ef0c2c15a05018efd0dc37273 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Mon, 21 Jan 2019 19:37:20 +0900 Subject: Use `assert_raise` and `assert_nothing_raised` in `mruby-sleep` tests --- mrbgems/mruby-sleep/test/sleep_test.rb | 29 ++++------------------------- 1 file changed, 4 insertions(+), 25 deletions(-) (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/test/sleep_test.rb b/mrbgems/mruby-sleep/test/sleep_test.rb index 349f169b3..06a6d73fa 100644 --- a/mrbgems/mruby-sleep/test/sleep_test.rb +++ b/mrbgems/mruby-sleep/test/sleep_test.rb @@ -1,36 +1,15 @@ -def run_with_catching_error &b - e = nil - begin - b.call - rescue => _e - e = _e - end - - return e -end - assert("sleep works") do - e = run_with_catching_error { sleep 1 } - - assert_nil e + assert_nothing_raised { sleep(1) } end assert("sleep would not accept negative value") do - e = run_with_catching_error{ sleep(-1) } - - assert_not_equal e, nil - assert_equal e.class, ArgumentError + assert_raise(ArgumentError) { sleep(-1) } end assert("usleep works") do - e = run_with_catching_error { usleep 100 } - - assert_nil e + assert_nothing_raised { usleep(100) } end assert("usleep would not accept negative value") do - e = run_with_catching_error{ usleep(-100) } - - assert_not_equal e, nil - assert_equal e.class, ArgumentError + assert_raise(ArgumentError) { usleep(-100) } end -- cgit v1.2.3 From 1cd57006f37c9f86b85491ceacf6ab285bb85475 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Sat, 26 Jan 2019 18:37:53 +0900 Subject: Refine error message for time interval Time interval value can be zero, and float (in `Kernel#sleep`) --- mrbgems/mruby-sleep/src/mrb_sleep.c | 6 +++--- mrbgems/mruby-sleep/test/sleep_test.rb | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 4 deletions(-) (limited to 'mrbgems/mruby-sleep') diff --git a/mrbgems/mruby-sleep/src/mrb_sleep.c b/mrbgems/mruby-sleep/src/mrb_sleep.c index 0428f29eb..3f8ef90cf 100644 --- a/mrbgems/mruby-sleep/src/mrb_sleep.c +++ b/mrbgems/mruby-sleep/src/mrb_sleep.c @@ -51,7 +51,7 @@ mrb_f_sleep(mrb_state *mrb, mrb_value self) usleep(sec * 1000000); } else { - mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); + mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must not be negative"); } #else mrb_int sec; @@ -60,7 +60,7 @@ mrb_f_sleep(mrb_state *mrb, mrb_value self) if (sec >= 0) { sleep(sec); } else { - mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); + mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must not be negative"); } #endif end = time(0) - beg; @@ -94,7 +94,7 @@ mrb_f_usleep(mrb_state *mrb, mrb_value self) if (usec >= 0) { usleep(usec); } else { - mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must be positive integer"); + mrb_raise(mrb, E_ARGUMENT_ERROR, "time interval must not be negative integer"); } #ifdef _WIN32 diff --git a/mrbgems/mruby-sleep/test/sleep_test.rb b/mrbgems/mruby-sleep/test/sleep_test.rb index 06a6d73fa..f05b7a30b 100644 --- a/mrbgems/mruby-sleep/test/sleep_test.rb +++ b/mrbgems/mruby-sleep/test/sleep_test.rb @@ -1,13 +1,27 @@ assert("sleep works") do assert_nothing_raised { sleep(1) } + assert_nothing_raised { sleep(0) } end -assert("sleep would not accept negative value") do +assert("sleep would accept non-negative float value") do + skip unless Object.const_defined?(:Float) + assert_nothing_raised { sleep(0.01) } + assert_nothing_raised { sleep(0.0) } + assert_nothing_raised { sleep(-0.0) } +end + +assert("sleep would not accept negative integer value") do assert_raise(ArgumentError) { sleep(-1) } end +assert("sleep would not accept negative float value") do + skip unless Object.const_defined?(:Float) + assert_raise(ArgumentError) { sleep(-0.1) } +end + assert("usleep works") do assert_nothing_raised { usleep(100) } + assert_nothing_raised { usleep(0) } end assert("usleep would not accept negative value") do -- cgit v1.2.3