blob: 06741f5bcc73017f1307379f950bb299ea7e86d8 [file] [log] [blame]
// 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;
}