dart Set literals instead of json

This commit is contained in:
Álvaro González 2025-08-24 12:33:21 +02:00
parent a1fb9057a7
commit 06be580dff
2 changed files with 45 additions and 0 deletions

View file

@ -65,5 +65,24 @@ class Formula {
Object.hash(name, ListEquality().hash(input), output, d4rtCode); Object.hash(name, ListEquality().hash(input), output, d4rtCode);
List<String> inputVarNames() => input.map( (v) => v.name ).toList(growable: false); List<String> inputVarNames() => input.map( (v) => v.name ).toList(growable: false);
factory Formula.fromSetLiteral(Map<String, Object> set ) {
VariableSpec parseVar(Map<String, String> varSpec ){
String name = varSpec.get("name");
String magnitude = varSpec.get("magnitude");
return VariableSpec(name: name, magnitude: magnitude);
}
String name = set.get("name");
List<Map<String,String>> inputSet = set.get("input");
List<VariableSpec> input = inputSet.map(parseVar).toList(growable:false);
Map<String,String> outputSet = set.get("output");
VariableSpec output = parseVar(outputSet);
String d4rtCode = set.get("d4rtCode");
return new Formula(name:name, input:input, output:output, d4rtCode:d4rtCode );
}
} }

View file

@ -1,7 +1,33 @@
import 'dart:convert'; import 'dart:convert';
import 'package:d4rt_formulas/formula_evaluator.dart';
import 'package:test/test.dart'; import 'package:test/test.dart';
import 'package:d4rt_formulas/formula_models.dart'; import 'package:d4rt_formulas/formula_models.dart';
void main() { void main() {
test('Parses Newton\'s second law formula from set literal', () {
final setLiteral = {
"name": "Newton's second law",
"input": [
{ "name": 'm', "magnitude": 'mass'},
{ "name": 'a', "magnitude": 'acceleration'}
],
"output": { "name": 'F', "magnitude": 'force'},
"d4rtCode": '''
return a * m;
'''
};
final formula = Formula.fromSetLiteral(setLiteral);
final evaluator = new FormulaEvaluator();
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
});
} }