uniform half4 colorGreen, colorRed;
uniform float2x2 testMatrix2x2;
uniform float3x3 testMatrix3x3;
uniform half4 testInputs;  // equals (-1.25, 0, 0.75, 2.25)

half4 main(float2 coords) {
    const float2 c12  = float2(1, 2);
    const float2 c34  = float2(3, 4);
    const float3 c123 = float3(1, 2, 3);
    const float3 c456 = float3(4, 5, 6);

    return  (outerProduct(testMatrix2x2[0], testMatrix2x2[1]) == float2x2(3, 6,
                                                                          4, 8)
          && outerProduct(c12, c34)                           == float2x2(3, 6,
                                                                          4, 8)
          && outerProduct(testMatrix3x3[0], testMatrix3x3[1]) == float3x3(4, 8,  12,
                                                                          5, 10, 15,
                                                                          6, 12, 18)
          && outerProduct(c123, c456)                         == float3x3(4, 8,  12,
                                                                          5, 10, 15,
                                                                          6, 12, 18)
          && outerProduct(testMatrix2x2[0], testMatrix3x3[1]) == float3x2(4, 8,
                                                                          5, 10,
                                                                          6, 12)
          && outerProduct(c12, c456)                          == float3x2(4, 8,
                                                                          5, 10,
                                                                          6, 12)
          && outerProduct(testInputs, half4(1, 0, 0, 2))      == float4x4(-1.25, 0.0, 0.75, 2.25,
                                                                           0.0,  0.0, 0.0,  0.0,
                                                                           0.0,  0.0, 0.0,  0.0,
                                                                          -2.50, 0.0, 1.50, 4.50)
          && outerProduct(half4(-1.25, 0, 0.75, 2.25), half4(1, 0, 0, 2))
                                                              == float4x4(-1.25, 0.0, 0.75, 2.25,
                                                                           0.0,  0.0, 0.0,  0.0,
                                                                           0.0,  0.0, 0.0,  0.0,
                                                                          -2.50, 0.0, 1.50, 4.50)
          && outerProduct(testInputs, c12)                    == float2x4(-1.25, 0.0, 0.75, 2.25,
                                                                          -2.50, 0.0, 1.50, 4.50)
          && outerProduct(c12, testInputs)                    == float4x2(-1.25, -2.50,
                                                                           0.0,   0.0,
                                                                           0.75,  1.50,
                                                                           2.25,  4.50))
           ? colorGreen : colorRed;
}
