2021-01-22 04:58:08 -08:00
|
|
|
#pragma warning disable 168
|
|
|
|
|
2020-02-11 08:37:52 -08:00
|
|
|
using System;
|
|
|
|
|
|
|
|
namespace Tests
|
|
|
|
{
|
2021-01-22 04:58:08 -08:00
|
|
|
class VarArgsTests
|
2020-02-11 08:37:52 -08:00
|
|
|
{
|
|
|
|
#if BF_PLATFORM_WINDOWS
|
|
|
|
[CLink, Import("msvcrt.dll")]
|
|
|
|
#else
|
|
|
|
[CLink]
|
|
|
|
#endif
|
|
|
|
public static extern int32 sprintf(char8* dest, char8* fmt, ...);
|
|
|
|
|
2021-01-22 04:58:08 -08:00
|
|
|
#if BF_PLATFORM_WINDOWS
|
|
|
|
[CLink, Import("msvcrt.dll")]
|
|
|
|
#else
|
|
|
|
[CLink]
|
|
|
|
#endif
|
|
|
|
public static extern int32 vsprintf(char8* dest, char8* fmt, VarArgs varArgs);
|
|
|
|
|
|
|
|
public static (int, int, int) MethodA(...)
|
|
|
|
{
|
|
|
|
VarArgs vaArgs = .();
|
|
|
|
vaArgs.Start!();
|
|
|
|
int val = vaArgs.Get!<int>();
|
|
|
|
int val2 = vaArgs.Get!<int>();
|
|
|
|
int val3 = (int)vaArgs.Get!<double>();
|
|
|
|
vaArgs.End!();
|
|
|
|
|
|
|
|
return (val, val2, val3);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static (int, int, int) MethodB(int a, ...)
|
|
|
|
{
|
|
|
|
VarArgs vaArgs = .();
|
|
|
|
vaArgs.Start!();
|
|
|
|
int val = vaArgs.Get!<int>();
|
|
|
|
int val2 = vaArgs.Get!<int>();
|
|
|
|
int val3 = (int)vaArgs.Get!<double>();
|
|
|
|
vaArgs.End!();
|
|
|
|
|
|
|
|
return (val, val2, val3);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static (int, int, int) MethodC(int a, ...)
|
|
|
|
{
|
|
|
|
uint8* data = scope uint8[a]*;
|
|
|
|
|
|
|
|
VarArgs vaArgs = .();
|
|
|
|
vaArgs.Start!();
|
|
|
|
int val = vaArgs.Get!<int>();
|
|
|
|
int val2 = vaArgs.Get!<int>();
|
|
|
|
int val3 = (int)vaArgs.Get!<double>();
|
|
|
|
vaArgs.End!();
|
|
|
|
|
|
|
|
return (val, val2, val3);
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int32 SPrintF(char8* dest, char8* fmt, ...)
|
|
|
|
{
|
|
|
|
VarArgs vaArgs = .();
|
|
|
|
vaArgs.Start!();
|
|
|
|
int32 result = vsprintf(dest, fmt, vaArgs);
|
|
|
|
vaArgs.End!();
|
|
|
|
return result;
|
|
|
|
}
|
|
|
|
|
2020-02-11 08:37:52 -08:00
|
|
|
[Test]
|
|
|
|
public static void TestBasics()
|
|
|
|
{
|
|
|
|
char8[256] cStr;
|
|
|
|
sprintf(&cStr, "Test %d %0.1f %0.1f", 123, 1.2f, 2.3f);
|
|
|
|
String str = scope .(&cStr);
|
|
|
|
Test.Assert(str == "Test 123 1.2 2.3");
|
2021-01-22 04:58:08 -08:00
|
|
|
|
|
|
|
SPrintF(&cStr, "Test %d %0.1f %0.1f", 223, 2.2f, 3.3f);
|
|
|
|
str.Set(StringView(&cStr));
|
|
|
|
Test.Assert(str == "Test 223 2.2 3.3");
|
|
|
|
|
|
|
|
Test.Assert(MethodA( 12, 23, 123.0f) == (12, 23, 123));
|
|
|
|
Test.Assert(MethodB( 9, 22, 33, 223.0f) == (22, 33, 223));
|
|
|
|
Test.Assert(MethodC(11, 32, 43, 323.0f) == (32, 43, 323));
|
2020-02-11 08:37:52 -08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|