Skip to content

Commit 26ac103

Browse files
committed
test with matrix arguments
1 parent bffb19d commit 26ac103

2 files changed

Lines changed: 64 additions & 0 deletions

File tree

‎tests/all_tests.c‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -262,6 +262,9 @@ int main(void)
262262
mu_run_test(test_wsum_hess_transpose, tests_run);
263263
mu_run_test(test_wsum_hess_exp_sum, tests_run);
264264
mu_run_test(test_wsum_hess_exp_sum_mult, tests_run);
265+
mu_run_test(test_wsum_hess_exp_sum_matmul, tests_run);
266+
mu_run_test(test_wsum_hess_sin_sum_axis0_matmul, tests_run);
267+
mu_run_test(test_wsum_hess_logistic_sum_axis0_matmul, tests_run);
265268

266269
printf("\n--- Utility Tests ---\n");
267270
mu_run_test(test_cblas_ddot, tests_run);

‎tests/wsum_hess/test_chain_rule_wsum_hess.h‎

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,3 +37,64 @@ const char *test_wsum_hess_exp_sum_mult(void)
3737
free_expr(exp_sum_xy);
3838
return 0;
3939
}
40+
41+
const char *test_wsum_hess_exp_sum_matmul(void)
42+
{
43+
/* exp(sum(X @ Y)) where X is 2x3, Y is 3x2
44+
* n_vars = 6 + 6 = 12 */
45+
double u_vals[12] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 0.5, 1.5, 2.5, 0.1, 0.2, 0.3};
46+
double w = 1.0;
47+
48+
expr *X = new_variable(2, 3, 0, 12);
49+
expr *Y = new_variable(3, 2, 6, 12);
50+
expr *XY = new_matmul(X, Y);
51+
expr *sum_XY = new_sum(XY, -1);
52+
expr *exp_sum_XY = new_exp(sum_XY);
53+
54+
mu_assert("check_wsum_hess failed",
55+
check_wsum_hess(exp_sum_XY, u_vals, &w, NUMERICAL_DIFF_DEFAULT_H));
56+
57+
free_expr(exp_sum_XY);
58+
return 0;
59+
}
60+
61+
const char *test_wsum_hess_sin_sum_axis0_matmul(void)
62+
{
63+
/* sin(sum(X @ Y, axis=0)) where X is 2x3, Y is 3x2
64+
* X@Y is 2x2, sum(axis=0) gives 1x2, sin gives 1x2
65+
* n_vars = 6 + 6 = 12 */
66+
double u_vals[12] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 0.5, 1.5, 2.5, 0.1, 0.2, 0.3};
67+
double w[2] = {1.0, 1.0};
68+
69+
expr *X = new_variable(2, 3, 0, 12);
70+
expr *Y = new_variable(3, 2, 6, 12);
71+
expr *XY = new_matmul(X, Y);
72+
expr *sum_XY = new_sum(XY, 0);
73+
expr *sin_sum_XY = new_sin(sum_XY);
74+
75+
mu_assert("check_wsum_hess failed",
76+
check_wsum_hess(sin_sum_XY, u_vals, w, NUMERICAL_DIFF_DEFAULT_H));
77+
78+
free_expr(sin_sum_XY);
79+
return 0;
80+
}
81+
82+
const char *test_wsum_hess_logistic_sum_axis0_matmul(void)
83+
{
84+
/* logistic(sum(X @ Y, axis=0)) where X is 2x3, Y is 3x2
85+
* n_vars = 6 + 6 = 12 */
86+
double u_vals[12] = {1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 0.5, 1.5, 2.5, 0.1, 0.2, 0.3};
87+
double w[2] = {1.0, 1.0};
88+
89+
expr *X = new_variable(2, 3, 0, 12);
90+
expr *Y = new_variable(3, 2, 6, 12);
91+
expr *XY = new_matmul(X, Y);
92+
expr *sum_XY = new_sum(XY, 0);
93+
expr *logistic_sum_XY = new_logistic(sum_XY);
94+
95+
mu_assert("check_wsum_hess failed",
96+
check_wsum_hess(logistic_sum_XY, u_vals, w, NUMERICAL_DIFF_DEFAULT_H));
97+
98+
free_expr(logistic_sum_XY);
99+
return 0;
100+
}

0 commit comments

Comments
 (0)