/*
 * Generated by EML-lang C backend
 * Source module: sine_oscillator
 * Source file:   /home/monogate/monogate/forge/examples/sine_oscillator.eml
 * Functions:     1
 * Constants:     0
 * Types:         0
 */

#include "libmonogate.h"
#include <stdint.h>
#include <math.h>
#include <assert.h>

/*
 * oscillate
 * Chain order: 2     Cost class: p2-d5-w2-c0
 * EML depth:   5  Drift risk: MEDIUM
 * Dynamics:    1 osc, 0 decay  (predicted_r=2)
 * FPGA est:   5 MAC, 0 exp, 0 ln, 1 trig -> 10 cy @ 32-bit
 */
double oscillate(double amplitude, double omega, double t) {
    assert(((amplitude >= 0.0)) && "oscillate: requires ((amplitude >= 0.0))");
    assert(((amplitude <= 1.0)) && "oscillate: requires ((amplitude <= 1.0))");
    assert(((omega >= 0.0)) && "oscillate: requires ((omega >= 0.0))");
    assert(((omega <= 10000.0)) && "oscillate: requires ((omega <= 10000.0))");
    assert(((t >= 0.0)) && "oscillate: requires ((t >= 0.0))");
    return (amplitude * mg_sin((omega * t)));
}
