d4t_formulas/test/formula_models_test.dart

104 lines
2.4 KiB
Dart
Raw Normal View History

2025-08-24 10:33:21 +00:00
import 'package:d4rt_formulas/formula_evaluator.dart';
import 'package:test/test.dart';
import 'package:d4rt_formulas/formula_models.dart';
void main() {
2025-08-24 10:33:21 +00:00
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": '''
2025-09-05 16:53:06 +00:00
F = a * m;
2025-08-24 10:33:21 +00:00
'''
};
2025-08-26 14:37:28 +00:00
final formula = Formula.fromSet(setLiteral);
final evaluator = FormulaEvaluator();
2025-08-24 10:33:21 +00:00
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
});
2025-08-26 14:37:28 +00:00
test( 'd4rt parses formula from literal', (){
final literal = """
{
"name": "Newton's second law",
"input": [
{ "name": 'm', "magnitude": 'mass'},
{ "name": 'a', "magnitude": 'acceleration'}
],
"output": { "name": 'F', "magnitude": 'force'},
"d4rtCode": '''
2025-09-05 16:53:06 +00:00
F = a * m;
2025-08-26 14:37:28 +00:00
'''
}
""";
2025-08-26 14:54:35 +00:00
final formula = Formula.fromStringLiteral(literal);
2025-08-26 14:37:28 +00:00
final evaluator = 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
});
2025-08-26 15:17:42 +00:00
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
});
}
2025-08-26 14:37:28 +00:00