diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..ff84fd1 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,34 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + workflow_dispatch: + +permissions: + contents: read + +jobs: + cmake: + name: ${{ matrix.os }} / ${{ matrix.preset }} + runs-on: ${{ matrix.os }} + + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest, macos-latest] + preset: [debug, release] + + steps: + - name: Check out repository + uses: actions/checkout@v7 + + - name: Configure + run: cmake --preset ${{ matrix.preset }} + + - name: Build + run: cmake --build --preset ${{ matrix.preset }} + + - name: Test + run: ctest --preset ${{ matrix.preset }} diff --git a/src/value.c b/src/value.c index f0f293e..7de6914 100644 --- a/src/value.c +++ b/src/value.c @@ -257,6 +257,7 @@ bool mg_backward(mg_graph* g, mg_value* out) { v->left->grad += v->right->data * powf(v->left->data, v->right->data - 1.0f) * v->grad; + v->right->grad += v->data * logf(v->left->data) * v->grad; break; case MG_OP_RELU: v->left->grad += (v->data > 0.0) * v->grad; diff --git a/test/test.c b/test/test.c index 65e2c95..cc77bd2 100644 --- a/test/test.c +++ b/test/test.c @@ -111,7 +111,7 @@ static void test_pow(void) { expect_close("pow data", mg_data(out), 64.0f); expect_close("pow base grad", mg_grad(base), 48.0f); - expect_close("pow exponent grad", mg_grad(exponent), 0.0f); + expect_close("pow exponent grad", mg_grad(exponent), 64.0f * logf(4.0f)); mg_graph_free(g); }