From c85846b7a02b72c8f6f4df63dced5ee10fadd2bd Mon Sep 17 00:00:00 2001 From: u2 Date: Sat, 11 Jan 2014 10:56:07 +0800 Subject: [PATCH] Add String#is_number? method --- lib/core/facets/string.rb | 1 + lib/core/facets/string/number.rb | 14 ++++++++++ test/core/string/test_number.rb | 44 ++++++++++++++++++++++++++++++++ 3 files changed, 59 insertions(+) create mode 100644 lib/core/facets/string/number.rb create mode 100644 test/core/string/test_number.rb diff --git a/lib/core/facets/string.rb b/lib/core/facets/string.rb index b6d89b08..35f43a87 100644 --- a/lib/core/facets/string.rb +++ b/lib/core/facets/string.rb @@ -32,6 +32,7 @@ require_relative 'string/natcmp.rb' require_relative 'string/nchar.rb' require_relative 'string/newlines.rb' +require_relative 'string/number.rb' require_relative 'string/op_div.rb' require_relative 'string/op_sub.rb' require_relative 'string/outdent.rb' diff --git a/lib/core/facets/string/number.rb b/lib/core/facets/string/number.rb new file mode 100644 index 00000000..2942cee2 --- /dev/null +++ b/lib/core/facets/string/number.rb @@ -0,0 +1,14 @@ +class String + + # Returns true if it's a decimal digits. + # + # "123_456_789_123_456_789.123_456_000_111".number? # => true + # "1.23".number? # => true + # "1.23a".number? # => false + # + # CREDIT: u2 + + def number? + !!self.match(/\A[+-]?\d+?(_?\d+?)*?(\.\d+(_?\d+?)*?)?\Z/) + end +end \ No newline at end of file diff --git a/test/core/string/test_number.rb b/test/core/string/test_number.rb new file mode 100644 index 00000000..2d7b9bdd --- /dev/null +++ b/test/core/string/test_number.rb @@ -0,0 +1,44 @@ +covers 'facets/string/number' + +test_case String do + + method :number? do + + test do + x = "1.23\n" + x.number?.assert == true + end + + test do + x = "123_456_789_123_456_789.123_456_000_111\n" + x.number?.assert == true + end + + test do + x = ".123\n" + x.number?.assert == false + end + + test do + x = "123_\n" + x.number?.assert == false + end + + test do + x = "_123\n" + x.number?.assert == false + end + + test do + x = "23_456_789_123_456_.245\n" + x.number?.assert == false + end + + test do + x = "23_456_789_123_456._245\n" + x.number?.assert == false + end + + end + +end \ No newline at end of file