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 {
|
Future<void> loadUnits() async {
|
||||||
final unitResources = [
|
final unitResources = [
|
||||||
|
"lib/defaults/units/angle.d4rt.units",
|
||||||
"lib/defaults/units/area.d4rt.units",
|
"lib/defaults/units/area.d4rt.units",
|
||||||
"lib/defaults/units/distance.d4rt.units",
|
"lib/defaults/units/distance.d4rt.units",
|
||||||
"lib/defaults/units/energy.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/pressure.d4rt.units",
|
||||||
"lib/defaults/units/temperature.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/time.d4rt.units",
|
||||||
"lib/defaults/units/angle.d4rt.units",
|
"lib/defaults/units/velocity.d4rt.units",
|
||||||
];
|
];
|
||||||
|
|
||||||
for (final unitRes in unitResources) {
|
for (final unitRes in unitResources) {
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ Where:
|
||||||
{"name": "v", "unit": "meters per second"}, // Initial velocity
|
{"name": "v", "unit": "meters per second"}, // Initial velocity
|
||||||
{"name": "θ", "unit": "degree"} // Launch angle
|
{"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",
|
"d4rtCode": "R = (pow(v, 2) * sin(2 * radians(θ))) / 9.80665",
|
||||||
"tags": ["physics", "kinematics", "projectile"]
|
"tags": ["physics", "kinematics", "projectile"]
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -64,10 +64,10 @@ void main() {
|
||||||
final setLiteral = {
|
final setLiteral = {
|
||||||
"name": "Newton's second law",
|
"name": "Newton's second law",
|
||||||
"input": [
|
"input": [
|
||||||
{"name": 'm', "magnitude": 'mass'},
|
{"name": 'm', "unit": 'kilogram'},
|
||||||
{"name": 'a', "magnitude": 'acceleration'},
|
{"name": 'a', "unit": 'meters per square second'},
|
||||||
],
|
],
|
||||||
"output": {"name": 'F', "magnitude": 'force'},
|
"output": {"name": 'F', "unit": 'newton'},
|
||||||
"d4rtCode": '''
|
"d4rtCode": '''
|
||||||
F = a * m;
|
F = a * m;
|
||||||
''',
|
''',
|
||||||
|
|
@ -89,10 +89,10 @@ void main() {
|
||||||
{
|
{
|
||||||
"name": "Newton's second law",
|
"name": "Newton's second law",
|
||||||
"input": [
|
"input": [
|
||||||
{ "name": 'm', "magnitude": 'mass'},
|
{ "name": 'm', "unit": 'kilogram'},
|
||||||
{ "name": 'a', "magnitude": 'acceleration'}
|
{ "name": 'a', "unit": 'meters per square second'}
|
||||||
],
|
],
|
||||||
"output": { "name": 'F', "magnitude": 'force'},
|
"output": { "name": 'F', "unit": 'newton'},
|
||||||
"d4rtCode": '''
|
"d4rtCode": '''
|
||||||
F = a * m;
|
F = a * m;
|
||||||
'''
|
'''
|
||||||
|
|
@ -110,44 +110,5 @@ void main() {
|
||||||
expect(result, 98.0); // F = m * a = 10 * 9.8 = 98 N
|
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