From 539568c5b5b8f545d6f7df68123b57053a0c84c3 Mon Sep 17 00:00:00 2001 From: Kasper Date: Sat, 11 Jan 2020 04:46:43 +0100 Subject: [PATCH] Added unit of power --- src/lexer.rs | 16 ++++++++++++++++ src/units.rs | 23 +++++++++++++++++++++++ 2 files changed, 39 insertions(+) diff --git a/src/lexer.rs b/src/lexer.rs index ff07516..cc1fd4d 100644 --- a/src/lexer.rs +++ b/src/lexer.rs @@ -227,6 +227,16 @@ pub fn lex(input: &str) -> Result { "twh" | "terawatt hour" | "terawatt hours" => tokens.push(Token::Unit(TerawattHour)), "pwh" | "petawatt hour" | "petawatt hours" => tokens.push(Token::Unit(PetawattHour)), + "milliwatt" | "milliwatts" => tokens.push(Token::Unit(Milliwatt)), + "w" | "watt" | "watts" => tokens.push(Token::Unit(Watt)), + "kw" | "kilowatt" | "kilowatts" => tokens.push(Token::Unit(Kilowatt)), + "mw" | "megawatt" | "megawatts" => tokens.push(Token::Unit(Megawatt)), + "gw" | "gigawatt" | "gigawatts" => tokens.push(Token::Unit(Gigawatt)), + "tw" | "terawatt" | "terawatts" => tokens.push(Token::Unit(Terawatt)), + "pw" | "petawatt" | "petawatts" => tokens.push(Token::Unit(Petawatt)), + "hp" | "hps" | "horsepower" | "horsepowers" => tokens.push(Token::Unit(Horsepower)), + "mhp" | "hpm" | "metric hp" | "metric hps" | "metric horsepower" | "metric horsepowers" => tokens.push(Token::Unit(MetricHorsepower)), + "kph" | "kmh" => tokens.push(Token::Unit(KilometersPerHour)), "mps" => tokens.push(Token::Unit(MetersPerSecond)), "mph" => tokens.push(Token::Unit(MilesPerHour)), @@ -348,6 +358,12 @@ pub fn lex(input: &str) -> Result { (Token::Unit(Foot), Token::Per, Token::Unit(Second)) => { tokens[token_index-2] = Token::Unit(FeetPerSecond); }, + (Token::Unit(BritishThermalUnit), Token::Per, Token::Unit(Minute)) => { + tokens[token_index-2] = Token::Unit(BritishThermalUnitsPerMinute); + }, + (Token::Unit(BritishThermalUnit), Token::Per, Token::Unit(Hour)) => { + tokens[token_index-2] = Token::Unit(BritishThermalUnitsPerHour); + }, _ => { replaced = false; }, diff --git a/src/units.rs b/src/units.rs index b0b00be..64eafcf 100644 --- a/src/units.rs +++ b/src/units.rs @@ -10,6 +10,7 @@ pub enum UnitType { Mass, Information, Energy, + Power, Speed, Temperature, } @@ -170,6 +171,18 @@ create_units!( TerawattHour: (Energy, d128!(3600000000000000)), PetawattHour: (Energy, d128!(3600000000000000000)), + Milliwatt: (Power, d128!(0.001)), + Watt: (Power, d128!(1)), + Kilowatt: (Power, d128!(1000)), + Megawatt: (Power, d128!(1000000)), + Gigawatt: (Power, d128!(1000000000)), + Terawatt: (Power, d128!(1000000000000)), + Petawatt: (Power, d128!(1000000000000000)), + BritishThermalUnitsPerMinute: (Power, d128!(0.0568690272188)), // probably inexact + BritishThermalUnitsPerHour: (Power, d128!(3.412141633128)), // probably inexact + Horsepower: (Power, d128!(745.69987158227022)), // exact according to wikipedia + MetricHorsepower: (Power, d128!(735.49875)), + KilometersPerHour: (Speed, d128!(1)), MetersPerSecond: (Speed, d128!(3.6)), MilesPerHour: (Speed, d128!(1.609344)), @@ -361,6 +374,16 @@ mod tests { assert_eq!(convert_test(1000.0, GigawattHour, TerawattHour), 1.0); assert_eq!(convert_test(1000.0, TerawattHour, PetawattHour), 1.0); + assert_eq!(convert_test(1000.0, Watt, Kilowatt), 1.0); + assert_eq!(convert_test(1000.0, Kilowatt, Megawatt), 1.0); + assert_eq!(convert_test(1000.0, Megawatt, Gigawatt), 1.0); + assert_eq!(convert_test(1000.0, Gigawatt, Terawatt), 1.0); + assert_eq!(convert_test(1000.0, Terawatt, Petawatt), 1.0); + assert_eq!(convert_test(0.0568690272188, Watt, BritishThermalUnitsPerMinute), 1.0); + assert_eq!(convert_test(60.0, BritishThermalUnitsPerMinute, BritishThermalUnitsPerHour), 1.0); + assert_eq!(convert_test(745.6998715822702, Watt, Horsepower), 1.0); + assert_eq!(convert_test(735.49875, Watt, MetricHorsepower), 1.0); + assert_eq!(convert_test(3.6, KilometersPerHour, MetersPerSecond), 1.0); assert_eq!(convert_test(0.3048, MetersPerSecond, FeetPerSecond), 1.0); assert_eq!(convert_test(1.609344, KilometersPerHour, MilesPerHour), 1.0);