void printf (string fmt, ...) = #0;

int
test_format ()
{
	int         fail = 0;
	quaternion  q = '1 2 3 4';
	vector      v = '-1 -2 -3';
	float       s = -4;

	if (q.x != 1 || q.y != 2 || q.z != 3 || q.w != 4) {
		printf ("q = '1 2 3 4' -> %q\n", q);
		fail = 1;
	}
	if (q.v != '1 2 3' || q.s != 4) {
		printf ("q = '1 2 3 4' -> %v, %g\n", q.v, q.s);
		fail = 1;
	}
	q = nil;
	if (q.x != 0 || q.y != 0 || q.z != 0 || q.w != 0) {
		printf ("q = nil -> %q\n", q);
		fail = 1;
	}
	if (q.v != '0 0 0' || q.s != 0) {
		printf ("q = nil -> %v, %g\n", q.v, q.s);
		fail = 1;
	}
	q = [1, [2, 3, 4]];
	if (q.x != 2 || q.y != 3 || q.z != 4 || q.w != 1) {
		printf ("q = [1, [2, 3, 4]] -> %q\n", q);
		fail = 1;
	}
	if (q.v != '2 3 4' || q.s != 1) {
		printf ("q = [1, [2, 3, 4]] -> %v, %g\n", q.v, q.s);
		fail = 1;
	}
	q = [[5, 6, 7], 8];
	if (q.x != 5 || q.y != 6 || q.z != 7 || q.w != 8) {
		printf ("q = [[5, 6, 7], 8] -> %q\n", q);
		fail = 1;
	}
	if (q.v != '5 6 7' || q.s != 8) {
		printf ("q = [[5, 6, 7], 8] -> %v, %g\n", q.v, q.s);
		fail = 1;
	}
	q = [s, v];
	if (q.x != v.x || q.y != v.y || q.z != v.z || q.w != s) {
		printf ("q = [s, v] -> %q (%v)\n", q, v);
		fail = 1;
	}
	if (q.v != v || q.s != s) {
		printf ("q = [s, v] -> %v, %g (%v)\n", q.v, q.s, v);
		fail = 1;
	}
	q = [v, s];
	if (q.x != v.x || q.y != v.y || q.z != v.z || q.w != s) {
		printf ("q = [v, s] -> %q (%v %s)\n", q, v, s);
		fail = 1;
	}
	if (q.v != v || q.s != s) {
		printf ("q = [v, s] -> %v, %g (%v %s)\n", q.v, q.s, v, s);
		fail = 1;
	}
	return fail;
}

int
main ()
{
	int         fail = 0;
	fail |= test_format ();
	return fail;
}