From 1757d13b6e7a46f86977df8bbd3aa50cbe2cf4bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Gonz=C3=A1lez?= Date: Mon, 13 Apr 2026 17:13:13 +0200 Subject: [PATCH] More test for formula solver --- lib/formula_evaluator.dart | 14 +++++++++++--- test/formula_solver_test.dart | 18 ++++++++++++++++-- 2 files changed, 27 insertions(+), 5 deletions(-) diff --git a/lib/formula_evaluator.dart b/lib/formula_evaluator.dart index e59e823..047c01d 100644 --- a/lib/formula_evaluator.dart +++ b/lib/formula_evaluator.dart @@ -415,6 +415,7 @@ Number functionSolver( while (iter < maxNewtonIters) { final Number y = f(x); + print( "iter: $iter x: $x y: $y"); if (y == 0 || y.abs() <= maxDelta) { return x; } @@ -446,9 +447,16 @@ Number functionSolver( try { return searchNewton(); - } catch (e) { - var approx = searchApproximately(hint, hint + step); - return binarySearch(approx[0], approx[1]); + } catch (e1) { + try { + var approx = searchApproximately(hint, hint + step); + return binarySearch(approx[0], approx[1]); + } + catch( e2 ){ + errorHandler.notify(e1); + errorHandler.notify(e2); + throw NoSolutionException("Failed to find a root using both Newton-Raphson and approximate search: $e1 -- $e2"); + } } } diff --git a/test/formula_solver_test.dart b/test/formula_solver_test.dart index b0407ae..d223127 100644 --- a/test/formula_solver_test.dart +++ b/test/formula_solver_test.dart @@ -1,7 +1,8 @@ +import 'dart:math' as Math; + import 'package:d4rt_formulas/formula_evaluator.dart'; import 'package:d4rt_formulas/formula_models.dart'; import 'package:flutter_test/flutter_test.dart'; -import 'dart:math' as Math; void main() { @@ -22,6 +23,20 @@ void main() { expect( solution, closeTo(5, 1e-10)); }); + + test("Solve x formula", () { + final formula = Formula( + name: 'Test x', + input: [ + VariableSpec(name: 'x', unit: 'scalar'), + ], + output: VariableSpec(name: 'y', unit: 'scalar'), + d4rtCode: 'y = x;', + ); + + var solution = formulaSolver(formula, "x", {"y": 123456789}, maxDelta: 1e-10); + expect(solution, closeTo(123456789, 1e-10)); + }); }); group('Native functions', () { @@ -75,5 +90,4 @@ void main() { expect(root, closeTo(Math.log(2), 0.01)); }); }); - }