1 # frozen_string_literal: false
3 require "-test-/printf"
4 require_relative '../ruby/allpairs'
6 class Test_SPrintf < Test::Unit::TestCase
8 "#{self.class}:#{object_id}"
12 "<#{self.class}:#{object_id}>"
16 assert_equal("<#{self.class}:#{object_id}>", Bug::Printf.s(self))
20 assert_equal("{<#{self.class}:#{object_id}>}", Bug::Printf.v(self))
24 assert_equal('[\n]', Bug::Printf.q("\n"))
25 assert_equal('[aaa]', Bug::Printf.q('aaa'))
26 assert_equal('[a a]', Bug::Printf.q('a a'))
27 assert_equal('[]', Bug::Printf.q(''))
28 assert_equal('[]', Bug::Printf.q(:''))
33 "\u{3042 3044 3046 3048 304a}"
35 assert_equal("<\u{3042 3044 3046 3048 304a}>", Bug::Printf.s(self))
39 #-0x1000000000000000000000000000000000000000000000002,
40 #-0x1000000000000000000000000000000000000000000000001,
41 #-0x1000000000000000000000000000000000000000000000000,
42 #-0xffffffffffffffffffffffffffffffffffffffffffffffff,
43 #-0x1000000000000000000000002,
44 #-0x1000000000000000000000001,
45 #-0x1000000000000000000000000,
46 #-0xffffffffffffffffffffffff,
59 #-0xc717a08d, # 0xc717a08d * 0x524b2245 = 0x4000000000000001
73 #-0x8101, # 0x8101 * 0x7f01 = 0x40000001
134 #0xffffffffffffffffffffffff,
135 #0x1000000000000000000000000,
136 #0x1000000000000000000000001,
137 #0xffffffffffffffffffffffffffffffffffffffffffffffff,
138 #0x1000000000000000000000000000000000000000000000000,
139 #0x1000000000000000000000000000000000000000000000001
143 FLAGS = [[nil, ' '], [nil, '#'], [nil, '+'], [nil, '-'], [nil, '0']]
145 def self.assertions_format_integer(format, type, **opts)
149 r = Bug::Printf.(type, v, **opts)
152 e = sprintf format, v
153 assert_equal([e, format], r, "rb_sprintf(#{format.dump}, #{v})")
160 # octal and hexadecimal deal with negative values differently
162 [nil, true, 0], # 8, 20
164 |type, width, prec, sp, hs, pl, mi, zr|
165 precision = ".#{prec unless prec == true}" if prec
166 format = "%#{sp}#{hs}#{pl}#{mi}#{zr}#{width}#{precision}#{type}"
167 define_method("test_format_integer(#{format})",
168 assertions_format_integer(format, type,
171 zero: zr, width: width,
176 assert_equal("a", Bug::Printf.("s", "a", prec: 3)[0])
177 assert_equal(" a", Bug::Printf.("s", "a", width: 3, prec: 3)[0])
178 assert_equal("a ", Bug::Printf.("s", "a", minus: true, width: 3, prec: 3)[0])
181 def test_snprintf_count
182 assert_equal(3, Bug::Printf.sncount("foo"))