summaryrefslogtreecommitdiff
path: root/test/fiddle/test_func.rb
diff options
context:
space:
mode:
Diffstat (limited to 'test/fiddle/test_func.rb')
-rw-r--r--test/fiddle/test_func.rb31
1 files changed, 31 insertions, 0 deletions
diff --git a/test/fiddle/test_func.rb b/test/fiddle/test_func.rb
index ca89173766..18052fffdd 100644
--- a/test/fiddle/test_func.rb
+++ b/test/fiddle/test_func.rb
@@ -79,5 +79,36 @@ module Fiddle
EnvUtil.under_gc_stress {qsort.call(buff, buff.size, 1, cb)}
assert_equal("1349", buff, bug4929)
end
+
+ def test_snprintf
+ snprintf = Function.new(@libc["snprintf"],
+ [
+ TYPE_VOIDP,
+ TYPE_SIZE_T,
+ TYPE_VOIDP,
+ TYPE_VARIADIC,
+ ],
+ TYPE_INT)
+ output_buffer = " " * 1024
+ output = Pointer[output_buffer]
+
+ written = snprintf.call(output,
+ output.size,
+ "int: %d, string: %.*s\n",
+ TYPE_INT, -29,
+ TYPE_INT, 4,
+ TYPE_VOIDP, "Hello")
+ assert_equal("int: -29, string: Hell\n",
+ output_buffer[0, written])
+
+ written = snprintf.call(output,
+ output.size,
+ "string: %.*s, uint: %u\n",
+ TYPE_INT, 2,
+ TYPE_VOIDP, "Hello",
+ TYPE_INT, 29)
+ assert_equal("string: He, uint: 29\n",
+ output_buffer[0, written])
+ end
end
end if defined?(Fiddle)