#version 400 core

in double d;   // ERROR, no doubles
in dvec3 d3;   // ERROR, no doubles
in dmat4 dm4;  // ERROR, no doubles

// function selection under type conversion
void foo1(double a, uint b)  {}
void foo1(double a, int b)   {}
void foo1(double a, float b) {}
void foo1(double a, double b){}

void foo2(double a, float b) {}
void foo2(double a, double b){}

void foo3(double a, float b) {}
void foo3(float a, double b) {}

void ftd(  int,  float, double) {}
void ftd( uint,  float, double) {}
void ftd(float, double, double) {}

void main()
{
    double d;
	uint u;
	int i;
	float f;

	foo1(d, d);
	foo1(d, u);
	foo1(d, i);
	foo1(d, f);

	foo1(f, d);
	foo1(f, u);
	foo1(f, i);
	foo1(f, f);

	foo1(u, d);
	foo1(u, u);
	foo1(u, i);
	foo1(u, f);

	foo1(i, d);
	foo1(i, u);
	foo1(i, i);
	foo1(i, f);

	foo2(d, d);
	foo2(d, u);
	foo2(d, i);
	foo2(d, f);

	foo2(f, d);
	foo2(f, u);
	foo2(f, i);
	foo2(f, f);

	foo2(u, d);
	foo2(u, u);
	foo2(u, i);
	foo2(u, f);

	foo2(i, d);
	foo2(i, u);
	foo2(i, i);
	foo2(i, f);

	foo3(d, d);  // ERROR, no match
	foo3(d, u);
	foo3(d, i);
	foo3(d, f);

	foo3(f, d);
	foo3(f, u); // ERROR, ambiguous
	foo3(f, i); // ERROR, ambiguous
	foo3(f, f); // ERROR, ambiguous

	foo3(u, d);
	foo3(u, u); // ERROR, ambiguous
	foo3(u, i); // ERROR, ambiguous
	foo3(u, f); // ERROR, ambiguous

	foo3(i, d);
	foo3(i, u); // ERROR, ambiguous
	foo3(i, i); // ERROR, ambiguous
	foo3(i, f); // ERROR, ambiguous

	ftd(i, f, f);
	ftd(u, f, f);
}

void itf(int, float, int);
void itf(int, double, int);

void tf()
{
    double d;
	uint u;
	int i;
	float f;
	
	itf(i, i, i);
	itf(i, u, i);
}
