[Bug #19087] Disallow successive underscores in Complex string

This commit is contained in:
Nobuyoshi Nakada 2022-10-28 19:28:17 +09:00
parent 914cf26d6e
commit c0dc717c45
Notes: git 2022-12-01 16:36:04 +00:00
2 changed files with 25 additions and 3 deletions

View File

@ -1751,9 +1751,9 @@ read_digits(const char **s, int strict,
while (isdecimal(**s) || **s == '_') { while (isdecimal(**s) || **s == '_') {
if (**s == '_') { if (**s == '_') {
if (strict) { if (us) {
if (us) if (strict) return 0;
return 0; break;
} }
us = 1; us = 1;
} }

View File

@ -853,20 +853,42 @@ class Complex_Test < Test::Unit::TestCase
assert_equal(Complex(0), '_5'.to_c) assert_equal(Complex(0), '_5'.to_c)
assert_equal(Complex(5), '5_'.to_c) assert_equal(Complex(5), '5_'.to_c)
assert_equal(Complex(5), '5x'.to_c) assert_equal(Complex(5), '5x'.to_c)
assert_equal(Complex(51), '5_1'.to_c)
assert_equal(Complex(5), '5__1'.to_c)
assert_equal(Complex(5), '5+_3i'.to_c) assert_equal(Complex(5), '5+_3i'.to_c)
assert_equal(Complex(5), '5+3_i'.to_c) assert_equal(Complex(5), '5+3_i'.to_c)
assert_equal(Complex(5,3), '5+3i_'.to_c) assert_equal(Complex(5,3), '5+3i_'.to_c)
assert_equal(Complex(5,3), '5+3ix'.to_c) assert_equal(Complex(5,3), '5+3ix'.to_c)
assert_equal(Complex(5,31), '5+3_1i'.to_c)
assert_equal(Complex(5), '5+3__1i'.to_c)
assert_equal(Complex(51), Complex('5_1'))
assert_equal(Complex(5,31), Complex('5+3_1i'))
assert_equal(Complex(5,31), Complex('5+3_1I'))
assert_equal(Complex(5,31), Complex('5+3_1j'))
assert_equal(Complex(5,31), Complex('5+3_1J'))
assert_equal(Complex(0,31), Complex('3_1i'))
assert_equal(Complex(0,31), Complex('3_1I'))
assert_equal(Complex(0,31), Complex('3_1j'))
assert_equal(Complex(0,31), Complex('3_1J'))
assert_raise(ArgumentError){ Complex('')} assert_raise(ArgumentError){ Complex('')}
assert_raise(ArgumentError){ Complex('_')} assert_raise(ArgumentError){ Complex('_')}
assert_raise(ArgumentError){ Complex("\f\n\r\t\v5\0")} assert_raise(ArgumentError){ Complex("\f\n\r\t\v5\0")}
assert_raise(ArgumentError){ Complex('_5')} assert_raise(ArgumentError){ Complex('_5')}
assert_raise(ArgumentError){ Complex('5_')} assert_raise(ArgumentError){ Complex('5_')}
assert_raise(ArgumentError){ Complex('5__1')}
assert_raise(ArgumentError){ Complex('5x')} assert_raise(ArgumentError){ Complex('5x')}
assert_raise(ArgumentError){ Complex('5+_3i')} assert_raise(ArgumentError){ Complex('5+_3i')}
assert_raise(ArgumentError){ Complex('5+3_i')} assert_raise(ArgumentError){ Complex('5+3_i')}
assert_raise(ArgumentError){ Complex('5+3i_')} assert_raise(ArgumentError){ Complex('5+3i_')}
assert_raise(ArgumentError){ Complex('5+3ix')} assert_raise(ArgumentError){ Complex('5+3ix')}
assert_raise(ArgumentError){ Complex('5+3__1i')}
assert_raise(ArgumentError){ Complex('5+3__1I')}
assert_raise(ArgumentError){ Complex('5+3__1j')}
assert_raise(ArgumentError){ Complex('5+3__1J')}
assert_raise(ArgumentError){ Complex('3__1i')}
assert_raise(ArgumentError){ Complex('3__1I')}
assert_raise(ArgumentError){ Complex('3__1j')}
assert_raise(ArgumentError){ Complex('3__1J')}
assert_equal(Complex(Rational(1,5)), '1/5'.to_c) assert_equal(Complex(Rational(1,5)), '1/5'.to_c)
assert_equal(Complex(Rational(-1,5)), '-1/5'.to_c) assert_equal(Complex(Rational(-1,5)), '-1/5'.to_c)