mirror of https://github.com/tailix/libkernaux.git
114 lines
4.3 KiB
Ruby
114 lines
4.3 KiB
Ruby
if KernAux::Version.with_printf?
|
|
assert 'KernAux.sprintf' do
|
|
assert 'integers' do
|
|
assert_equal 'i:0', KernAux.sprintf('i:%i', 0)
|
|
assert_equal 'u:0', KernAux.sprintf('u:%u', 0)
|
|
assert_equal 'i:1', KernAux.sprintf('i:%i', 1)
|
|
assert_equal 'u:1', KernAux.sprintf('u:%u', 1)
|
|
assert_equal 'i:10', KernAux.sprintf('i:%i', 10)
|
|
assert_equal 'u:10', KernAux.sprintf('u:%u', 10)
|
|
assert_equal 'i:100', KernAux.sprintf('i:%i', 100)
|
|
assert_equal 'u:100', KernAux.sprintf('u:%u', 100)
|
|
assert_equal 'i:1000', KernAux.sprintf('i:%i', 1000)
|
|
assert_equal 'u:1000', KernAux.sprintf('u:%u', 1000)
|
|
assert_equal 'i:10000', KernAux.sprintf('i:%i', 10_000)
|
|
assert_equal 'u:10000', KernAux.sprintf('u:%u', 10_000)
|
|
assert_equal 'i:100000', KernAux.sprintf('i:%i', 100_000)
|
|
assert_equal 'u:100000', KernAux.sprintf('u:%u', 100_000)
|
|
assert_equal 'i:1000000', KernAux.sprintf('i:%i', 1_000_000)
|
|
assert_equal 'u:1000000', KernAux.sprintf('u:%u', 1_000_000)
|
|
assert_equal 'i:10000000', KernAux.sprintf('i:%i', 10_000_000)
|
|
assert_equal 'u:10000000', KernAux.sprintf('u:%u', 10_000_000)
|
|
assert_equal 'i:100000000', KernAux.sprintf('i:%i', 10**8)
|
|
assert_equal 'u:100000000', KernAux.sprintf('u:%u', 10**8)
|
|
assert_equal 'i:1000000000', KernAux.sprintf('i:%i', 10**9)
|
|
assert_equal 'u:1000000000', KernAux.sprintf('u:%u', 10**9)
|
|
assert_equal 'i:2147483647', KernAux.sprintf('i:%i', 2**31 - 1)
|
|
assert_equal 'u:2147483647', KernAux.sprintf('u:%u', 2**31 - 1)
|
|
end
|
|
|
|
# TODO: test with different boxing
|
|
# assert 'integer overflows' do
|
|
# assert_equal 'i:-2147483648', KernAux.sprintf('i:%i', 2**31)
|
|
# assert_equal 'u: 2147483648', KernAux.sprintf('u: %u', 2**31)
|
|
# assert_equal 'i:-2147483647', KernAux.sprintf('i:%i', 2**31 + 1)
|
|
# assert_equal 'u: 2147483649', KernAux.sprintf('u: %u', 2**31 + 1)
|
|
# assert_equal 'i:-1', KernAux.sprintf('i:%i', 2**32 - 1)
|
|
# assert_equal 'u: 4294967295', KernAux.sprintf('u: %u', 2**32 - 1)
|
|
# assert_equal 'i: 0', KernAux.sprintf('i: %i', 2**32)
|
|
# assert_equal 'u: 0', KernAux.sprintf('u: %u', 2**32)
|
|
# end
|
|
|
|
assert 'when there are too many arguments' do
|
|
[
|
|
['Hello!', 'World!'],
|
|
['Hello, %s!', 'World', 'Alex'],
|
|
].each do |args|
|
|
assert_raise ArgumentError, 'too many arguments' do
|
|
KernAux.sprintf(*args)
|
|
end
|
|
end
|
|
end
|
|
|
|
assert 'when there are too few arguments' do
|
|
[
|
|
[],
|
|
['Hello, %s!'],
|
|
['Hello, %*s!', 20],
|
|
['Hello, %.*s!', 20],
|
|
['Hello, %*.*s!', 20, 20],
|
|
].each do |args|
|
|
assert_raise ArgumentError, 'too few arguments' do
|
|
KernAux.sprintf(*args)
|
|
end
|
|
end
|
|
end
|
|
|
|
[
|
|
['', 'using regular tests'],
|
|
['_orig', 'using original tests'],
|
|
].each do |(suffix, description)|
|
|
assert description do
|
|
printf_yml =
|
|
File.expand_path("../../../../common/printf#{suffix}.yml", __FILE__)
|
|
|
|
YAML.load(File.read(printf_yml)).each do |test|
|
|
expected = test['result']
|
|
|
|
format = ''
|
|
args = []
|
|
|
|
test['args'].each do |arg|
|
|
if arg.is_a? String
|
|
format += arg
|
|
else
|
|
format += arg[0]
|
|
is_int_format = %w[i d u x X o b].any? { |s| arg[0].include? s }
|
|
arg[1..].each do |item|
|
|
if item.is_a? Array
|
|
if item.length == 1
|
|
args << item[0]
|
|
elsif item[0] == 'long long'
|
|
args << item[1]
|
|
else
|
|
raise "Unknown format: #{args.inspect}"
|
|
end
|
|
elsif is_int_format && item.is_a?(Float)
|
|
args << item.round
|
|
else
|
|
args << item
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
assert "transforms (#{format.inspect}, #{args.inspect[1...-1]}) " \
|
|
"to #{expected.inspect}" do
|
|
assert_equal expected, KernAux.sprintf(format, *args)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|