Skip to content

Commit

Permalink
wip: spin-speed conversion
Browse files Browse the repository at this point in the history
  • Loading branch information
knokko committed Sep 8, 2024
1 parent 3511545 commit 67d846c
Show file tree
Hide file tree
Showing 23 changed files with 196 additions and 1 deletion.
3 changes: 3 additions & 0 deletions example-configs/balls2d.gddl
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@
square = "SquareSpeed",
displacement = "Displacement",
acceleration = "Acceleration",
spin = "Spin",
mass = "Mass",
momentum = "Momentum",
createNumberExtensions = true
Expand All @@ -119,6 +120,8 @@
oneUnit = "Degrees per second",
displayUnit = "Degrees per second",
angle = "Angle",
speed = "Speed",
displacement = "Displacement",
acceleration = "AngularAcceleration",
createNumberExtensions = true
}]
Expand Down
10 changes: 10 additions & 0 deletions example-configs/int16/fixed-units.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,19 @@
"displayUnit": "Kilometers per second",
"square": "SquareSpeed",
"displacement": "Displacement",
"spin": "Spin",
"momentum": "Momentum",
"createNumberExtensions": true
}],
"spins": [{
"className": "Spin",
"floatType": "Double",
"oneUnit": "Radians per second",
"displayUnit": "Radians per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": false
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "Float",
Expand Down
9 changes: 9 additions & 0 deletions example-configs/int32/fixed-units.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,19 @@
"oneUnit": "Kilometers per hour",
"displayUnit": "Kilometers per hour",
"displacement": "Displacement",
"spin": "Spin",
"mass": "Mass",
"momentum": "Momentum",
"createNumberExtensions": false
}],
"spins": [{
"className": "Spin",
"floatType": "Double",
"oneUnit": "Degrees per second",
"displayUnit": "Degrees per second",
"displacement": "Displacement",
"createNumberExtensions": true
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "Float",
Expand Down
9 changes: 9 additions & 0 deletions example-configs/int32/float-connections.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,15 @@
"momentum": "Momentum",
"createNumberExtensions": true
}],
"spins": [{
"className": "Spin",
"floatType": "Float",
"oneUnit": "Degrees per second",
"displayUnit": "Degrees per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": true
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "Double",
Expand Down
10 changes: 10 additions & 0 deletions example-configs/int64/fixed-units.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,20 @@
"displayUnit": "Kilometers per hour",
"square": "SquareSpeed",
"displacement": "Displacement",
"spin": "Spin",
"mass": "Mass",
"momentum": "Momentum",
"createNumberExtensions": true
}],
"spins": [{
"className": "Spin",
"floatType": "Float",
"oneUnit": "Radians per second",
"displayUnit": "Radians per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": false
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "Float",
Expand Down
10 changes: 10 additions & 0 deletions example-configs/int64/float-connections.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,20 @@
"square": "SquareSpeed",
"displacement": "Displacement",
"acceleration": "Acceleration",
"spin": "Spin",
"mass": "Mass",
"momentum": "Momentum",
"createNumberExtensions": true
}],
"spins": [{
"className": "Spin",
"floatType": "Float",
"oneUnit": "Degrees per second",
"displayUnit": "Degrees per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": true
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "%FLOAT_TYPE%",
Expand Down
10 changes: 10 additions & 0 deletions example-configs/int8/fixed-units.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,20 @@
"displayUnit": "Meters per second",
"square": "SquareSpeed",
"displacement": "Displacement",
"spin": "Spin",
"mass": "Mass",
"momentum": "Momentum",
"createNumberExtensions": false
}],
"spins": [{
"className": "Spin",
"floatType": "Float",
"oneUnit": "Radians per second",
"displayUnit": "Degrees per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": false
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "Float",
Expand Down
10 changes: 10 additions & 0 deletions example-configs/int8/float-connections.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,20 @@
"square": "SquareSpeed",
"displacement": "Displacement",
"acceleration": "Acceleration",
"spin": "Spin",
"mass": "Mass",
"momentum": "Momentum",
"createNumberExtensions": true
}],
"spins": [{
"className": "Spin",
"floatType": "%FLOAT_TYPE%",
"oneUnit": "Degrees per second",
"displayUnit": "Radians per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": true
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "Float",
Expand Down
8 changes: 8 additions & 0 deletions example-configs/uint16/fixed-units.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,17 @@
"displayUnit": "Kilometers per hour",
"square": "SquareSpeed",
"displacement": "Displacement",
"spin": "Spin",
"mass": "Mass",
"createNumberExtensions": false
}],
"spins": [{
"className": "Spin",
"floatType": "Double",
"oneUnit": "Radians per second",
"displayUnit": "Radians per second",
"createNumberExtensions": false
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "Float",
Expand Down
8 changes: 8 additions & 0 deletions example-configs/uint16/float-connections.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,14 @@
"mass": "Mass",
"createNumberExtensions": true
}],
"spins": [{
"className": "Spin",
"floatType": "Float",
"oneUnit": "Radians per second",
"displayUnit": "Degrees per second",
"speed": "Speed",
"createNumberExtensions": false
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "%FLOAT_TYPE%",
Expand Down
9 changes: 9 additions & 0 deletions example-configs/uint32/float-connections.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,22 @@
"speed": "Speed",
"createNumberExtensions": false
}],
"spins": [{
"className": "Spin",
"floatType": "Double",
"oneUnit": "Degrees per second",
"displayUnit": "Radians per second",
"displacement": "Displacement",
"createNumberExtensions": true
}],
"speed": [{
"className": "Speed",
"floatType": "%FLOAT_TYPE%",
"oneUnit": "Kilometers per hour",
"displayUnit": "Miles per hour",
"square": "SquareSpeed",
"displacement": "Displacement",
"spin": "Spin",
"acceleration": "Acceleration",
"createNumberExtensions": false
}],
Expand Down
10 changes: 10 additions & 0 deletions example-configs/uint64/fixed-units.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,10 +23,20 @@
"displayUnit": "Miles per hour",
"square": "SquareSpeed",
"displacement": "Displacement",
"spin": "Spin",
"mass": "Mass",
"momentum": "Momentum",
"createNumberExtensions": true
}],
"spins": [{
"className": "Spin",
"floatType": "Float",
"oneUnit": "Degrees per second",
"displayUnit": "Radians per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": true
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "Double",
Expand Down
10 changes: 10 additions & 0 deletions example-configs/uint64/float-connections.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,20 @@
"square": "SquareSpeed",
"displacement": "Displacement",
"acceleration": "Acceleration",
"spin": "Spin",
"mass": "Mass",
"momentum": "Momentum",
"createNumberExtensions": false
}],
"spins": [{
"className": "Spin",
"floatType": "Float",
"oneUnit": "Radians per second",
"displayUnit": "Degrees per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": true
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "%FLOAT_TYPE%",
Expand Down
10 changes: 10 additions & 0 deletions example-configs/uint8/fixed-units.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,20 @@
"displayUnit": "Meters per second",
"square": "SquareSpeed",
"displacement": "Displacement",
"spin": "Spin",
"mass": "Mass",
"momentum": "Momentum",
"createNumberExtensions": false
}],
"spins": [{
"className": "Spin",
"floatType": "Double",
"oneUnit": "Degrees per second",
"displayUnit": "Radians per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": false
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "Double",
Expand Down
10 changes: 10 additions & 0 deletions example-configs/uint8/float-connections.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,20 @@
"square": "SquareSpeed",
"displacement": "Displacement",
"acceleration": "Acceleration",
"spin": "Spin",
"mass": "Mass",
"momentum": "Momentum",
"createNumberExtensions": false
}],
"spins": [{
"className": "Spin",
"floatType": "Float",
"oneUnit": "Radians per second",
"displayUnit": "Radians per second",
"speed": "Speed",
"displacement": "Displacement",
"createNumberExtensions": true
}],
"squareSpeed": [{
"className": "SquareSpeed",
"floatType": "%FLOAT_TYPE%",
Expand Down
3 changes: 3 additions & 0 deletions src/main/kotlin/fixie/generator/module/FixieModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -107,13 +107,16 @@ class FixieModule(
checkPresent(speed, numbers) { it.number }
resolve(speed, momenta, { it.momentumClassName }) { speed, momentum -> speed.momentum = momentum}
resolve(speed, masses, { it.massClassName }) { speed, mass -> speed.mass = mass }
resolve(speed, spins, { it.spinClassName }) { speed, spin -> speed.spin = spin }
resolve(speed, displacements, { it.displacementClassName }) { speed, displacement ->
speed.displacement = displacement
}
resolve(speed, accelerations, { it.accelerationClassName }) { speed, acceleration ->
speed.acceleration = acceleration
}
resolve(speed, squareSpeed, { it.squareClassName }) { speed, square -> speed.square = square }
resolve(spins, displacements, { it.displacementClassName }) { spin, displacement -> spin.displacement = displacement }
resolve(spins, speed, { it.speedClassName }) { spin, speed -> spin.speed = speed }
resolve(spins, angularAccelerations, { it.accelerationClassName }) { spin, acceleration -> spin.acceleration = acceleration }
resolve(spins, angles, { it.angleClassName }) { spin, angle -> spin.angle = angle }
resolve(angularAccelerations, spins, { it.spinClassName }) { acceleration, spin -> acceleration.spin = spin }
Expand Down
3 changes: 3 additions & 0 deletions src/main/kotlin/fixie/generator/parser/ModuleParser.kt
Original file line number Diff line number Diff line change
Expand Up @@ -280,6 +280,7 @@ private class ModuleParser(
squareClassName = optionalString(properties, "square", path),
displacementClassName = optionalString(properties, "displacement", path),
accelerationClassName = optionalString(properties, "acceleration", path),
spinClassName = optionalString(properties, "spin", path),
massClassName = optionalString(properties, "mass", path),
momentumClassName = optionalString(properties, "momentum", path),
createNumberExtensions = requiredBoolean(properties, "createNumberExtensions", path)
Expand All @@ -299,6 +300,8 @@ private class ModuleParser(
displayUnit = requiredUnit(properties, "displayUnit", path, SpinUnit.entries),
angleClassName = optionalString(properties, "angle", path),
accelerationClassName = optionalString(properties, "acceleration", path),
speedClassName = optionalString(properties, "speed", path),
displacementClassName = optionalString(properties, "displacement", path),
createNumberExtensions = requiredBoolean(properties, "createNumberExtensions", path)
)

Expand Down
3 changes: 3 additions & 0 deletions src/main/kotlin/fixie/generator/speed/SpeedClass.kt
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import fixie.generator.number.NumberClass
import fixie.generator.quantity.FixedQuantityClass.Companion.determineRawValue
import fixie.generator.quantity.HybridQuantityClass
import fixie.generator.quantity.QuantityUnit
import fixie.generator.spin.SpinClass
import java.math.BigDecimal
import java.math.BigInteger

Expand All @@ -21,6 +22,7 @@ class SpeedClass(
val squareClassName: String?,
val displacementClassName: String?,
val accelerationClassName: String?,
val spinClassName: String?,
val massClassName: String?,
val momentumClassName: String?,
createNumberExtensions: Boolean
Expand All @@ -29,6 +31,7 @@ class SpeedClass(
var square: SquareSpeedClass? = null
var displacement: DisplacementClass? = null
var acceleration: AccelerationClass? = null
var spin: SpinClass? = null
var mass: MassClass? = null
var momentum: MomentumClass? = null

Expand Down
7 changes: 7 additions & 0 deletions src/main/kotlin/fixie/generator/speed/SpeedClassGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,13 @@ internal class SpeedClassGenerator(
"\toperator fun times(right: Duration) = toDouble(SpeedUnit.METERS_PER_SECOND) * " +
"${quantity.displacementClassName}.METER * right.toDouble(DurationUnit.SECONDS)"
)

if (quantity.spin != null) {
writer.println()
writer.println("\tfun toSpin(radius: ${quantity.displacementClassName}) = " +
"${quantity.spinClassName}.RADIANS_PER_SECOND * toDouble(SpeedUnit.METERS_PER_SECOND) / " +
"radius.toDouble(DistanceUnit.METER)")
}
}

quantity.acceleration?.let { acceleration ->
Expand Down
7 changes: 6 additions & 1 deletion src/main/kotlin/fixie/generator/speed/SpeedTestsGenerator.kt
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,9 @@ internal class SpeedTestsGenerator(
arrayOf("kotlin.time.Duration.Companion.hours")
} else {
emptyArray<String>()
}
} + if (quantity.spin != null) {
arrayOf("kotlin.math.PI")
} else { emptyArray<String>() }

override fun generateToStringBody() {
for ((unit, oneValue) in quantity.computeSupportedUnits()) {
Expand Down Expand Up @@ -80,6 +82,9 @@ internal class SpeedTestsGenerator(
if (shouldTestHours()) {
writer.println("\t\tassertEquals(20.0, (10 * ${quantity.className}.KILOMETERS_PER_HOUR * 2.hours).toDouble(DistanceUnit.KILOMETER), $margin)")
}
if (quantity.spin != null) {
writer.println("\t\tassertEquals(90.0, (${quantity.className}.METERS_PER_SECOND * 10 * PI).toSpin(20 * ${quantity.displacementClassName}.METER).toDouble(SpinUnit.DEGREES_PER_SECOND), ${margin * 4})")
}
}
if (quantity.acceleration != null) {
writer.println("\t\tassertEquals(0.5, (${quantity.className}.METERS_PER_SECOND / 2.seconds).toDouble(), ${speedMargin / 40})")
Expand Down
Loading

0 comments on commit 67d846c

Please sign in to comment.