dart Set literals instead of json
This commit is contained in:
parent
a1fb9057a7
commit
06be580dff
2 changed files with 45 additions and 0 deletions
|
|
@ -65,5 +65,24 @@ class Formula {
|
|||
Object.hash(name, ListEquality().hash(input), output, d4rtCode);
|
||||
|
||||
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 );
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,33 @@
|
|||
import 'dart:convert';
|
||||
|
||||
import 'package:d4rt_formulas/formula_evaluator.dart';
|
||||
import 'package:test/test.dart';
|
||||
import 'package:d4rt_formulas/formula_models.dart';
|
||||
|
||||
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
|
||||
});
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue