void test_edge_rotation() { info("Testing edge rotation..."); int mode = shapeset.get_mode(); int ne = mode ? 4 : 3; for (int ori = 0; ori <= 1; ori++) { for (int order = 0; order <= shapeset.get_max_order(); order++) { double *e01, *e02, *ee1, *ee2; precalc.set_active_shape(shapeset.get_edge_index(0, ori, order)); precalc.set_quad_order(quad.get_edge_points(0)); e01 = precalc.get_fn_values(0); if (nc > 1) e02 = precalc.get_fn_values(1); for (int e = 1; e < ne; e++) { precalc.set_active_shape(shapeset.get_edge_index(e, ori, order)); precalc.set_quad_order(quad.get_edge_points(e)); ee1 = precalc.get_fn_values(0); if (nc > 1) ee2 = precalc.get_fn_values(1); int np = quad.get_num_points(quad.get_edge_points(0)); if (nc == 1) { for (int i = 0; i < np; i++) if (!eq(e01[i], ee1[i])) { info("order=%d, ori=%d, edge=%d -- not equal to edge 0", order, ori, e); } } else { for (int i = 0; i < np; i++) { double x = rot[mode][e][0][0] * ee1[i] + rot[mode][e][0][1] * ee2[i]; double y = rot[mode][e][1][0] * ee1[i] + rot[mode][e][1][1] * ee2[i]; if (!eq(e01[i], x) || !eq(e02[i], y)) { info("order=%d, ori=%d, edge=%d -- not equal to edge 0", order, ori, e); printf("x comp: 0-ta %g, %d-ta %g\n", e01[i], e, x); printf("y comp: 0-ta %g, %d-ta %g\n\n", e02[i], e, y); } } } } } } }