387 lines
5.4 KiB
D
387 lines
5.4 KiB
D
// REQUIRED_ARGS:
|
|
|
|
extern(C) int printf(const char*, ...);
|
|
|
|
/************************************************/
|
|
// These seem to be the original tests for $ (originally 'length').
|
|
|
|
int x;
|
|
|
|
int[] bar(int[] a)
|
|
{
|
|
x++;
|
|
return a[0 .. $ - 1];
|
|
}
|
|
|
|
void test1()
|
|
{
|
|
{
|
|
int[4] foo;
|
|
|
|
foo[$ - 2] = 4;
|
|
assert(foo[0] == 0);
|
|
assert(foo[1] == 0);
|
|
assert(foo[2] == 4);
|
|
assert(foo[3] == 0);
|
|
|
|
foo[3] = 5;
|
|
assert(foo[$ - 1] == 5);
|
|
|
|
x = 0;
|
|
bar(foo)[$ - 3] = 6;
|
|
assert(x == 1);
|
|
assert(foo[0] == 6);
|
|
|
|
assert(bar(foo)[$ * 2 - 1 - $] == 4);
|
|
assert(x == 2);
|
|
|
|
foo[0 .. $] = 1;
|
|
assert(foo[0] == 1);
|
|
assert(foo[1] == 1);
|
|
assert(foo[2] == 1);
|
|
assert(foo[3] == 1);
|
|
|
|
x = 0;
|
|
bar(foo)[1 .. $ * 3 - $ - $] = 2;
|
|
assert(x == 1);
|
|
assert(foo[0] == 1);
|
|
assert(foo[1] == 2);
|
|
assert(foo[2] == 2);
|
|
assert(foo[3] == 1);
|
|
|
|
int[] a = new int[3];
|
|
a[0..$] = foo[0..$-1];
|
|
assert(a[0] == 1);
|
|
assert(a[1] == 2);
|
|
assert(a[2] == 2);
|
|
a[] = 4;
|
|
a[0..$] = bar(foo)[0..$];
|
|
assert(x == 2);
|
|
assert(a[0] == 1);
|
|
assert(a[1] == 2);
|
|
assert(a[2] == 2);
|
|
}
|
|
|
|
{
|
|
int[4] f; int[] foo = f;
|
|
|
|
foo[$ - 2] = 4;
|
|
assert(foo[0] == 0);
|
|
assert(foo[1] == 0);
|
|
assert(foo[2] == 4);
|
|
assert(foo[3] == 0);
|
|
|
|
foo[3] = 5;
|
|
assert(foo[$ - 1] == 5);
|
|
|
|
x = 0;
|
|
bar(foo)[$ - 3] = 6;
|
|
assert(x == 1);
|
|
assert(foo[0] == 6);
|
|
|
|
assert(bar(foo)[$ * 2 - 1 - $] == 4);
|
|
assert(x == 2);
|
|
|
|
foo[0 .. $] = 1;
|
|
assert(foo[0] == 1);
|
|
assert(foo[1] == 1);
|
|
assert(foo[2] == 1);
|
|
assert(foo[3] == 1);
|
|
|
|
x = 0;
|
|
bar(foo)[1 .. $ * 3 - $ - $] = 2;
|
|
assert(x == 1);
|
|
assert(foo[0] == 1);
|
|
assert(foo[1] == 2);
|
|
assert(foo[2] == 2);
|
|
assert(foo[3] == 1);
|
|
|
|
int[] a = new int[3];
|
|
a[0..$] = foo[0..$-1];
|
|
assert(a[0] == 1);
|
|
assert(a[1] == 2);
|
|
assert(a[2] == 2);
|
|
a[] = 4;
|
|
a[0..$] = bar(foo)[0..$];
|
|
assert(x == 2);
|
|
assert(a[0] == 1);
|
|
assert(a[1] == 2);
|
|
assert(a[2] == 2);
|
|
}
|
|
}
|
|
|
|
/************************************************/
|
|
|
|
struct ICONINFO
|
|
{
|
|
bool fIcon;
|
|
}
|
|
|
|
void test2()
|
|
{
|
|
ICONINFO info;
|
|
info.fIcon = true;
|
|
assert(info.fIcon == true);
|
|
}
|
|
|
|
|
|
/************************************************/
|
|
|
|
class A3
|
|
{
|
|
void foo()
|
|
{
|
|
printf("A.foo \n" );
|
|
}
|
|
}
|
|
|
|
class B3 : A3
|
|
{
|
|
}
|
|
|
|
class C3 : B3
|
|
{
|
|
override void foo()
|
|
{
|
|
printf("C.foo \n" );
|
|
super.foo();
|
|
}
|
|
}
|
|
|
|
void test3()
|
|
{
|
|
C3 c = new C3();
|
|
c.foo();
|
|
}
|
|
|
|
|
|
/************************************************/
|
|
|
|
void test4()
|
|
{
|
|
int function (int i) x = function int (int i) { return i * 2; };
|
|
int function (int i) y = function int (int i) { return i / 2; };
|
|
|
|
int k;
|
|
k = x(2);
|
|
assert(k == 4);
|
|
k = y(3);
|
|
assert(k == 1);
|
|
}
|
|
|
|
|
|
/************************************************/
|
|
|
|
class Parser
|
|
{
|
|
void next(ref int test)
|
|
{
|
|
void work (int input)
|
|
{
|
|
printf("work(%d, %d)\n", input, test);
|
|
test = 2;
|
|
}
|
|
|
|
test = 3;
|
|
work(4);
|
|
}
|
|
}
|
|
|
|
|
|
void test5()
|
|
{
|
|
Parser parser = new Parser();
|
|
int test;
|
|
|
|
parser.next (test);
|
|
printf("test %d\n", test);
|
|
assert(test == 2);
|
|
}
|
|
|
|
|
|
/************************************************/
|
|
|
|
void foo6(out int bar)
|
|
{
|
|
}
|
|
|
|
void test6()
|
|
{
|
|
int bar = 3;
|
|
foo6(bar);
|
|
printf("%d", bar );
|
|
assert(bar == 0);
|
|
// return 0;
|
|
}
|
|
|
|
/************************************************/
|
|
|
|
void test7()
|
|
{
|
|
char ch = ' ';
|
|
char[] u;
|
|
u.length = 3;
|
|
|
|
int i = 2;
|
|
|
|
printf("a\n");
|
|
u[0..2] = ch;
|
|
printf("b\n");
|
|
u[0..i] = ch;
|
|
printf("c\n");
|
|
assert(u[0] == 0x20);
|
|
assert(u[1] == 0x20);
|
|
}
|
|
|
|
|
|
/************************************************/
|
|
|
|
struct X8
|
|
{
|
|
bool flag;
|
|
}
|
|
|
|
void test8()
|
|
{
|
|
X8 x;
|
|
x.flag = 0 != 0;
|
|
}
|
|
|
|
|
|
/************************************************/
|
|
|
|
void foo9(float x)
|
|
{
|
|
assert(x == 0.0f);
|
|
}
|
|
|
|
void len9(float x, float y, float z, float t)
|
|
{
|
|
foo9(x*x+y*y+z*z);
|
|
}
|
|
|
|
void test9()
|
|
{
|
|
float[4] a;
|
|
a[0] = a[1] = a[2] = a[3] = 0.0f;
|
|
|
|
for (int y = 0; y < 7; ++y)
|
|
{
|
|
len9(a[0], a[1], a[2], a[3]);
|
|
|
|
float justOne() { return 1.0f; }
|
|
|
|
float dot = justOne();
|
|
if (dot < 0.0f)
|
|
dot = 0.0f;
|
|
}
|
|
}
|
|
|
|
/************************************************/
|
|
|
|
ubyte[4] arr10;
|
|
|
|
void foo10()
|
|
{
|
|
*cast(float*)(&arr10[0]) = 3.25;
|
|
}
|
|
|
|
uint bar10()
|
|
{
|
|
uint result = *cast(uint*)&arr10[0];
|
|
return result;
|
|
}
|
|
|
|
float baz10()
|
|
{
|
|
uint result = bar10();
|
|
return *cast(float*)&result;
|
|
}
|
|
|
|
void test10()
|
|
{
|
|
foo10();
|
|
float x = baz10();
|
|
|
|
assert(x == 3.25);
|
|
}
|
|
|
|
|
|
/************************************************/
|
|
|
|
interface I11
|
|
{
|
|
void M ();
|
|
}
|
|
|
|
interface J11 : I11
|
|
{
|
|
void N ();
|
|
}
|
|
|
|
class A11 : I11
|
|
{
|
|
void M () { printf("A.M()\n"); }
|
|
}
|
|
|
|
class B11 : A11, J11
|
|
{
|
|
void N () { printf("B.N()\n"); }
|
|
}
|
|
|
|
void test11()
|
|
{
|
|
I11 f = new B11 ();
|
|
|
|
f.M();
|
|
}
|
|
|
|
|
|
/************************************************/
|
|
|
|
int x12;
|
|
|
|
void test12()
|
|
{
|
|
static class S
|
|
{
|
|
static this()
|
|
{
|
|
printf ("static constructor\n");
|
|
x12 += 1;
|
|
}
|
|
|
|
this()
|
|
{
|
|
printf ("class constructor\n");
|
|
x12 += 10;
|
|
}
|
|
}
|
|
|
|
assert(x12 == 1);
|
|
new S;
|
|
assert(x12 == 11);
|
|
}
|
|
|
|
|
|
/************************************************/
|
|
|
|
int main()
|
|
{
|
|
test1();
|
|
test2();
|
|
test3();
|
|
test4();
|
|
test5();
|
|
test6();
|
|
test7();
|
|
test8();
|
|
test9();
|
|
test10();
|
|
test11();
|
|
test12();
|
|
|
|
printf("Success\n");
|
|
return 0;
|
|
}
|