diff --git a/example/formula_evaluation_example.dart b/example/formula_evaluation_example.dart index 333a3ce..d629036 100644 --- a/example/formula_evaluation_example.dart +++ b/example/formula_evaluation_example.dart @@ -23,9 +23,7 @@ void main() { ], output: VariableSpec(name: 'F', magnitude: 'force'), d4rtCode: ''' - main() { return m * a; - } ''', ); @@ -57,9 +55,7 @@ void main() { ], output : VariableSpec(name: 'discriminant', magnitude: 'scalar'), d4rtCode: ''' - main() { return b * b - 4 * a * c; - } ''', ); @@ -97,10 +93,8 @@ void main() { output: VariableSpec(name: 'A', magnitude: 'area'), d4rtCode: ''' - main() { var pi = 3.14159265359; return pi * r * r; - } ''', ); @@ -144,7 +138,6 @@ void main() { ], output: VariableSpec(name: 'A', magnitude: 'currency'), // Final amount d4rtCode: ''' - main() { // A = P * (1 + r/n)^(n*t) var rate_per_period = r / n; var base = 1 + rate_per_period; @@ -158,7 +151,6 @@ void main() { } return result; - } ''', ); diff --git a/lib/formula_evaluator.dart b/lib/formula_evaluator.dart index 65e3a89..7a6be47 100644 --- a/lib/formula_evaluator.dart +++ b/lib/formula_evaluator.dart @@ -48,6 +48,8 @@ class FormulaEvaluator { try { // Build the complete d4rt source code with variable declarations final completeSource = _buildCompleteSource(formula, inputValues); + //print( "$formula"); + //print( "$completeSource" ); // Execute the code using d4rt (no args needed since variables are in source) final result = _interpreter.execute(source: completeSource); @@ -99,7 +101,9 @@ class FormulaEvaluator { /// before the formula's d4rt code String _buildCompleteSource(Formula formula, Map inputValues) { final buffer = StringBuffer(); - + + buffer.writeln("main(){"); + // Add variable declarations for all input variables for (final entry in inputValues.entries) { final varName = entry.key; @@ -121,6 +125,7 @@ class FormulaEvaluator { // Add the formula's d4rt code buffer.write(formula.d4rtCode); + buffer.write("}"); return buffer.toString(); } diff --git a/test/formula_evaluator_test.dart b/test/formula_evaluator_test.dart index 8988853..60625c5 100644 --- a/test/formula_evaluator_test.dart +++ b/test/formula_evaluator_test.dart @@ -20,9 +20,7 @@ void main() { ], output: VariableSpec(name: 'F', magnitude: 'force'), d4rtCode: ''' - main() { return a * m; - } ''', ); @@ -43,9 +41,7 @@ void main() { ], output: VariableSpec(name: 'result', magnitude: 'scalar'), d4rtCode: ''' - main() { return x + y; - } ''', ); @@ -60,9 +56,7 @@ void main() { input: [VariableSpec(name: 'n', magnitude: 'scalar')], output: VariableSpec(name: 'result', magnitude: 'scalar'), d4rtCode: ''' - main() { return n * n; - } ''', ); @@ -80,9 +74,7 @@ void main() { ], output: VariableSpec(name: 'discriminant', magnitude: 'scalar'), d4rtCode: ''' - main() { return b * b - 4 * a * c; - } ''', ); @@ -102,7 +94,7 @@ void main() { VariableSpec(name: 'b', magnitude: 'scalar'), ], output: VariableSpec(name: 'result', magnitude: 'scalar'), - d4rtCode: 'main() { return a + b + z; }', + d4rtCode: 'return a + b + z;', ); final order = evaluator.getInputVariableOrder(formula); @@ -119,10 +111,8 @@ void main() { ], output: VariableSpec(name: 'result', magnitude: 'scalar'), d4rtCode: ''' - main() { // Variables: a=1, y=2, z=3 return a * 100 + y * 10 + z; - } ''', ); @@ -142,7 +132,7 @@ void main() { VariableSpec(name: 'y', magnitude: 'scalar'), ], output: VariableSpec(name: 'result', magnitude: 'scalar'), - d4rtCode: 'main() { return x + y; }', + d4rtCode: 'return x + y;', ); expect( @@ -172,7 +162,7 @@ void main() { name: 'Test', input: [VariableSpec(name: 'x', magnitude: 'scalar')], output: VariableSpec(name: 'force', magnitude: 'Newton'), - d4rtCode: 'main() { return x; }', + d4rtCode: 'return x;', ); expect(evaluator.getOutputVariableName(formula), 'force'); @@ -185,7 +175,7 @@ void main() { name: 'Test', input: [VariableSpec(name: 'x', magnitude: 'scalar')], output: VariableSpec(name: 'force', magnitude: 'Newton'), - d4rtCode: 'main() { return x; }', + d4rtCode: 'return x;', ); expect(evaluator.getOutputVariableMagnitude(formula), 'Newton'); @@ -197,7 +187,7 @@ void main() { name: 'Valid Formula', input: [VariableSpec(name: 'x', magnitude: 'scalar')], output: VariableSpec(name: 'result', magnitude: 'Newton'), - d4rtCode: 'main() { return x; }', + d4rtCode: 'return x;', ); expect(evaluator.getOutputVariableName(validFormula), 'result'); @@ -212,7 +202,7 @@ void main() { name: 'Integer test', input: [VariableSpec(name: 'n', magnitude: 'count')], output: VariableSpec(name: 'result', magnitude: 'count'), - d4rtCode: 'main() { return n + 1; }', + d4rtCode: 'return n + 1;', ); final result = evaluator.evaluate(formula, {'n': 42}); @@ -224,7 +214,7 @@ void main() { name: 'Double test', input: [VariableSpec(name: 'x', magnitude: 'length')], output: VariableSpec(name: 'result', magnitude: 'area'), - d4rtCode: 'main() { return x * x; }', + d4rtCode: 'return x * x;', ); final result = evaluator.evaluate(formula, {'x': 3.14}); diff --git a/test/pruebas_d4rt_test.dart b/test/pruebas_d4rt_test.dart deleted file mode 100644 index 26ba701..0000000 --- a/test/pruebas_d4rt_test.dart +++ /dev/null @@ -1,7 +0,0 @@ -import 'package:test/test.dart'; - -void main() { - test('calculate', () { - expect(6 * 7, 42); - }); -}