-
Notifications
You must be signed in to change notification settings - Fork 122
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'master' into issue-252-3
- Loading branch information
Showing
10 changed files
with
467 additions
and
4 deletions.
There are no files selected for viewing
49 changes: 49 additions & 0 deletions
49
shared/src/main/scala/squants/electro/AreaElectricChargeDensity.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package squants.electro | ||
|
||
import squants.space.Meters | ||
import squants.{AbstractQuantityNumeric, Area, Dimension, Length, PrimaryUnit, Quantity, SiUnit, UnitConverter, UnitOfMeasure} | ||
|
||
/** | ||
* | ||
* @author Nicolas Vinuesa | ||
* @since 1.4 | ||
* | ||
* @param value Double | ||
*/ | ||
final class AreaElectricChargeDensity private (val value: Double, val unit: AreaElectricChargeDensityUnit) | ||
extends Quantity[AreaElectricChargeDensity] { | ||
|
||
def dimension = AreaElectricChargeDensity | ||
|
||
def *(that: Area): ElectricCharge = Coulombs(this.toCoulombsSquareMeters * that.toSquareMeters) | ||
def *(that: Length): LinearElectricChargeDensity = CoulombsPerMeter(this.toCoulombsSquareMeters * that.toMeters) | ||
|
||
def toCoulombsSquareMeters = to(CoulombsPerSquareMeter) | ||
} | ||
|
||
object AreaElectricChargeDensity extends Dimension[AreaElectricChargeDensity] { | ||
private[electro] def apply[A](n: A, unit: AreaElectricChargeDensityUnit)(implicit num: Numeric[A]) = new AreaElectricChargeDensity(num.toDouble(n), unit) | ||
def apply = parse _ | ||
def name = "AreaElectricChargeDensity" | ||
def primaryUnit = CoulombsPerSquareMeter | ||
def siUnit = CoulombsPerSquareMeter | ||
def units = Set(CoulombsPerSquareMeter) | ||
} | ||
|
||
trait AreaElectricChargeDensityUnit extends UnitOfMeasure[AreaElectricChargeDensity] with UnitConverter { | ||
def apply[A](n: A)(implicit num: Numeric[A]) = AreaElectricChargeDensity(n, this) | ||
} | ||
|
||
object CoulombsPerSquareMeter extends AreaElectricChargeDensityUnit with PrimaryUnit with SiUnit { | ||
val symbol = Coulombs.symbol + "/" + Meters.symbol + "²" | ||
} | ||
|
||
object AreaElectricChargeDensityConversions { | ||
lazy val coulombPerSquareMeter = CoulombsPerSquareMeter(1) | ||
|
||
implicit class AreaElectricChargeDensityConversions[A](n: A)(implicit num: Numeric[A]) { | ||
def coulombsPerSquareMeter = CoulombsPerSquareMeter(n) | ||
} | ||
|
||
implicit object AreaElectricChargeDensityNumeric extends AbstractQuantityNumeric[AreaElectricChargeDensity](AreaElectricChargeDensity.primaryUnit) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 changes: 50 additions & 0 deletions
50
shared/src/main/scala/squants/electro/ElectricChargeDensity.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
package squants.electro | ||
|
||
import squants.space.{Meters, Volume} | ||
import squants.{AbstractQuantityNumeric, Area, Dimension, Length, PrimaryUnit, Quantity, SiUnit, UnitConverter, UnitOfMeasure} | ||
|
||
/** | ||
* | ||
* @author Nicolas Vinuesa | ||
* @since 1.4 | ||
* | ||
* @param value Double | ||
*/ | ||
final class ElectricChargeDensity private (val value: Double, val unit: ElectricChargeDensityUnit) | ||
extends Quantity[ElectricChargeDensity] { | ||
|
||
def dimension = ElectricChargeDensity | ||
|
||
def *(that: Volume): ElectricCharge = Coulombs(this.toCoulombsCubicMeters * that.toCubicMeters) | ||
def *(that: Area): LinearElectricChargeDensity = CoulombsPerMeter(this.toCoulombsCubicMeters * that.toSquareMeters) | ||
def *(that: Length): AreaElectricChargeDensity = CoulombsPerSquareMeter(this.toCoulombsCubicMeters * that.toMeters) | ||
|
||
def toCoulombsCubicMeters = to(CoulombsPerCubicMeter) | ||
} | ||
|
||
object ElectricChargeDensity extends Dimension[ElectricChargeDensity] { | ||
private[electro] def apply[A](n: A, unit: ElectricChargeDensityUnit)(implicit num: Numeric[A]) = new ElectricChargeDensity(num.toDouble(n), unit) | ||
def apply = parse _ | ||
def name = "ElectricChargeDensity" | ||
def primaryUnit = CoulombsPerCubicMeter | ||
def siUnit = CoulombsPerCubicMeter | ||
def units = Set(CoulombsPerCubicMeter) | ||
} | ||
|
||
trait ElectricChargeDensityUnit extends UnitOfMeasure[ElectricChargeDensity] with UnitConverter { | ||
def apply[A](n: A)(implicit num: Numeric[A]) = ElectricChargeDensity(n, this) | ||
} | ||
|
||
object CoulombsPerCubicMeter extends ElectricChargeDensityUnit with PrimaryUnit with SiUnit { | ||
val symbol = Coulombs.symbol + "/" + Meters.symbol + "³" | ||
} | ||
|
||
object ElectricChargeDensityConversions { | ||
lazy val coulombPerCubicMeter = CoulombsPerCubicMeter(1) | ||
|
||
implicit class ElectricChargeDensityConversions[A](n: A)(implicit num: Numeric[A]) { | ||
def coulombsPerCubicMeter = CoulombsPerCubicMeter(n) | ||
} | ||
|
||
implicit object ElectricChargeDensityNumeric extends AbstractQuantityNumeric[ElectricChargeDensity](ElectricChargeDensity.primaryUnit) | ||
} |
48 changes: 48 additions & 0 deletions
48
shared/src/main/scala/squants/electro/ElectricChargeMassRatio.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,48 @@ | ||
package squants.electro | ||
|
||
import squants.mass.Kilograms | ||
import squants.{AbstractQuantityNumeric, Dimension, Mass, PrimaryUnit, Quantity, SiUnit, UnitConverter, UnitOfMeasure} | ||
|
||
/** | ||
* | ||
* @author Nicolas Vinuesa | ||
* @since 1.4 | ||
* | ||
* @param value Double | ||
*/ | ||
final class ElectricChargeMassRatio private (val value: Double, val unit: ElectricChargeMassRatioUnit) | ||
extends Quantity[ElectricChargeMassRatio] { | ||
|
||
def dimension = ElectricChargeMassRatio | ||
|
||
def *(that: Mass): ElectricCharge = Coulombs(this.toCoulombsKilograms * that.toKilograms) | ||
|
||
def toCoulombsKilograms = to(CoulombsPerKilogram) | ||
} | ||
|
||
object ElectricChargeMassRatio extends Dimension[ElectricChargeMassRatio] { | ||
private[electro] def apply[A](n: A, unit: ElectricChargeMassRatioUnit)(implicit num: Numeric[A]) = new ElectricChargeMassRatio(num.toDouble(n), unit) | ||
def apply = parse _ | ||
def name = "ElectricChargeMassRatio" | ||
def primaryUnit = CoulombsPerKilogram | ||
def siUnit = CoulombsPerKilogram | ||
def units = Set(CoulombsPerKilogram) | ||
} | ||
|
||
trait ElectricChargeMassRatioUnit extends UnitOfMeasure[ElectricChargeMassRatio] with UnitConverter { | ||
def apply[A](n: A)(implicit num: Numeric[A]) = ElectricChargeMassRatio(n, this) | ||
} | ||
|
||
object CoulombsPerKilogram extends ElectricChargeMassRatioUnit with PrimaryUnit with SiUnit { | ||
val symbol = Coulombs.symbol + "/" + Kilograms.symbol | ||
} | ||
|
||
object ElectricChargeMassRatioConversions { | ||
lazy val coulombPerKilogram = CoulombsPerKilogram(1) | ||
|
||
implicit class ElectricChargeMassRatioConversions[A](n: A)(implicit num: Numeric[A]) { | ||
def coulombsPerKilogram = CoulombsPerKilogram(n) | ||
} | ||
|
||
implicit object ElectricChargeMassRatioNumeric extends AbstractQuantityNumeric[ElectricChargeMassRatio](ElectricChargeMassRatio.primaryUnit) | ||
} |
49 changes: 49 additions & 0 deletions
49
shared/src/main/scala/squants/electro/LinearElectricChargeDensity.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
package squants.electro | ||
|
||
import squants.space.Meters | ||
import squants.{AbstractQuantityNumeric, Dimension, Length, PrimaryUnit, Quantity, SiUnit, UnitConverter, UnitOfMeasure} | ||
|
||
/** | ||
* | ||
* @author Nicolas Vinuesa | ||
* @since 1.4 | ||
* | ||
* @param value Double | ||
*/ | ||
final class LinearElectricChargeDensity private (val value: Double, val unit: LinearElectricChargeDensityUnit) | ||
extends Quantity[LinearElectricChargeDensity] { | ||
|
||
def dimension = LinearElectricChargeDensity | ||
|
||
def *(that: Length): ElectricCharge = Coulombs(this.toCoulombsMeters * that.toMeters) | ||
def /(that: Length): AreaElectricChargeDensity = CoulombsPerSquareMeter(this.toCoulombsMeters / that.toMeters) | ||
|
||
def toCoulombsMeters = to(CoulombsPerMeter) | ||
} | ||
|
||
object LinearElectricChargeDensity extends Dimension[LinearElectricChargeDensity] { | ||
private[electro] def apply[A](n: A, unit: LinearElectricChargeDensityUnit)(implicit num: Numeric[A]) = new LinearElectricChargeDensity(num.toDouble(n), unit) | ||
def apply = parse _ | ||
def name = "LinearElectricChargeDensity" | ||
def primaryUnit = CoulombsPerMeter | ||
def siUnit = CoulombsPerMeter | ||
def units = Set(CoulombsPerMeter) | ||
} | ||
|
||
trait LinearElectricChargeDensityUnit extends UnitOfMeasure[LinearElectricChargeDensity] with UnitConverter { | ||
def apply[A](n: A)(implicit num: Numeric[A]) = LinearElectricChargeDensity(n, this) | ||
} | ||
|
||
object CoulombsPerMeter extends LinearElectricChargeDensityUnit with PrimaryUnit with SiUnit { | ||
val symbol = Coulombs.symbol + "/" + Meters.symbol | ||
} | ||
|
||
object LinearElectricChargeDensityConversions { | ||
lazy val coulombPerMeter = CoulombsPerMeter(1) | ||
|
||
implicit class LinearElectricChargeDensityConversions[A](n: A)(implicit num: Numeric[A]) { | ||
def coulombsPerMeter = CoulombsPerMeter(n) | ||
} | ||
|
||
implicit object LinearElectricChargeDensityNumeric extends AbstractQuantityNumeric[LinearElectricChargeDensity](LinearElectricChargeDensity.primaryUnit) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
65 changes: 65 additions & 0 deletions
65
shared/src/test/scala/squants/electro/AreaElectricChargeDensitySpec.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
package squants.electro | ||
|
||
import org.scalatest.{FlatSpec, Matchers} | ||
import squants.QuantityParseException | ||
import squants.space.{Meters, SquareMeters} | ||
|
||
/** | ||
* | ||
* @author Nicolas Vinuesa | ||
* @since 1.4 | ||
* | ||
*/ | ||
class AreaElectricChargeDensitySpec extends FlatSpec with Matchers { | ||
|
||
behavior of "AreaElectricChargeDensity and its Units of Measure" | ||
|
||
it should "create values using UOM factories" in { | ||
CoulombsPerSquareMeter(1).toCoulombsSquareMeters should be(1) | ||
} | ||
|
||
it should "create values from properly formatted Strings" in { | ||
AreaElectricChargeDensity("10.22 C/m²").get should be(CoulombsPerSquareMeter(10.22)) | ||
AreaElectricChargeDensity("10.22 zz").failed.get should be(QuantityParseException("Unable to parse AreaElectricChargeDensity", "10.22 zz")) | ||
AreaElectricChargeDensity("zz C/m²").failed.get should be(QuantityParseException("Unable to parse AreaElectricChargeDensity", "zz C/m²")) | ||
} | ||
|
||
it should "properly convert to all supported Units of Measure" in { | ||
val x = CoulombsPerSquareMeter(10) | ||
x.toCoulombsSquareMeters should be(10.0) | ||
} | ||
|
||
it should "return properly formatted strings for all supported Units of Measure" in { | ||
CoulombsPerSquareMeter(1).toString(CoulombsPerSquareMeter) should be("1.0 C/m²") | ||
} | ||
|
||
it should "return ElectricCharge when multiplied by Area" in { | ||
CoulombsPerSquareMeter(1) * SquareMeters(1) should be(Coulombs(1)) | ||
} | ||
|
||
it should "return LinearElectricChargeDensity when multiplied by Length" in { | ||
CoulombsPerSquareMeter(1) * Meters(1) should be(CoulombsPerMeter(1)) | ||
} | ||
|
||
behavior of "AreaElectricChargeDensityConversions" | ||
|
||
it should "provide aliases for single unit values" in { | ||
import AreaElectricChargeDensityConversions._ | ||
|
||
coulombPerSquareMeter should be(CoulombsPerSquareMeter(1)) | ||
} | ||
|
||
it should "provide implicit conversion from Double" in { | ||
import AreaElectricChargeDensityConversions._ | ||
|
||
val d = 10.22 | ||
d.coulombsPerSquareMeter should be(CoulombsPerSquareMeter(d)) | ||
} | ||
|
||
it should "provide Numeric support" in { | ||
import AreaElectricChargeDensityConversions.AreaElectricChargeDensityNumeric | ||
|
||
val rs = List(CoulombsPerSquareMeter(100), CoulombsPerSquareMeter(10)) | ||
rs.sum should be(CoulombsPerSquareMeter(110)) | ||
} | ||
} |
69 changes: 69 additions & 0 deletions
69
shared/src/test/scala/squants/electro/ElectricChargeDensitySpec.scala
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,69 @@ | ||
package squants.electro | ||
|
||
import org.scalatest.{FlatSpec, Matchers} | ||
import squants.QuantityParseException | ||
import squants.space.{CubicMeters, Meters, SquareMeters} | ||
|
||
/** | ||
* | ||
* @author Nicolas Vinuesa | ||
* @since 1.4 | ||
* | ||
*/ | ||
class ElectricChargeDensitySpec extends FlatSpec with Matchers { | ||
|
||
behavior of "ElectricChargeDensity and its Units of Measure" | ||
|
||
it should "create values using UOM factories" in { | ||
CoulombsPerCubicMeter(1).toCoulombsCubicMeters should be(1) | ||
} | ||
|
||
it should "create values from properly formatted Strings" in { | ||
ElectricChargeDensity("10.22 C/m³").get should be(CoulombsPerCubicMeter(10.22)) | ||
ElectricChargeDensity("10.22 zz").failed.get should be(QuantityParseException("Unable to parse ElectricChargeDensity", "10.22 zz")) | ||
ElectricChargeDensity("zz C/m³").failed.get should be(QuantityParseException("Unable to parse ElectricChargeDensity", "zz C/m³")) | ||
} | ||
|
||
it should "properly convert to all supported Units of Measure" in { | ||
val x = CoulombsPerCubicMeter(10) | ||
x.toCoulombsCubicMeters should be(10.0) | ||
} | ||
|
||
it should "return properly formatted strings for all supported Units of Measure" in { | ||
CoulombsPerCubicMeter(1).toString(CoulombsPerCubicMeter) should be("1.0 C/m³") | ||
} | ||
|
||
it should "return ElectricCharge when multiplied by Volume" in { | ||
CoulombsPerCubicMeter(1) * CubicMeters(1) should be(Coulombs(1)) | ||
} | ||
|
||
it should "return LinearElectricChargeDensity when multiplied by Area" in { | ||
CoulombsPerCubicMeter(1) * SquareMeters(1) should be(CoulombsPerMeter(1)) | ||
} | ||
|
||
it should "return AreaElectricChargeDensity when multiplied by Length" in { | ||
CoulombsPerCubicMeter(1) * Meters(1) should be(CoulombsPerSquareMeter(1)) | ||
} | ||
|
||
behavior of "ElectricChargeDensityConversions" | ||
|
||
it should "provide aliases for single unit values" in { | ||
import ElectricChargeDensityConversions._ | ||
|
||
coulombPerCubicMeter should be(CoulombsPerCubicMeter(1)) | ||
} | ||
|
||
it should "provide implicit conversion from Double" in { | ||
import ElectricChargeDensityConversions._ | ||
|
||
val d = 10.22 | ||
d.coulombsPerCubicMeter should be(CoulombsPerCubicMeter(d)) | ||
} | ||
|
||
it should "provide Numeric support" in { | ||
import ElectricChargeDensityConversions.ElectricChargeDensityNumeric | ||
|
||
val rs = List(CoulombsPerCubicMeter(100), CoulombsPerCubicMeter(10)) | ||
rs.sum should be(CoulombsPerCubicMeter(110)) | ||
} | ||
} |
Oops, something went wrong.