main function
void
main()
Implementation
void main() {
print('--- Example 1: Basic Arithmetic ---');
Value a = Value(2.0);
Value b = Value(3.0);
final c = a + b;
c.backward();
print('c: $c // Expected: data=5.0');
print('a: $a // Expected: grad=1.0');
print('b: $b // Expected: grad=1.0');
print('\n--- Example 2: Multiplication ---');
a = Value(2.0);
b = Value(3.0);
final d = a * b;
d.backward();
print('d: $d // Expected: data=6.0');
print('a: $a // Expected: grad=3.0');
print('b: $b // Expected: grad=2.0');
print('\n--- Example 3: Polynomial y = x^2 + 3x + 1 ---');
final x1 = Value(2.0);
final y1 = x1 * x1 + x1 * 3.0 + 1;
y1.backward();
print('y1: $y1 // Expected: data=11.0');
print('x1: $x1 // Expected: grad=7.0');
print('\n--- Example 4: Power y = x^3 ---');
final x2 = Value(2.0);
final y2 = x2.pow(3);
y2.backward();
print('y2: $y2 // Expected: data=8.0');
print('x2: $x2 // Expected: grad=12.0');
print('\n--- Example 5: Negative and Division y = -a / b ---');
final a2 = Value(4.0);
final b2 = Value(2.0);
final y3 = -a2 / b2;
y3.backward();
print('y3: $y3 // Expected: data=-2.0');
print('a2: $a2 // Expected: grad=-0.5');
print('b2: $b2 // Expected: grad=1.0');
print('\n--- Example 6: Sigmoid Activation ---');
final x3 = Value(1.0);
final y4 = x3.sigmoid();
y4.backward();
print('y4: $y4 // Expected ≈ 0.7311');
print('x3: $x3 // Expected grad ≈ 0.1966');
print('\n--- Example 7: ReLU Activation (x < 0) ---');
final x4 = Value(-2.0);
final y5 = x4.relu();
y5.backward();
print('y5: $y5 // Expected data=0.0');
print('x4: $x4 // Expected grad=0.0');
print('\n--- Example 8: ReLU Activation (x > 0) ---');
final x5 = Value(3.0);
final y6 = x5.relu();
y6.backward();
print('y6: $y6 // Expected data=3.0');
print('x5: $x5 // Expected grad=1.0');
print('\n--- Example 9: Composite Expression y = sigmoid(a * x + b) * c ---');
final xc = Value(2.0);
final ac = Value(3.0);
final bc = Value(1.0);
final cc = Value(-1.0);
final yc = ((ac * xc + bc).sigmoid()) * cc;
yc.backward();
print('yc: $yc');
print('xc: $xc // Expected small negative grad ≈ -0.00273');
print('ac: $ac // Expected ≈ -0.00182');
print('bc: $bc // Expected ≈ -0.00091');
print('cc: $cc // Expected ≈ sigmoid ≈ 0.99909');
print('\n--- Example 10: Quadratic Loss = (yTrue - yPred)^2 ---');
final x6 = Value(2.0);
final w = Value(3.0);
final yPred = w * x6;
final yTrue = Value(10.0);
final loss = (yTrue - yPred).pow(2);
loss.backward();
print('loss: $loss // Expected=16.0');
print('x6: $x6 // Expected grad = -24');
print('w : $w // Expected grad = -16');
print('yPred: $yPred');
print('yTrue: $yTrue');
print('\n--- Example 11: Chain Rule ---');
final x7 = Value(2.0);
final y7 = x7 * 3.0;
final z7 = y7 + 5.0;
final out7 = z7.pow(2);
out7.backward();
print('out7: $out7 // Expected=121.0');
print('x7: $x7 // Expected grad=66.0');
print('\n--- Example 12: Simple Addition with Negation ---');
final x8 = Value(5.0);
final y8 = Value(3.0);
final z8 = -(x8 + y8);
z8.backward();
print('z8: $z8 // Expected data=-8.0');
print('x8: $x8 // Expected grad=-1.0');
print('y8: $y8 // Expected grad=-1.0');
print('\n--- Example 13: Chain of Operations (x + 2) * (y - 1) ---');
final x9 = Value(4.0);
final y9 = Value(6.0);
final z9 = (x9 + 2.0) * (y9 - 1.0);
z9.backward();
print('z9: $z9 // Expected data=30.0');
print('x9: $x9 // Expected grad=4.0');
print('y9: $y9 // Expected grad=3.0');
print('\n--- Example 14: More Complex Expression ---');
final x10 = Value(1.0);
final y10 = x10 * 2.0;
final z10 = (y10 + 3.0).pow(2);
final out10 = z10 / 4.0;
out10.backward();
print('out10: $out10 // Expected data=10.0');
print('x10: $x10 // Expected grad=10.0');
}