diff --git a/bindings/mruby/test/printf.rb b/bindings/mruby/test/printf.rb index 2b75238a..7c73e8e9 100644 --- a/bindings/mruby/test/printf.rb +++ b/bindings/mruby/test/printf.rb @@ -1,5 +1,43 @@ 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 + + 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 + [ ['', 'using regular tests'], ['_orig', 'using original tests'], diff --git a/common/printf_orig.yml b/common/printf_orig.yml index e2e21fa9..31513d65 100644 --- a/common/printf_orig.yml +++ b/common/printf_orig.yml @@ -57,19 +57,19 @@ - result: '1024' args: [['% u', 1024]] - result: '4294966272' - args: [['% u', 4_294_966_272]] + args: [['% u', 4294966272]] - result: '777' args: [['% o', 511]] - result: '37777777001' - args: [['% o', 4_294_966_785]] + args: [['% o', 4294966785]] - result: '1234abcd' - args: [['% x', 305_441_741]] + args: [['% x', 305441741]] - result: 'edcb5433' - args: [['% x', 3_989_525_555]] + args: [['% x', 3989525555]] - result: '1234ABCD' - args: [['% X', 305_441_741]] + args: [['% X', 305441741]] - result: 'EDCB5433' - args: [['% X', 3_989_525_555]] + args: [['% X', 3989525555]] - result: 'x' args: [['% c', ['x']]] @@ -100,19 +100,19 @@ - result: '1024' args: [['%+u', 1024]] - result: '4294966272' - args: [['%+u', 4_294_966_272]] + args: [['%+u', 4294966272]] - result: '777' args: [['%+o', 511]] - result: '37777777001' - args: [['%+o', 4_294_966_785]] + args: [['%+o', 4294966785]] - result: '1234abcd' - args: [['%+x', 305_441_741]] + args: [['%+x', 305441741]] - result: 'edcb5433' - args: [['%+x', 3_989_525_555]] + args: [['%+x', 3989525555]] - result: '1234ABCD' - args: [['%+X', 305_441_741]] + args: [['%+X', 305441741]] - result: 'EDCB5433' - args: [['%+X', 3_989_525_555]] + args: [['%+X', 3989525555]] - result: 'x' args: [['%+c', ['x']]] - result: '+' @@ -221,19 +221,19 @@ - result: '1024' args: [['%u', 1024]] - result: '4294966272' - args: [['%u', 4_294_966_272]] + args: [['%u', 4294966272]] - result: '777' args: [['%o', 511]] - result: '37777777001' - args: [['%o', 4_294_966_785]] + args: [['%o', 4294966785]] - result: '1234abcd' - args: [['%x', 305_441_741]] + args: [['%x', 305441741]] - result: 'edcb5433' - args: [['%x', 3_989_525_555]] + args: [['%x', 3989525555]] - result: '1234ABCD' - args: [['%X', 305_441_741]] + args: [['%X', 305441741]] - result: 'EDCB5433' - args: [['%X', 3_989_525_555]] + args: [['%X', 3989525555]] - result: '%' args: [['%%']] @@ -252,19 +252,19 @@ - result: '1024' args: [['%1u', 1024]] - result: '4294966272' - args: [['%1u', 4_294_966_272]] + args: [['%1u', 4294966272]] - result: '777' args: [['%1o', 511]] - result: '37777777001' - args: [['%1o', 4_294_966_785]] + args: [['%1o', 4294966785]] - result: '1234abcd' - args: [['%1x', 305_441_741]] + args: [['%1x', 305441741]] - result: 'edcb5433' - args: [['%1x', 3_989_525_555]] + args: [['%1x', 3989525555]] - result: '1234ABCD' - args: [['%1X', 305_441_741]] + args: [['%1X', 305441741]] - result: 'EDCB5433' - args: [['%1X', 3_989_525_555]] + args: [['%1X', 3989525555]] - result: 'x' args: [['%1c', ['x']]] @@ -283,19 +283,19 @@ - result: ' 1024' args: [['%20u', 1024]] - result: ' 4294966272' - args: [['%20u', 4_294_966_272]] + args: [['%20u', 4294966272]] - result: ' 777' args: [['%20o', 511]] - result: ' 37777777001' - args: [['%20o', 4_294_966_785]] + args: [['%20o', 4294966785]] - result: ' 1234abcd' - args: [['%20x', 305_441_741]] + args: [['%20x', 305441741]] - result: ' edcb5433' - args: [['%20x', 3_989_525_555]] + args: [['%20x', 3989525555]] - result: ' 1234ABCD' - args: [['%20X', 305_441_741]] + args: [['%20X', 305441741]] - result: ' EDCB5433' - args: [['%20X', 3_989_525_555]] + args: [['%20X', 3989525555]] - result: ' x' args: [['%20c', ['x']]] @@ -314,19 +314,19 @@ - result: ' 1024' args: [['%*u', 20, 1024]] - result: ' 4294966272' - args: [['%*u', 20, 4_294_966_272]] + args: [['%*u', 20, 4294966272]] - result: ' 777' args: [['%*o', 20, 511]] - result: ' 37777777001' - args: [['%*o', 20, 4_294_966_785]] + args: [['%*o', 20, 4294966785]] - result: ' 1234abcd' - args: [['%*x', 20, 305_441_741]] + args: [['%*x', 20, 305441741]] - result: ' edcb5433' - args: [['%*x', 20, 3_989_525_555]] + args: [['%*x', 20, 3989525555]] - result: ' 1234ABCD' - args: [['%*X', 20, 305_441_741]] + args: [['%*X', 20, 305441741]] - result: ' EDCB5433' - args: [['%*X', 20, 3_989_525_555]] + args: [['%*X', 20, 3989525555]] - result: ' x' args: [['%*c', 20, ['x']]] @@ -348,19 +348,19 @@ args: [['%-20.4f', 1024.1234]] float: true - result: '4294966272 ' - args: [['%-20u', 4_294_966_272]] + args: [['%-20u', 4294966272]] - result: '777 ' args: [['%-20o', 511]] - result: '37777777001 ' - args: [['%-20o', 4_294_966_785]] + args: [['%-20o', 4294966785]] - result: '1234abcd ' - args: [['%-20x', 305_441_741]] + args: [['%-20x', 305441741]] - result: 'edcb5433 ' - args: [['%-20x', 3_989_525_555]] + args: [['%-20x', 3989525555]] - result: '1234ABCD ' - args: [['%-20X', 305_441_741]] + args: [['%-20X', 305441741]] - result: 'EDCB5433 ' - args: [['%-20X', 3_989_525_555]] + args: [['%-20X', 3989525555]] - result: 'x ' args: [['%-20c', ['x']]] - result: '| 9| |9 | | 9|' @@ -387,19 +387,19 @@ - result: '1024 ' args: [['%0-20u', 1024]] - result: '4294966272 ' - args: [['%0-20u', 4_294_966_272]] + args: [['%0-20u', 4294966272]] - result: '777 ' args: [['%0-20o', 511]] - result: '37777777001 ' - args: [['%0-20o', 4_294_966_785]] + args: [['%0-20o', 4294966785]] - result: '1234abcd ' - args: [['%0-20x', 305_441_741]] + args: [['%0-20x', 305441741]] - result: 'edcb5433 ' - args: [['%0-20x', 3_989_525_555]] + args: [['%0-20x', 3989525555]] - result: '1234ABCD ' - args: [['%0-20X', 305_441_741]] + args: [['%0-20X', 305441741]] - result: 'EDCB5433 ' - args: [['%0-20X', 3_989_525_555]] + args: [['%0-20X', 3989525555]] - result: 'x ' args: [['%0-20c', ['x']]] @@ -416,19 +416,19 @@ - result: '00000000000000001024' args: [['%020u', 1024]] - result: '00000000004294966272' - args: [['%020u', 4_294_966_272]] + args: [['%020u', 4294966272]] - result: '00000000000000000777' args: [['%020o', 511]] - result: '00000000037777777001' - args: [['%020o', 4_294_966_785]] + args: [['%020o', 4294966785]] - result: '0000000000001234abcd' - args: [['%020x', 305_441_741]] + args: [['%020x', 305441741]] - result: '000000000000edcb5433' - args: [['%020x', 3_989_525_555]] + args: [['%020x', 3989525555]] - result: '0000000000001234ABCD' - args: [['%020X', 305_441_741]] + args: [['%020X', 305441741]] - result: '000000000000EDCB5433' - args: [['%020X', 3_989_525_555]] + args: [['%020X', 3989525555]] # padding .20 @@ -443,19 +443,19 @@ - result: '00000000000000001024' args: [['%.20u', 1024]] - result: '00000000004294966272' - args: [['%.20u', 4_294_966_272]] + args: [['%.20u', 4294966272]] - result: '00000000000000000777' args: [['%.20o', 511]] - result: '00000000037777777001' - args: [['%.20o', 4_294_966_785]] + args: [['%.20o', 4294966785]] - result: '0000000000001234abcd' - args: [['%.20x', 305_441_741]] + args: [['%.20x', 305441741]] - result: '000000000000edcb5433' - args: [['%.20x', 3_989_525_555]] + args: [['%.20x', 3989525555]] - result: '0000000000001234ABCD' - args: [['%.20X', 305_441_741]] + args: [['%.20X', 305441741]] - result: '000000000000EDCB5433' - args: [['%.20X', 3_989_525_555]] + args: [['%.20X', 3989525555]] # padding #020 @@ -470,19 +470,19 @@ - result: '00000000000000001024' args: [['%#020u', 1024]] - result: '00000000004294966272' - args: [['%#020u', 4_294_966_272]] + args: [['%#020u', 4294966272]] - result: '00000000000000000777' args: [['%#020o', 511]] - result: '00000000037777777001' - args: [['%#020o', 4_294_966_785]] + args: [['%#020o', 4294966785]] - result: '0x00000000001234abcd' - args: [['%#020x', 305_441_741]] + args: [['%#020x', 305441741]] - result: '0x0000000000edcb5433' - args: [['%#020x', 3_989_525_555]] + args: [['%#020x', 3989525555]] - result: '0X00000000001234ABCD' - args: [['%#020X', 305_441_741]] + args: [['%#020X', 305441741]] - result: '0X0000000000EDCB5433' - args: [['%#020X', 3_989_525_555]] + args: [['%#020X', 3989525555]] # padding #20 @@ -497,19 +497,19 @@ - result: ' 1024' args: [['%#20u', 1024]] - result: ' 4294966272' - args: [['%#20u', 4_294_966_272]] + args: [['%#20u', 4294966272]] - result: ' 0777' args: [['%#20o', 511]] - result: ' 037777777001' - args: [['%#20o', 4_294_966_785]] + args: [['%#20o', 4294966785]] - result: ' 0x1234abcd' - args: [['%#20x', 305_441_741]] + args: [['%#20x', 305441741]] - result: ' 0xedcb5433' - args: [['%#20x', 3_989_525_555]] + args: [['%#20x', 3989525555]] - result: ' 0X1234ABCD' - args: [['%#20X', 305_441_741]] + args: [['%#20X', 305441741]] - result: ' 0XEDCB5433' - args: [['%#20X', 3_989_525_555]] + args: [['%#20X', 3989525555]] # padding 20.5 @@ -524,19 +524,19 @@ - result: ' 01024' args: [['%20.5u', 1024]] - result: ' 4294966272' - args: [['%20.5u', 4_294_966_272]] + args: [['%20.5u', 4294966272]] - result: ' 00777' args: [['%20.5o', 511]] - result: ' 37777777001' - args: [['%20.5o', 4_294_966_785]] + args: [['%20.5o', 4294966785]] - result: ' 1234abcd' - args: [['%20.5x', 305_441_741]] + args: [['%20.5x', 305441741]] - result: ' 00edcb5433' - args: [['%20.10x', 3_989_525_555]] + args: [['%20.10x', 3989525555]] - result: ' 1234ABCD' - args: [['%20.5X', 305_441_741]] + args: [['%20.5X', 305441741]] - result: ' 00EDCB5433' - args: [['%20.10X', 3_989_525_555]] + args: [['%20.10X', 3989525555]] # padding neg numbers @@ -635,29 +635,29 @@ - result: ' 1024' args: [['%20.u', 1024]] - result: ' 4294966272' - args: [['%20.0u', 4_294_966_272]] + args: [['%20.0u', 4294966272]] - result: ' ' args: [['%20.u', 0]] - result: ' 777' args: [['%20.o', 511]] - result: ' 37777777001' - args: [['%20.0o', 4_294_966_785]] + args: [['%20.0o', 4294966785]] - result: ' ' args: [['%20.o', 0]] - result: ' 1234abcd' - args: [['%20.x', 305_441_741]] + args: [['%20.x', 305441741]] - result: ' 1234abcd' - args: [['%50.x', 305_441_741]] + args: [['%50.x', 305441741]] - result: ' 1234abcd 12345' - args: [['%50.x', 305_441_741], ['%10.u', 12345]] + args: [['%50.x', 305441741], ['%10.u', 12345]] - result: ' edcb5433' - args: [['%20.0x', 3_989_525_555]] + args: [['%20.0x', 3989525555]] - result: ' ' args: [['%20.x', 0]] - result: ' 1234ABCD' - args: [['%20.X', 305_441_741]] + args: [['%20.X', 305441741]] - result: ' EDCB5433' - args: [['%20.0X', 3_989_525_555]] + args: [['%20.0X', 3989525555]] - result: ' ' args: [['%20.X', 0]] - result: ' '