         fail_on_error ( j1->join_from_right(j2) );
 
         // Check result.
+        // NOTE: this test fails on CUDA arch < 1.3
         check_matrix_matrix(j1, 0, 1);
 
         // Free memory.

                n_stat, n_src, 1);

        // Call wrapper function.
        fail_on_error ( j1->join_from_right(j2) );

        // Check result.

        {
            construct_float4c_output_matrix_matrix(i + offset1,
                    i + offset2, t);
//            construct_double4c_output_matrix_matrix(i + offset1,
//                    i + offset2, t);
            sprintf(msg, "failed at index %i\n", i);
            CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msg, t.a.x, ptr[i].a.x, abs(t.a.x * 5.0e-5));
            CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msg, t.a.y, ptr[i].a.y, abs(t.a.y * 5.0e-5));
            CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msg, t.b.x, ptr[i].b.x, abs(t.b.x * 5.0e-5));
            CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msg, t.b.y, ptr[i].b.y, abs(t.b.y * 5.0e-5));
            CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msg, t.c.x, ptr[i].c.x, abs(t.c.x * 5.0e-5));
            CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msg, t.c.y, ptr[i].c.y, abs(t.c.y * 5.0e-5));
            CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msg, t.d.x, ptr[i].d.x, abs(t.d.x * 5.0e-5));
            CPPUNIT_ASSERT_DOUBLES_EQUAL_MESSAGE(msg, t.d.y, ptr[i].d.y, abs(t.d.y * 5.0e-5));
        }
    }
    else if (jones->type() == OSKAR_DOUBLE_COMPLEX_MATRIX)
