Ver código fonte

Add a few new examples

David Peter 2 anos atrás
pai
commit
23598bded5

+ 5 - 0
examples/body_mass_index.nbt

@@ -0,0 +1,5 @@
+unit BMI: Mass / Length^2 = kg / m^2
+
+fn body_mass_index(mass: Mass, height: Length) = mass / height²
+
+assert_eq(body_mass_index(70 kg, 1.75 m), 22.86 BMI, 0.01 BMI)

+ 6 - 0
examples/population_growth.nbt

@@ -0,0 +1,6 @@
+let initial_population = 50_000 people
+let growth_rate: Rate = 2 percent per year
+
+fn predict_population(time: Time) = initial_population × e^(growth_rate time) // round
+
+assert_eq(predict_population(10 years), 61_070 person)

+ 11 - 0
examples/projectile_motion.nbt

@@ -0,0 +1,11 @@
+# https://en.wikipedia.org/wiki/Projectile_motion
+
+let g0 = gravity
+
+fn max_height(v: Speed, θ: Angle) -> Length = v² · sin(θ)^2 / (2 · g0)
+fn max_distance(v: Speed, θ: Angle) -> Length = v² · sin(2 θ) / g0
+fn time_of_flight(v: Speed, θ: Angle) -> Time = 2 v · sin(θ) / g0
+
+assert_eq(max_height(10 m/s, 45 deg),      2.55 m,  1 cm)
+assert_eq(max_distance(10 m/s, 45 deg),   10.20 m,  1 cm)
+assert_eq(time_of_flight(10 m/s, 45 deg),  1.44 s, 10 ms)

+ 14 - 0
examples/servings.nbt

@@ -0,0 +1,14 @@
+@aliases(servings)
+unit serving
+
+fn scale_recipe<D>(quantity: D, original_servings: Serving, desired_servings: Serving) -> D =
+    quantity × desired_servings / original_servings
+
+let milk = 500 ml
+let flour = 250 g
+let original_recipe_servings = 2 servings
+
+let desired_servings = 3 servings
+
+assert_eq(scale_recipe(milk,  original_recipe_servings, desired_servings), 750 ml)
+assert_eq(scale_recipe(flour, original_recipe_servings, desired_servings), 375 g)

+ 3 - 0
modules/core/dimensions.nbt

@@ -45,3 +45,6 @@ dimension Illuminance = LuminousFlux / Area
 dimension Activity = 1 / Time
 dimension AbsorbedDose = Energy / Mass
 dimension EquivalentDose = Energy / Mass
+
+# Other useful names
+dimension Rate = 1 / Time