feat: add angle and force units, correct unit references and tests
This commit is contained in:
parent
d3dce8794c
commit
e593c997cb
3 changed files with 11 additions and 49 deletions
|
|
@ -10,15 +10,16 @@ Future<Corpus> createDefaultCorpus() async{
|
|||
|
||||
Future<void> 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) {
|
||||
|
|
|
|||
|
|
@ -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"]
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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
|
||||
});
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue