From e593c997cbd3e36c9792b69add757b11be7f66de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Gonz=C3=A1lez?= Date: Sun, 21 Sep 2025 16:44:48 +0200 Subject: [PATCH] feat: add angle and force units, correct unit references and tests --- lib/defaults/default_corpus.dart | 7 +++-- lib/defaults/formulas.d4rt | 2 +- test/formula_models_test.dart | 51 ++++---------------------------- 3 files changed, 11 insertions(+), 49 deletions(-) diff --git a/lib/defaults/default_corpus.dart b/lib/defaults/default_corpus.dart index 374e2a2..7df8d82 100644 --- a/lib/defaults/default_corpus.dart +++ b/lib/defaults/default_corpus.dart @@ -10,15 +10,16 @@ Future createDefaultCorpus() async{ Future loadUnits() async { final unitResources = [ + "lib/defaults/units/angle.d4rt.units", "lib/defaults/units/area.d4rt.units", "lib/defaults/units/distance.d4rt.units", "lib/defaults/units/energy.d4rt.units", + "lib/defaults/units/force.d4rt.units", + "lib/defaults/units/mass.d4rt.units", "lib/defaults/units/pressure.d4rt.units", "lib/defaults/units/temperature.d4rt.units", - "lib/defaults/units/velocity.d4rt.units", - "lib/defaults/units/mass.d4rt.units", "lib/defaults/units/time.d4rt.units", - "lib/defaults/units/angle.d4rt.units", + "lib/defaults/units/velocity.d4rt.units", ]; for (final unitRes in unitResources) { diff --git a/lib/defaults/formulas.d4rt b/lib/defaults/formulas.d4rt index 2f32507..a028e04 100644 --- a/lib/defaults/formulas.d4rt +++ b/lib/defaults/formulas.d4rt @@ -81,7 +81,7 @@ Where: {"name": "v", "unit": "meters per second"}, // Initial velocity {"name": "θ", "unit": "degree"} // Launch angle ], - "output": {"name": "R", "unit": "m"}, // Horizontal distance + "output": {"name": "R", "unit": "meter"}, // Horizontal distance "d4rtCode": "R = (pow(v, 2) * sin(2 * radians(θ))) / 9.80665", "tags": ["physics", "kinematics", "projectile"] }, diff --git a/test/formula_models_test.dart b/test/formula_models_test.dart index 666c895..bbc79a2 100644 --- a/test/formula_models_test.dart +++ b/test/formula_models_test.dart @@ -64,10 +64,10 @@ void main() { final setLiteral = { "name": "Newton's second law", "input": [ - {"name": 'm', "magnitude": 'mass'}, - {"name": 'a', "magnitude": 'acceleration'}, + {"name": 'm', "unit": 'kilogram'}, + {"name": 'a', "unit": 'meters per square second'}, ], - "output": {"name": 'F', "magnitude": 'force'}, + "output": {"name": 'F', "unit": 'newton'}, "d4rtCode": ''' F = a * m; ''', @@ -89,10 +89,10 @@ void main() { { "name": "Newton's second law", "input": [ - { "name": 'm', "magnitude": 'mass'}, - { "name": 'a', "magnitude": 'acceleration'} + { "name": 'm', "unit": 'kilogram'}, + { "name": 'a', "unit": 'meters per square second'} ], - "output": { "name": 'F', "magnitude": 'force'}, + "output": { "name": 'F', "unit": 'newton'}, "d4rtCode": ''' F = a * m; ''' @@ -110,44 +110,5 @@ void main() { expect(result, 98.0); // F = m * a = 10 * 9.8 = 98 N }); - test('d4rt parses formula from list literal', () { - final literal = """ - [ - { - "name": "Newton's second law", - "input": [ - { "name": 'm', "magnitude": 'mass'}, - { "name": 'a', "magnitude": 'acceleration'} - ], - "output": { "name": 'F', "magnitude": 'force'}, - "d4rtCode": ''' - F = a * m; - ''' - }, - { - "name": "Newton's second law, again", - "input": [ - { "name": 'mass', "magnitude": 'mass'}, - { "name": 'acc', "magnitude": 'acceleration'} - ], - "output": { "name": 'force', "magnitude": 'force'}, - "d4rtCode": ''' - force = mass * acc; - ''' - } - ] - """; - final formulas = Formula.fromArrayStringLiteral(literal); - final evaluator = FormulaEvaluator(); - - final formula = formulas[0]; - - final result = evaluator.evaluate(formula, { - 'm': 10.0, // 10 kg - 'a': 9.8, // 9.8 m/s² - }); - - expect(result, 98.0); // F = m * a = 10 * 9.8 = 98 N - }); }