Merge branch 'master' into feature/auto-size-text

# Conflicts:
#	feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/CalculatorScreen.kt
#	feature/calculator/src/main/java/com/sadellie/unitto/feature/calculator/components/CalculatorKeyboard.kt
This commit is contained in:
Sad Ellie 2023-03-27 15:14:33 +03:00
commit 6cf49812b7
23 changed files with 953 additions and 418 deletions

View File

@ -1,3 +1,11 @@
<a href="https://github.com/sadellie/unitto/discussions/26">
<p align="middle">
<img src="./where-logo.png" width="99%" />
</p>
</a>
# Unitto calculator and unit converter
<p align="middle"> <p align="middle">
<img src="./fastlane/metadata/android/en-US/images/featureGraphic.png" width="99%" /> <img src="./fastlane/metadata/android/en-US/images/featureGraphic.png" width="99%" />
<img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/slide1.png" width="19%" /> <img src="./fastlane/metadata/android/en-US/images/phoneScreenshots/slide1.png" width="19%" />
@ -10,7 +18,7 @@
## 📲 Download ## 📲 Download
<a href="https://play.google.com/store/apps/details?id=com.sadellie.unitto"><img alt="Google Play" src="./content/googlePlay.png" width="32%"/></a> <a href="https://play.google.com/store/apps/details?id=com.sadellie.unitto"><img alt="Google Play" src="./content/googlePlay.png" width="32%"/></a>
<a href="https://f-droid.org/packages/com.sadellie.unitto"><img alt="F-Droid" src="./content/fDroid.png" width="32%"/></a> <a href="https://f-droid.org/packages/com.sadellie.unitto"><img alt="F-Droid" src="./content/fDroid.png" width="32%"/></a>
<a href="https://appgallery.huawei.com/app/C105740875"><img alt="AppGallery" src="./content/appGallery.png" width="32%"/></a> <a href="https://apps.rustore.ru/app/com.sadellie.unitto"><img alt="RuMarket" src="./content/ruStore.png" width="32%"/></a>
## 😎 Features ## 😎 Features
- Instant expression evaluation - Instant expression evaluation

View File

@ -32,7 +32,7 @@ android {
applicationId = "com.sadellie.unitto" applicationId = "com.sadellie.unitto"
minSdk = 21 minSdk = 21
targetSdk = 33 targetSdk = 33
versionCode = 17 versionCode = 18
versionName = "Illuminating emerald" versionName = "Illuminating emerald"
} }

View File

@ -122,47 +122,47 @@
<string name="kelvin_short" translatable="false">K</string> <string name="kelvin_short" translatable="false">K</string>
<!--Speed--> <!--Speed-->
<string name="millimeter_per_hour">Millimeter per hour</string> <string name="millimeter_per_hour">Millimeter/hour</string>
<string name="millimeter_per_hour_short">mm/h</string> <string name="millimeter_per_hour_short">mm/h</string>
<string name="millimeter_per_minute">Millimeter per minute</string> <string name="millimeter_per_minute">Millimeter/minute</string>
<string name="millimeter_per_minute_short">mm/m</string> <string name="millimeter_per_minute_short">mm/m</string>
<string name="millimeter_per_second">Millimeter per second</string> <string name="millimeter_per_second">Millimeter/second</string>
<string name="millimeter_per_second_short">mm/s</string> <string name="millimeter_per_second_short">mm/s</string>
<string name="centimeter_per_hour">Centimeter per hour</string> <string name="centimeter_per_hour">Centimeter/hour</string>
<string name="centimeter_per_hour_short">cm/h</string> <string name="centimeter_per_hour_short">cm/h</string>
<string name="centimeter_per_minute">Centimeter per minute</string> <string name="centimeter_per_minute">Centimeter/minute</string>
<string name="centimeter_per_minute_short">cm/m</string> <string name="centimeter_per_minute_short">cm/m</string>
<string name="centimeter_per_second">Centimeter per second</string> <string name="centimeter_per_second">Centimeter/second</string>
<string name="centimeter_per_second_short">cm/s</string> <string name="centimeter_per_second_short">cm/s</string>
<string name="meter_per_hour">Meter per hour</string> <string name="meter_per_hour">Meter/hour</string>
<string name="meter_per_hour_short">m/h</string> <string name="meter_per_hour_short">m/h</string>
<string name="meter_per_minute">Meter per minute</string> <string name="meter_per_minute">Meter/minute</string>
<string name="meter_per_minute_short">m/m</string> <string name="meter_per_minute_short">m/m</string>
<string name="meter_per_second">Meter per second</string> <string name="meter_per_second">Meter/second</string>
<string name="meter_per_second_short">m/s</string> <string name="meter_per_second_short">m/s</string>
<string name="kilometer_per_hour">Kilometer per hour</string> <string name="kilometer_per_hour">Kilometer/hour</string>
<string name="kilometer_per_hour_short">km/h</string> <string name="kilometer_per_hour_short">km/h</string>
<string name="kilometer_per_minute">Kilometer per minute</string> <string name="kilometer_per_minute">Kilometer/minute</string>
<string name="kilometer_per_minute_short">km/m</string> <string name="kilometer_per_minute_short">km/m</string>
<string name="kilometer_per_second">Kilometer per second</string> <string name="kilometer_per_second">Kilometer/second</string>
<string name="kilometer_per_second_short">km/s</string> <string name="kilometer_per_second_short">km/s</string>
<string name="foot_per_hour">Foot per hour</string> <string name="foot_per_hour">Foot/hour</string>
<string name="foot_per_hour_short">ft/h</string> <string name="foot_per_hour_short">ft/h</string>
<string name="foot_per_minute">Foot per minute</string> <string name="foot_per_minute">Foot/minute</string>
<string name="foot_per_minute_short">ft/m</string> <string name="foot_per_minute_short">ft/m</string>
<string name="foot_per_second">Foot per second</string> <string name="foot_per_second">Foot/second</string>
<string name="foot_per_second_short">ft/s</string> <string name="foot_per_second_short">ft/s</string>
<string name="yard_per_hour">Yard per hour</string> <string name="yard_per_hour">Yard/hour</string>
<string name="yard_per_hour_short">yd/h</string> <string name="yard_per_hour_short">yd/h</string>
<string name="yard_per_minute">Yard per minute</string> <string name="yard_per_minute">Yard/minute</string>
<string name="yard_per_minute_short">yd/m</string> <string name="yard_per_minute_short">yd/m</string>
<string name="yard_per_second">Yard per second</string> <string name="yard_per_second">Yard/second</string>
<string name="yard_per_second_short">yd/s</string> <string name="yard_per_second_short">yd/s</string>
<string name="mile_per_hour">Mile per hour</string> <string name="mile_per_hour">Mile/hour</string>
<string name="mile_per_hour_short">mi/h</string> <string name="mile_per_hour_short">mi/h</string>
<string name="mile_per_minute">Mile per minute</string> <string name="mile_per_minute">Mile/minute</string>
<string name="mile_per_minute_short">mi/m</string> <string name="mile_per_minute_short">mi/m</string>
<string name="mile_per_second">Mile per second</string> <string name="mile_per_second">Mile/second</string>
<string name="mile_per_second_short">mi/s</string> <string name="mile_per_second_short">mi/s</string>
<string name="knot">Knot</string> <string name="knot">Knot</string>
<string name="knot_short">kt</string> <string name="knot_short">kt</string>
@ -220,41 +220,41 @@
<string name="exabyte_short">EB</string> <string name="exabyte_short">EB</string>
<!--Data transfer--> <!--Data transfer-->
<string name="bit_per_second">Bit per second</string> <string name="bit_per_second">Bit/second</string>
<string name="bit_per_second_short">b/s</string> <string name="bit_per_second_short">b/s</string>
<string name="kibibit_per_second">Kibibit per second</string> <string name="kibibit_per_second">Kibibit/second</string>
<string name="kibibit_per_second_short">Kib/s</string> <string name="kibibit_per_second_short">Kib/s</string>
<string name="kilobit_per_second">Kilobit per second</string> <string name="kilobit_per_second">Kilobit/second</string>
<string name="kilobit_per_second_short">Kb/s</string> <string name="kilobit_per_second_short">Kb/s</string>
<string name="megabit_per_second">Megabit per second</string> <string name="megabit_per_second">Megabit/second</string>
<string name="megabit_per_second_short">Mb/s</string> <string name="megabit_per_second_short">Mb/s</string>
<string name="mebibit_per_second">Mebibit per second</string> <string name="mebibit_per_second">Mebibit/second</string>
<string name="mebibit_per_second_short">Mib/s</string> <string name="mebibit_per_second_short">Mib/s</string>
<string name="gigabit_per_second">Gigabit per second</string> <string name="gigabit_per_second">Gigabit/second</string>
<string name="gigabit_per_second_short">Gb/s</string> <string name="gigabit_per_second_short">Gb/s</string>
<string name="terabit_per_second">Terabit per second</string> <string name="terabit_per_second">Terabit/second</string>
<string name="terabit_per_second_short">Tb/s</string> <string name="terabit_per_second_short">Tb/s</string>
<string name="petabit_per_second">Petabit per second</string> <string name="petabit_per_second">Petabit/second</string>
<string name="petabit_per_second_short">Pb/s</string> <string name="petabit_per_second_short">Pb/s</string>
<string name="exabit_per_second">Exabit per second</string> <string name="exabit_per_second">Exabit/second</string>
<string name="exabit_per_second_short">Eb/s</string> <string name="exabit_per_second_short">Eb/s</string>
<string name="byte_per_second">Byte per second</string> <string name="byte_per_second">Byte/second</string>
<string name="byte_per_second_short">B/s</string> <string name="byte_per_second_short">B/s</string>
<string name="kibibyte_per_second">Kibibyte per second</string> <string name="kibibyte_per_second">Kibibyte/second</string>
<string name="kibibyte_per_second_short">KiB/s</string> <string name="kibibyte_per_second_short">KiB/s</string>
<string name="kilobyte_per_second">Kilobyte per second</string> <string name="kilobyte_per_second">Kilobyte/second</string>
<string name="kilobyte_per_second_short">KB/s</string> <string name="kilobyte_per_second_short">KB/s</string>
<string name="megabyte_per_second">Megabyte per second</string> <string name="megabyte_per_second">Megabyte/second</string>
<string name="megabyte_per_second_short">MB/s</string> <string name="megabyte_per_second_short">MB/s</string>
<string name="mebibyte_per_second">Mebibyte per second</string> <string name="mebibyte_per_second">Mebibyte/second</string>
<string name="mebibyte_per_second_short">MiB/s</string> <string name="mebibyte_per_second_short">MiB/s</string>
<string name="gigabyte_per_second">Gigabyte per second</string> <string name="gigabyte_per_second">Gigabyte/second</string>
<string name="gigabyte_per_second_short">GB/s</string> <string name="gigabyte_per_second_short">GB/s</string>
<string name="terabyte_per_second">Terabyte per second</string> <string name="terabyte_per_second">Terabyte/second</string>
<string name="terabyte_per_second_short">TB/s</string> <string name="terabyte_per_second_short">TB/s</string>
<string name="petabyte_per_second">Petabyte per second</string> <string name="petabyte_per_second">Petabyte/second</string>
<string name="petabyte_per_second_short">PB/s</string> <string name="petabyte_per_second_short">PB/s</string>
<string name="exabyte_per_second">Exabyte per second</string> <string name="exabyte_per_second">Exabyte/second</string>
<string name="exabyte_per_second_short">EB/s</string> <string name="exabyte_per_second_short">EB/s</string>
<!--Volume--> <!--Volume-->
@ -446,9 +446,9 @@
<string name="petapascal_short">PPa</string> <string name="petapascal_short">PPa</string>
<string name="exapascal">Exapascal</string> <string name="exapascal">Exapascal</string>
<string name="exapascal_short">EPa</string> <string name="exapascal_short">EPa</string>
<string name="psi">Pound per square inch</string> <string name="psi">Pound/square inch</string>
<string name="psi_short" translatable="false">psi</string> <string name="psi_short" translatable="false">psi</string>
<string name="ksi">Kilopound per square inch</string> <string name="ksi">Kilopound/square inch</string>
<string name="ksi_short" translatable="false">ksi</string> <string name="ksi_short" translatable="false">ksi</string>
<string name="standard_atmosphere">Standard atmosphere</string> <string name="standard_atmosphere">Standard atmosphere</string>
<string name="standard_atmosphere_short">atm</string> <string name="standard_atmosphere_short">atm</string>
@ -460,29 +460,29 @@
<string name="millimeter_of_mercury_short">mm Hg</string> <string name="millimeter_of_mercury_short">mm Hg</string>
<!--Acceleration--> <!--Acceleration-->
<string name="attometer_per_square_second">Attometer per square second</string> <string name="attometer_per_square_second">Attometer/square second</string>
<string name="attometer_per_square_second_short">am/s^2</string> <string name="attometer_per_square_second_short">am/s^2</string>
<string name="femtometer_per_square_second">Femtometer per square second</string> <string name="femtometer_per_square_second">Femtometer/square second</string>
<string name="femtometer_per_square_second_short">fm/s^2</string> <string name="femtometer_per_square_second_short">fm/s^2</string>
<string name="picometer_per_square_second">Picometer per square second</string> <string name="picometer_per_square_second">Picometer/square second</string>
<string name="picometer_per_square_second_short">pm/s^2</string> <string name="picometer_per_square_second_short">pm/s^2</string>
<string name="nanometer_per_square_second">Nanometer per square second</string> <string name="nanometer_per_square_second">Nanometer/square second</string>
<string name="nanometer_per_square_second_short">nm/s^2</string> <string name="nanometer_per_square_second_short">nm/s^2</string>
<string name="micrometer_per_square_second">Micrometer per square second</string> <string name="micrometer_per_square_second">Micrometer/square second</string>
<string name="micrometer_per_square_second_short">µm/s^2</string> <string name="micrometer_per_square_second_short">µm/s^2</string>
<string name="millimeter_per_square_second">Millimeter per square second</string> <string name="millimeter_per_square_second">Millimeter/square second</string>
<string name="millimeter_per_square_second_short">mm/s^2</string> <string name="millimeter_per_square_second_short">mm/s^2</string>
<string name="centimeter_per_square_second">Centimeter per square second</string> <string name="centimeter_per_square_second">Centimeter/square second</string>
<string name="centimeter_per_square_second_short">cm/s^2</string> <string name="centimeter_per_square_second_short">cm/s^2</string>
<string name="decimeter_per_square_second">Decimeter per square second</string> <string name="decimeter_per_square_second">Decimeter/square second</string>
<string name="decimeter_per_square_second_short">dm/s^2</string> <string name="decimeter_per_square_second_short">dm/s^2</string>
<string name="meter_per_square_second">Meter per square second</string> <string name="meter_per_square_second">Meter/square second</string>
<string name="meter_per_square_second_short">m/s^2</string> <string name="meter_per_square_second_short">m/s^2</string>
<string name="kilometer_per_square_second">Kilometer per square second</string> <string name="kilometer_per_square_second">Kilometer/square second</string>
<string name="kilometer_per_square_second_short">km/s^2</string> <string name="kilometer_per_square_second_short">km/s^2</string>
<string name="dekameter_per_square_second">Dekameter per square second</string> <string name="dekameter_per_square_second">Dekameter/square second</string>
<string name="dekameter_per_square_second_short">dam/s^2</string> <string name="dekameter_per_square_second_short">dam/s^2</string>
<string name="hectometer_per_square_second">Hectometer per square second</string> <string name="hectometer_per_square_second">Hectometer/square second</string>
<string name="hectometer_per_square_second_short">hm/s^2</string> <string name="hectometer_per_square_second_short">hm/s^2</string>
<string name="gal">Gal</string> <string name="gal">Gal</string>
<string name="gal_short">Gal</string> <string name="gal_short">Gal</string>
@ -971,6 +971,152 @@
<string name="hexadecimal">Hexadecimal</string> <string name="hexadecimal">Hexadecimal</string>
<string name="hexadecimal_short">base16</string> <string name="hexadecimal_short">base16</string>
<!--ELECTROSTATIC CAPACITANCE-->
<string name="attofarad">Attofarad</string>
<string name="attofarad_short">aF</string>
<string name="statfarad">Statfarad</string>
<string name="statfarad_short">stF</string>
<string name="farad">Farad</string>
<string name="farad_short">F</string>
<string name="exafarad">Exafarad</string>
<string name="exafarad_short">EF</string>
<string name="picofarad">Picofarad</string>
<string name="picofarad_short">pF</string>
<string name="nanofarad">Nanofarad</string>
<string name="nanofarad_short">nF</string>
<string name="microfarad">Microfarad</string>
<string name="microfarad_short">µF</string>
<string name="millifarad">Millifarad</string>
<string name="millifarad_short">mF</string>
<string name="kilofarad">Kilofarad</string>
<string name="kilofarad_short">kF</string>
<string name="megafarad">Megafarad</string>
<string name="megafarad_short">MF</string>
<string name="gigafarad">Gigafarad</string>
<string name="gigafarad_short">GF</string>
<string name="petafarad">Petafarad</string>
<string name="petafarad_short">PF</string>
<!--Prefixes-->
<string name="prefix_quetta">Quetta</string>
<string name="prefix_quetta_short">Q</string>
<string name="prefix_ronna">Ronna</string>
<string name="prefix_ronna_short">R</string>
<string name="prefix_yotta">Yotta</string>
<string name="prefix_yotta_short">Y</string>
<string name="prefix_zetta">Zetta</string>
<string name="prefix_zetta_short">Z</string>
<string name="prefix_exa">Exa</string>
<string name="prefix_exa_short">E</string>
<string name="prefix_peta">Peta</string>
<string name="prefix_peta_short">P</string>
<string name="prefix_tera">Tera</string>
<string name="prefix_tera_short">T</string>
<string name="prefix_giga">Giga</string>
<string name="prefix_giga_short">G</string>
<string name="prefix_mega">Mega</string>
<string name="prefix_mega_short">M</string>
<string name="prefix_kilo">Kilo</string>
<string name="prefix_kilo_short">k</string>
<string name="prefix_hecto">Hecto</string>
<string name="prefix_hecto_short">h</string>
<string name="prefix_deca">Deca</string>
<string name="prefix_deca_short">da</string>
<string name="prefix_base">Base</string>
<string name="prefix_base_short">Base</string>
<string name="prefix_deci">Deci</string>
<string name="prefix_deci_short">d</string>
<string name="prefix_centi">Centi</string>
<string name="prefix_centi_short">c</string>
<string name="prefix_milli">Milli</string>
<string name="prefix_milli_short">m</string>
<string name="prefix_micro">Micro</string>
<string name="prefix_micro_short">μ</string>
<string name="prefix_nano">Nano</string>
<string name="prefix_nano_short">n</string>
<string name="prefix_pico">Pico</string>
<string name="prefix_pico_short">p</string>
<string name="prefix_femto">Femto</string>
<string name="prefix_femto_short">f</string>
<string name="prefix_atto">Atto</string>
<string name="prefix_atto_short">a</string>
<string name="prefix_zepto">Zepto</string>
<string name="prefix_zepto_short">z</string>
<string name="prefix_yocto">Yocto</string>
<string name="prefix_yocto_short">y</string>
<string name="prefix_ronto">Ronto</string>
<string name="prefix_ronto_short">r</string>
<string name="prefix_quecto">Quecto</string>
<string name="prefix_quecto_short">q</string>
<!--Force-->
<string name="newton">Newton</string>
<string name="newton_short">N</string>
<string name="kilonewton">Kilonewton</string>
<string name="kilonewton_short">kN</string>
<string name="gram_force">Gram-force</string>
<string name="gram_force_short">gf</string>
<string name="kilogram_force">Kilogram-force</string>
<string name="kilogram_force_short">kgf</string>
<string name="ton_force">Ton-force</string>
<string name="ton_force_short">tf</string>
<string name="millinewton">Millinewton</string>
<string name="millinewton_short">mN</string>
<string name="attonewton">attonewton</string>
<string name="attonewton_short">aN</string>
<string name="dyne">dyne</string>
<string name="dyne_short">dyn</string>
<string name="joule_per_meter">Joule/meter</string>
<string name="joule_per_meter_short">J/m</string>
<string name="joule_per_centimeter">Joule/centimeter</string>
<string name="joule_per_centimeter_short">J/cm</string>
<string name="kilopound_force">Kilopound-force</string>
<string name="kilopound_force_short">kipf</string>
<string name="pound_force">Pound-force</string>
<string name="pound_force_short">lbf</string>
<string name="ounce_force">Ounce-force</string>
<string name="ounce_force_short">ozf</string>
<string name="pond">Pond</string>
<string name="pond_short">p</string>
<string name="kilopond">Kilopond</string>
<string name="kilopond_short">kp</string>
<!--Torque-->
<string name="newton_meter">Newton meter</string>
<string name="newton_meter_short">N*m</string>
<string name="newton_centimeter">Newton centimeter</string>
<string name="newton_centimeter_short">N*cm</string>
<string name="newton_millimeter">Newton millimeter</string>
<string name="newton_millimeter_short">N*mm</string>
<string name="kilonewton_meter">Kilonewton meter</string>
<string name="kilonewton_meter_short">kN*m</string>
<string name="dyne_meter">Dyne meter</string>
<string name="dyne_meter_short">dyn*m</string>
<string name="dyne_centimeter">Dyne centimeter</string>
<string name="dyne_centimeter_short">dyn*cm</string>
<string name="dyne_millimeter">Dyne millimeter</string>
<string name="dyne_millimeter_short">dyn*mm</string>
<string name="kilogram_force_meter">Kilogram-force meter</string>
<string name="kilogram_force_meter_short">kgf*m</string>
<string name="kilogram_force_centimeter">Kilogram-force centimeter</string>
<string name="kilogram_force_centimeter_short">kgf*cm</string>
<string name="kilogram_force_millimeter">Kilogram-force millimeter</string>
<string name="kilogram_force_millimeter_short">kgf*mm</string>
<string name="gram_force_meter">Gram-force meter</string>
<string name="gram_force_meter_short">gf*m</string>
<string name="gram_force_centimeter">Gram-force centimeter</string>
<string name="gram_force_centimeter_short">gf*cm</string>
<string name="gram_force_millimeter">Gram-force millimeter</string>
<string name="gram_force_millimeter_short">gf*mm</string>
<string name="ounce_force_foot">Ounce-force foot</string>
<string name="ounce_force_foot_short">ozf*ft</string>
<string name="ounce_force_inch">Ounce-force inch</string>
<string name="ounce_force_inch_short">ozf*in</string>
<string name="pound_force_foot">Pound-force foot</string>
<string name="pound_force_foot_short">lbf*ft</string>
<string name="pound_force_inch">Pound-force inch</string>
<string name="pound_force_inch_short">lbf*in</string>
<!--Groups--> <!--Groups-->
<string name="length">Length</string> <string name="length">Length</string>
<string name="time">Time</string> <string name="time">Time</string>
@ -989,6 +1135,10 @@
<string name="currency">Currency</string> <string name="currency">Currency</string>
<string name="flux">Flux</string> <string name="flux">Flux</string>
<string name="number_base">Base</string> <string name="number_base">Base</string>
<string name="electrostatic_capacitance">Capacitance</string>
<string name="prefix">Prefix</string>
<string name="force">Force</string>
<string name="torque">Torque</string>
<!--Screen names--> <!--Screen names-->
<string name="units_screen_from">Convert from</string> <string name="units_screen_from">Convert from</string>

View File

@ -48,4 +48,8 @@ enum class UnitGroup(
DATA_TRANSFER(res = R.string.data_transfer), DATA_TRANSFER(res = R.string.data_transfer),
FLUX(res = R.string.flux), FLUX(res = R.string.flux),
NUMBER_BASE(res = R.string.number_base), NUMBER_BASE(res = R.string.number_base),
ELECTROSTATIC_CAPACITANCE(res = R.string.electrostatic_capacitance),
PREFIX(res = R.string.prefix),
FORCE(res = R.string.force),
TORQUE(res = R.string.torque),
} }

View File

@ -20,6 +20,7 @@ package com.sadellie.unitto.data.units
import android.content.Context import android.content.Context
import com.sadellie.unitto.core.base.MAX_PRECISION import com.sadellie.unitto.core.base.MAX_PRECISION
import com.sadellie.unitto.data.database.UnitsEntity
import com.sadellie.unitto.data.model.AbstractUnit import com.sadellie.unitto.data.model.AbstractUnit
import com.sadellie.unitto.data.model.UnitGroup import com.sadellie.unitto.data.model.UnitGroup
import com.sadellie.unitto.data.model.sortByLev import com.sadellie.unitto.data.model.sortByLev
@ -29,18 +30,21 @@ import com.sadellie.unitto.data.units.collections.areaCollection
import com.sadellie.unitto.data.units.collections.currencyCollection import com.sadellie.unitto.data.units.collections.currencyCollection
import com.sadellie.unitto.data.units.collections.dataCollection import com.sadellie.unitto.data.units.collections.dataCollection
import com.sadellie.unitto.data.units.collections.dataTransferCollection import com.sadellie.unitto.data.units.collections.dataTransferCollection
import com.sadellie.unitto.data.units.collections.electrostaticCapacitance
import com.sadellie.unitto.data.units.collections.energyCollection import com.sadellie.unitto.data.units.collections.energyCollection
import com.sadellie.unitto.data.units.collections.fluxCollection import com.sadellie.unitto.data.units.collections.fluxCollection
import com.sadellie.unitto.data.units.collections.forceCollection
import com.sadellie.unitto.data.units.collections.lengthCollection import com.sadellie.unitto.data.units.collections.lengthCollection
import com.sadellie.unitto.data.units.collections.massCollection import com.sadellie.unitto.data.units.collections.massCollection
import com.sadellie.unitto.data.units.collections.numberBaseCollection import com.sadellie.unitto.data.units.collections.numberBaseCollection
import com.sadellie.unitto.data.units.collections.powerCollection import com.sadellie.unitto.data.units.collections.powerCollection
import com.sadellie.unitto.data.units.collections.prefixCollection
import com.sadellie.unitto.data.units.collections.pressureCollection import com.sadellie.unitto.data.units.collections.pressureCollection
import com.sadellie.unitto.data.units.collections.speedCollection import com.sadellie.unitto.data.units.collections.speedCollection
import com.sadellie.unitto.data.units.collections.temperatureCollection import com.sadellie.unitto.data.units.collections.temperatureCollection
import com.sadellie.unitto.data.units.collections.timeCollection import com.sadellie.unitto.data.units.collections.timeCollection
import com.sadellie.unitto.data.units.collections.torqueCollection
import com.sadellie.unitto.data.units.collections.volumeCollection import com.sadellie.unitto.data.units.collections.volumeCollection
import com.sadellie.unitto.data.database.UnitsEntity
import java.math.BigDecimal import java.math.BigDecimal
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@ -79,6 +83,10 @@ class AllUnitsRepository @Inject constructor() {
UnitGroup.DATA_TRANSFER to dataTransferCollection, UnitGroup.DATA_TRANSFER to dataTransferCollection,
UnitGroup.FLUX to fluxCollection, UnitGroup.FLUX to fluxCollection,
UnitGroup.NUMBER_BASE to numberBaseCollection, UnitGroup.NUMBER_BASE to numberBaseCollection,
UnitGroup.ELECTROSTATIC_CAPACITANCE to electrostaticCapacitance,
UnitGroup.PREFIX to prefixCollection,
UnitGroup.FORCE to forceCollection,
UnitGroup.TORQUE to torqueCollection
) )
} }

View File

@ -516,4 +516,81 @@ object MyUnitIDS {
const val tetradecimal = "tetradecimal" const val tetradecimal = "tetradecimal"
const val pentadecimal = "pentadecimal" const val pentadecimal = "pentadecimal"
const val hexadecimal = "hexadecimal" const val hexadecimal = "hexadecimal"
// ELECTROSTATIC CAPACITANCE
const val attofarad = "attofarad"
const val statfarad = "statfarad"
const val farad = "farad"
const val exafarad = "exafarad"
const val picofarad = "picofarad"
const val nanofarad = "nanofarad"
const val microfarad = "microfarad"
const val millifarad = "millifarad"
const val kilofarad = "kilofarad"
const val megafarad = "megafarad"
const val gigafarad = "gigafarad"
const val petafarad = "petafarad"
// PREFIX
const val prefix_quetta = "quetta"
const val prefix_ronna = "ronna"
const val prefix_yotta = "yotta"
const val prefix_zetta = "zetta"
const val prefix_exa = "exa"
const val prefix_peta = "peta"
const val prefix_tera = "tera"
const val prefix_giga = "giga"
const val prefix_mega = "mega"
const val prefix_kilo = "kilo"
const val prefix_hecto = "hecto"
const val prefix_deca = "deca"
const val prefix_base = "base"
const val prefix_deci = "deci"
const val prefix_centi = "centi"
const val prefix_milli = "milli"
const val prefix_micro = "micro"
const val prefix_nano = "nano"
const val prefix_pico = "pico"
const val prefix_femto = "femto"
const val prefix_atto = "atto"
const val prefix_zepto = "zepto"
const val prefix_yocto = "yocto"
const val prefix_ronto = "ronto"
const val prefix_quecto = "quecto"
// FORCE
const val newton = "newton"
const val kilonewton = "kilonewton"
const val gram_force = "gram_force"
const val kilogram_force = "kilogram_force"
const val ton_force = "ton_force"
const val millinewton = "millinewton"
const val attonewton = "attonewton"
const val dyne = "dyne"
const val joule_per_meter = "joule_per_meter"
const val joule_per_centimeter = "joule_per_centimeter"
const val kilopound_force = "kilopound_force"
const val pound_force = "pound_force"
const val ounce_force = "ounce_force"
const val pond = "pond"
const val kilopond = "kilopond"
// TORQUE
const val newton_meter = "newton_meter"
const val newton_centimeter = "newton_centimeter"
const val newton_millimeter = "newton_millimeter"
const val kilonewton_meter = "kilonewton_meter"
const val dyne_meter = "dyne_meter"
const val dyne_centimeter = "dyne_centimeter"
const val dyne_millimeter = "dyne_millimeter"
const val kilogram_force_meter = "kilogram_force_meter"
const val kilogram_force_centimeter = "kilogram_force_centimeter"
const val kilogram_force_millimeter = "kilogram_force_millimeter"
const val gram_force_meter = "gram_force_meter"
const val gram_force_centimeter = "gram_force_centimeter"
const val gram_force_millimeter = "gram_force_millimeter"
const val ounce_force_foot = "ounce_force_foot"
const val ounce_force_inch = "ounce_force_inch"
const val pound_force_foot = "pound_force_foot"
const val pound_force_inch = "pound_force_inch"
} }

View File

@ -0,0 +1,43 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.model.AbstractUnit
import com.sadellie.unitto.data.model.MyUnit
import com.sadellie.unitto.data.model.UnitGroup
import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.R
import java.math.BigDecimal
internal val electrostaticCapacitance: List<AbstractUnit> by lazy {
listOf(
MyUnit(MyUnitIDS.attofarad, BigDecimal.valueOf(1), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.attofarad, R.string.attofarad_short),
MyUnit(MyUnitIDS.picofarad, BigDecimal.valueOf(1E+6), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.picofarad, R.string.picofarad_short),
MyUnit(MyUnitIDS.statfarad, BigDecimal.valueOf(1112650.0561), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.statfarad, R.string.statfarad_short),
MyUnit(MyUnitIDS.nanofarad, BigDecimal.valueOf(1E+9), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.nanofarad, R.string.nanofarad_short),
MyUnit(MyUnitIDS.microfarad, BigDecimal.valueOf(1E+12), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.microfarad, R.string.microfarad_short),
MyUnit(MyUnitIDS.millifarad, BigDecimal.valueOf(1E+15), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.millifarad, R.string.millifarad_short),
MyUnit(MyUnitIDS.farad, BigDecimal.valueOf(1E+18), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.farad, R.string.farad_short),
MyUnit(MyUnitIDS.kilofarad, BigDecimal.valueOf(1E+21), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.kilofarad, R.string.kilofarad_short),
MyUnit(MyUnitIDS.megafarad, BigDecimal.valueOf(1E+24), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.megafarad, R.string.megafarad_short),
MyUnit(MyUnitIDS.gigafarad, BigDecimal.valueOf(1E+27), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.gigafarad, R.string.gigafarad_short),
MyUnit(MyUnitIDS.petafarad, BigDecimal.valueOf(1E+33), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.petafarad, R.string.petafarad_short),
MyUnit(MyUnitIDS.exafarad, BigDecimal.valueOf(1E+36), UnitGroup.ELECTROSTATIC_CAPACITANCE, R.string.exafarad, R.string.exafarad_short),
)
}

View File

@ -0,0 +1,46 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.model.AbstractUnit
import com.sadellie.unitto.data.model.MyUnit
import com.sadellie.unitto.data.model.UnitGroup
import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.R
import java.math.BigDecimal
val forceCollection: List<AbstractUnit> by lazy {
listOf(
MyUnit(MyUnitIDS.attonewton, BigDecimal.valueOf(1), UnitGroup.FORCE, R.string.attonewton, R.string.attonewton_short),
MyUnit(MyUnitIDS.dyne, BigDecimal.valueOf(1E+13), UnitGroup.FORCE, R.string.dyne, R.string.dyne_short),
MyUnit(MyUnitIDS.millinewton, BigDecimal.valueOf(1E+15), UnitGroup.FORCE, R.string.millinewton, R.string.millinewton_short),
MyUnit(MyUnitIDS.joule_per_centimeter, BigDecimal.valueOf(1E+16), UnitGroup.FORCE, R.string.joule_per_centimeter, R.string.joule_per_centimeter_short),
MyUnit(MyUnitIDS.newton, BigDecimal.valueOf(1E+18), UnitGroup.FORCE, R.string.newton, R.string.newton_short),
MyUnit(MyUnitIDS.joule_per_meter, BigDecimal.valueOf(1E+18), UnitGroup.FORCE, R.string.joule_per_meter, R.string.joule_per_meter_short),
MyUnit(MyUnitIDS.kilonewton, BigDecimal.valueOf(1E+21), UnitGroup.FORCE, R.string.kilonewton, R.string.kilonewton_short),
MyUnit(MyUnitIDS.gram_force, BigDecimal.valueOf(9.80665E+15), UnitGroup.FORCE, R.string.gram_force, R.string.gram_force_short),
MyUnit(MyUnitIDS.kilogram_force, BigDecimal.valueOf(9.80665E+18), UnitGroup.FORCE, R.string.kilogram_force, R.string.kilogram_force_short),
MyUnit(MyUnitIDS.ton_force, BigDecimal.valueOf(9.80665E+21), UnitGroup.FORCE, R.string.ton_force, R.string.ton_force_short),
MyUnit(MyUnitIDS.ounce_force, BigDecimal.valueOf(2.78013850953423008E17), UnitGroup.FORCE, R.string.ounce_force, R.string.ounce_force_short),
MyUnit(MyUnitIDS.pound_force, BigDecimal.valueOf(4.4482216152550001E18), UnitGroup.FORCE, R.string.pound_force, R.string.pound_force_short),
MyUnit(MyUnitIDS.kilopound_force, BigDecimal.valueOf(4.448221615255E+21), UnitGroup.FORCE, R.string.kilopound_force, R.string.kilopound_force_short),
MyUnit(MyUnitIDS.pond, BigDecimal.valueOf(9.80665E+15), UnitGroup.FORCE, R.string.pond, R.string.pond_short),
MyUnit(MyUnitIDS.kilopond, BigDecimal.valueOf(9.80665E+18), UnitGroup.FORCE, R.string.kilopond, R.string.kilopond_short),
)
}

View File

@ -0,0 +1,56 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.model.AbstractUnit
import com.sadellie.unitto.data.model.MyUnit
import com.sadellie.unitto.data.model.UnitGroup
import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.R
import java.math.BigDecimal
val prefixCollection: List<AbstractUnit> by lazy {
listOf(
MyUnit(MyUnitIDS.prefix_quetta, BigDecimal.valueOf(1E+30), UnitGroup.PREFIX, R.string.prefix_quetta, R.string.prefix_quetta_short),
MyUnit(MyUnitIDS.prefix_ronna, BigDecimal.valueOf(1E+27), UnitGroup.PREFIX, R.string.prefix_ronna, R.string.prefix_ronna_short),
MyUnit(MyUnitIDS.prefix_yotta, BigDecimal.valueOf(1E+24), UnitGroup.PREFIX, R.string.prefix_yotta, R.string.prefix_yotta_short),
MyUnit(MyUnitIDS.prefix_zetta, BigDecimal.valueOf(1E+21), UnitGroup.PREFIX, R.string.prefix_zetta, R.string.prefix_zetta_short),
MyUnit(MyUnitIDS.prefix_exa, BigDecimal.valueOf(1E+18), UnitGroup.PREFIX, R.string.prefix_exa, R.string.prefix_exa_short),
MyUnit(MyUnitIDS.prefix_peta, BigDecimal.valueOf(1E+15), UnitGroup.PREFIX, R.string.prefix_peta, R.string.prefix_peta_short),
MyUnit(MyUnitIDS.prefix_tera, BigDecimal.valueOf(1E+12), UnitGroup.PREFIX, R.string.prefix_tera, R.string.prefix_tera_short),
MyUnit(MyUnitIDS.prefix_giga, BigDecimal.valueOf(1E+9), UnitGroup.PREFIX, R.string.prefix_giga, R.string.prefix_giga_short),
MyUnit(MyUnitIDS.prefix_mega, BigDecimal.valueOf(1E+6), UnitGroup.PREFIX, R.string.prefix_mega, R.string.prefix_mega_short),
MyUnit(MyUnitIDS.prefix_kilo, BigDecimal.valueOf(1E+3), UnitGroup.PREFIX, R.string.prefix_kilo, R.string.prefix_kilo_short),
MyUnit(MyUnitIDS.prefix_hecto, BigDecimal.valueOf(1E+2), UnitGroup.PREFIX, R.string.prefix_hecto, R.string.prefix_hecto_short),
MyUnit(MyUnitIDS.prefix_deca, BigDecimal.valueOf(1E+1), UnitGroup.PREFIX, R.string.prefix_deca, R.string.prefix_deca_short),
MyUnit(MyUnitIDS.prefix_base, BigDecimal.valueOf(1E+0), UnitGroup.PREFIX, R.string.prefix_base, R.string.prefix_base_short),
MyUnit(MyUnitIDS.prefix_deci, BigDecimal.valueOf(1E-1), UnitGroup.PREFIX, R.string.prefix_deci, R.string.prefix_deci_short),
MyUnit(MyUnitIDS.prefix_centi, BigDecimal.valueOf(1E-2), UnitGroup.PREFIX, R.string.prefix_centi, R.string.prefix_centi_short),
MyUnit(MyUnitIDS.prefix_milli, BigDecimal.valueOf(1E-3), UnitGroup.PREFIX, R.string.prefix_milli, R.string.prefix_milli_short),
MyUnit(MyUnitIDS.prefix_micro, BigDecimal.valueOf(1E-6), UnitGroup.PREFIX, R.string.prefix_micro, R.string.prefix_micro_short),
MyUnit(MyUnitIDS.prefix_nano, BigDecimal.valueOf(1E-9), UnitGroup.PREFIX, R.string.prefix_nano, R.string.prefix_nano_short),
MyUnit(MyUnitIDS.prefix_pico, BigDecimal.valueOf(1E-12), UnitGroup.PREFIX, R.string.prefix_pico, R.string.prefix_pico_short),
MyUnit(MyUnitIDS.prefix_femto, BigDecimal.valueOf(1E-15), UnitGroup.PREFIX, R.string.prefix_femto, R.string.prefix_femto_short),
MyUnit(MyUnitIDS.prefix_atto, BigDecimal.valueOf(1E-18), UnitGroup.PREFIX, R.string.prefix_atto, R.string.prefix_atto_short),
MyUnit(MyUnitIDS.prefix_zepto, BigDecimal.valueOf(1E-21), UnitGroup.PREFIX, R.string.prefix_zepto, R.string.prefix_zepto_short),
MyUnit(MyUnitIDS.prefix_yocto, BigDecimal.valueOf(1E-24), UnitGroup.PREFIX, R.string.prefix_yocto, R.string.prefix_yocto_short),
MyUnit(MyUnitIDS.prefix_ronto, BigDecimal.valueOf(1E-27), UnitGroup.PREFIX, R.string.prefix_ronto, R.string.prefix_ronto_short),
MyUnit(MyUnitIDS.prefix_quecto, BigDecimal.valueOf(1E-30), UnitGroup.PREFIX, R.string.prefix_quecto, R.string.prefix_quecto_short),
)
}

View File

@ -0,0 +1,48 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.sadellie.unitto.data.units.collections
import com.sadellie.unitto.data.model.AbstractUnit
import com.sadellie.unitto.data.model.MyUnit
import com.sadellie.unitto.data.model.UnitGroup
import com.sadellie.unitto.data.units.MyUnitIDS
import com.sadellie.unitto.data.units.R
import java.math.BigDecimal
val torqueCollection: List<AbstractUnit> by lazy {
listOf(
MyUnit(MyUnitIDS.dyne_millimeter, BigDecimal.valueOf(1), UnitGroup.TORQUE, R.string.dyne_millimeter, R.string.dyne_millimeter_short),
MyUnit(MyUnitIDS.dyne_centimeter, BigDecimal.valueOf(10), UnitGroup.TORQUE, R.string.dyne_centimeter, R.string.dyne_centimeter_short),
MyUnit(MyUnitIDS.dyne_meter, BigDecimal.valueOf(1000), UnitGroup.TORQUE, R.string.dyne_meter, R.string.dyne_meter_short),
MyUnit(MyUnitIDS.newton_millimeter, BigDecimal.valueOf(100000), UnitGroup.TORQUE, R.string.newton_millimeter, R.string.newton_millimeter_short),
MyUnit(MyUnitIDS.newton_centimeter, BigDecimal.valueOf(1000000), UnitGroup.TORQUE, R.string.newton_centimeter, R.string.newton_centimeter_short),
MyUnit(MyUnitIDS.newton_meter, BigDecimal.valueOf(100000000), UnitGroup.TORQUE, R.string.newton_meter, R.string.newton_meter_short),
MyUnit(MyUnitIDS.kilonewton_meter, BigDecimal.valueOf(100000000000), UnitGroup.TORQUE, R.string.kilonewton_meter, R.string.kilonewton_meter_short),
MyUnit(MyUnitIDS.gram_force_millimeter, BigDecimal.valueOf(980.665), UnitGroup.TORQUE, R.string.gram_force_millimeter, R.string.gram_force_millimeter_short),
MyUnit(MyUnitIDS.gram_force_centimeter, BigDecimal.valueOf(9806.65), UnitGroup.TORQUE, R.string.gram_force_centimeter, R.string.gram_force_centimeter_short),
MyUnit(MyUnitIDS.kilogram_force_millimeter, BigDecimal.valueOf(980665), UnitGroup.TORQUE, R.string.kilogram_force_millimeter, R.string.kilogram_force_millimeter_short),
MyUnit(MyUnitIDS.gram_force_meter, BigDecimal.valueOf(980665), UnitGroup.TORQUE, R.string.gram_force_meter, R.string.gram_force_meter_short),
MyUnit(MyUnitIDS.kilogram_force_centimeter, BigDecimal.valueOf(9806650), UnitGroup.TORQUE, R.string.kilogram_force_centimeter, R.string.kilogram_force_centimeter_short),
MyUnit(MyUnitIDS.kilogram_force_meter, BigDecimal.valueOf(980665000), UnitGroup.TORQUE, R.string.kilogram_force_meter, R.string.kilogram_force_meter_short),
MyUnit(MyUnitIDS.ounce_force_foot, BigDecimal.valueOf(8473862.4), UnitGroup.TORQUE, R.string.ounce_force_foot, R.string.ounce_force_foot_short),
MyUnit(MyUnitIDS.ounce_force_inch, BigDecimal.valueOf(706155.2), UnitGroup.TORQUE, R.string.ounce_force_inch, R.string.ounce_force_inch_short),
MyUnit(MyUnitIDS.pound_force_foot, BigDecimal.valueOf(135581800), UnitGroup.TORQUE, R.string.pound_force_foot, R.string.pound_force_foot_short),
MyUnit(MyUnitIDS.pound_force_inch, BigDecimal.valueOf(1.1298483333333334E7), UnitGroup.TORQUE, R.string.pound_force_inch, R.string.pound_force_inch_short),
)
}

View File

@ -35,344 +35,429 @@ class AllUnitsTest {
private val allUnitsRepository = AllUnitsRepository() private val allUnitsRepository = AllUnitsRepository()
@Test @Test
fun testAcceleration() { fun testAcceleration() = testWithUnits {
MyUnitIDS.attometer_per_square_second.checkWith(MyUnitIDS.femtometer_per_square_second, "69", "0.069") attometer_per_square_second.checkWith(femtometer_per_square_second, "69", "0.069")
MyUnitIDS.femtometer_per_square_second.checkWith(MyUnitIDS.picometer_per_square_second, "69", "0.069") femtometer_per_square_second.checkWith(picometer_per_square_second, "69", "0.069")
MyUnitIDS.picometer_per_square_second.checkWith(MyUnitIDS.micrometer_per_square_second, "69", "0.00007") picometer_per_square_second.checkWith(micrometer_per_square_second, "69", "0.00007")
MyUnitIDS.nanometer_per_square_second.checkWith(MyUnitIDS.centimeter_per_square_second, "69", "0.000007") nanometer_per_square_second.checkWith(centimeter_per_square_second, "69", "0.000007")
MyUnitIDS.micrometer_per_square_second.checkWith(MyUnitIDS.nanometer_per_square_second, "69", "69000") micrometer_per_square_second.checkWith(nanometer_per_square_second, "69", "69000")
MyUnitIDS.millimeter_per_square_second.checkWith(MyUnitIDS.centimeter_per_square_second, "69", "6.9") millimeter_per_square_second.checkWith(centimeter_per_square_second, "69", "6.9")
MyUnitIDS.centimeter_per_square_second.checkWith(MyUnitIDS.meter_per_square_second, "69", "0.69") centimeter_per_square_second.checkWith(meter_per_square_second, "69", "0.69")
MyUnitIDS.decimeter_per_square_second.checkWith(MyUnitIDS.meter_per_square_second, "69", "6.9") decimeter_per_square_second.checkWith(meter_per_square_second, "69", "6.9")
MyUnitIDS.meter_per_square_second.checkWith(MyUnitIDS.micrometer_per_square_second, "69", "69000000") meter_per_square_second.checkWith(micrometer_per_square_second, "69", "69000000")
MyUnitIDS.kilometer_per_square_second.checkWith(MyUnitIDS.hectometer_per_square_second, "69", "690") kilometer_per_square_second.checkWith(hectometer_per_square_second, "69", "690")
MyUnitIDS.dekameter_per_square_second.checkWith(MyUnitIDS.gal, "69", "69000") dekameter_per_square_second.checkWith(gal, "69", "69000")
MyUnitIDS.hectometer_per_square_second.checkWith(MyUnitIDS.gal, "69", "690000") hectometer_per_square_second.checkWith(gal, "69", "690000")
MyUnitIDS.gal.checkWith(MyUnitIDS.centimeter_per_square_second, "69", "69") gal.checkWith(centimeter_per_square_second, "69", "69")
MyUnitIDS.mercury_surface_gravity.checkWith(MyUnitIDS.meter_per_square_second, "1", "3.7") mercury_surface_gravity.checkWith(meter_per_square_second, "1", "3.7")
MyUnitIDS.venus_surface_gravity.checkWith(MyUnitIDS.meter_per_square_second, "1", "8.87") venus_surface_gravity.checkWith(meter_per_square_second, "1", "8.87")
MyUnitIDS.earth_surface_gravity.checkWith(MyUnitIDS.meter_per_square_second, "1", "9.80655") earth_surface_gravity.checkWith(meter_per_square_second, "1", "9.80655")
MyUnitIDS.mars_surface_gravity.checkWith(MyUnitIDS.meter_per_square_second, "1", "3.71") mars_surface_gravity.checkWith(meter_per_square_second, "1", "3.71")
MyUnitIDS.jupiter_surface_gravity.checkWith(MyUnitIDS.meter_per_square_second, "1", "24.79") jupiter_surface_gravity.checkWith(meter_per_square_second, "1", "24.79")
MyUnitIDS.saturn_surface_gravity.checkWith(MyUnitIDS.meter_per_square_second, "1", "10.44") saturn_surface_gravity.checkWith(meter_per_square_second, "1", "10.44")
MyUnitIDS.uranus_surface_gravity.checkWith(MyUnitIDS.meter_per_square_second, "1", "8.87") uranus_surface_gravity.checkWith(meter_per_square_second, "1", "8.87")
MyUnitIDS.neptune_surface_gravity.checkWith(MyUnitIDS.meter_per_square_second, "1", "11.15") neptune_surface_gravity.checkWith(meter_per_square_second, "1", "11.15")
MyUnitIDS.sun_surface_gravity.checkWith(MyUnitIDS.meter_per_square_second, "1", "274") sun_surface_gravity.checkWith(meter_per_square_second, "1", "274")
} }
@Test @Test
fun testAngle() { fun testAngle() = testWithUnits {
MyUnitIDS.angle_second.checkWith(MyUnitIDS.angle_minute, "420.5", "7.00833") angle_second.checkWith(angle_minute, "420.5", "7.00833")
MyUnitIDS.angle_minute.checkWith(MyUnitIDS.radian, "420.5", "0.12232") angle_minute.checkWith(radian, "420.5", "0.12232")
MyUnitIDS.degree.checkWith(MyUnitIDS.turn, "420.5", "1.16806") degree.checkWith(turn, "420.5", "1.16806")
MyUnitIDS.radian.checkWith(MyUnitIDS.turn, "420.5", "66.92465") radian.checkWith(turn, "420.5", "66.92465")
MyUnitIDS.sextant.checkWith(MyUnitIDS.radian, "420.5", "440.34657") sextant.checkWith(radian, "420.5", "440.34657")
MyUnitIDS.turn.checkWith(MyUnitIDS.angle_minute, "420.5", "9082800") turn.checkWith(angle_minute, "420.5", "9082800")
} }
@Test @Test
fun testArea() { fun testArea() = testWithUnits {
MyUnitIDS.cent.checkWith(MyUnitIDS.acre, "75.9", "7590") cent.checkWith(acre, "75.9", "7590")
MyUnitIDS.acre.checkWith(MyUnitIDS.square_kilometer, "75.9", "0.30716") acre.checkWith(square_kilometer, "75.9", "0.30716")
MyUnitIDS.hectare.checkWith(MyUnitIDS.square_foot, "75.9", "8169808.00585") hectare.checkWith(square_foot, "75.9", "8169808.00585")
MyUnitIDS.square_foot.checkWith(MyUnitIDS.square_decimeter, "75.9", "705.13407") square_foot.checkWith(square_decimeter, "75.9", "705.13407")
MyUnitIDS.square_mile.checkWith(MyUnitIDS.square_foot, "75.9", "2115970560.8762") square_mile.checkWith(square_foot, "75.9", "2115970560.8762")
MyUnitIDS.square_yard.checkWith(MyUnitIDS.square_foot, "75.9", "683.1") square_yard.checkWith(square_foot, "75.9", "683.1")
MyUnitIDS.square_inch.checkWith(MyUnitIDS.square_foot, "75.9", "0.52708") square_inch.checkWith(square_foot, "75.9", "0.52708")
MyUnitIDS.square_micrometer.checkWith(MyUnitIDS.square_millimeter, "75.9", "0.00008") square_micrometer.checkWith(square_millimeter, "75.9", "0.00008")
MyUnitIDS.square_millimeter.checkWith(MyUnitIDS.square_centimeter, "75.9", "0.759") square_millimeter.checkWith(square_centimeter, "75.9", "0.759")
MyUnitIDS.square_centimeter.checkWith(MyUnitIDS.acre, "75.9", "0.000002") square_centimeter.checkWith(acre, "75.9", "0.000002")
MyUnitIDS.square_decimeter.checkWith(MyUnitIDS.square_meter, "75.9", "0.759") square_decimeter.checkWith(square_meter, "75.9", "0.759")
MyUnitIDS.square_meter.checkWith(MyUnitIDS.acre, "75.9", "0.01876") square_meter.checkWith(acre, "75.9", "0.01876")
MyUnitIDS.square_kilometer.checkWith(MyUnitIDS.hectare, "75.9", "7590") square_kilometer.checkWith(hectare, "75.9", "7590")
MyUnitIDS.electron_cross_section.checkWith(MyUnitIDS.square_micrometer, "75.9", "0.000000000000005") electron_cross_section.checkWith(square_micrometer, "75.9", "0.000000000000005")
} }
@Test @Test
fun testDataTransfer() { fun testDataTransfer() = testWithUnits {
MyUnitIDS.bit_per_second.checkWith(MyUnitIDS.kilobit_per_second, "2048", "2.048") bit_per_second.checkWith(kilobit_per_second, "2048", "2.048")
MyUnitIDS.kibibit_per_second.checkWith(MyUnitIDS.bit_per_second, "2048", "2097152") kibibit_per_second.checkWith(bit_per_second, "2048", "2097152")
MyUnitIDS.kilobit_per_second.checkWith(MyUnitIDS.bit_per_second, "2048", "2048000") kilobit_per_second.checkWith(bit_per_second, "2048", "2048000")
MyUnitIDS.megabit_per_second.checkWith(MyUnitIDS.kilobit_per_second, "2048", "2048000") megabit_per_second.checkWith(kilobit_per_second, "2048", "2048000")
MyUnitIDS.mebibit_per_second.checkWith(MyUnitIDS.kilobit_per_second, "2048", "2147483.648") mebibit_per_second.checkWith(kilobit_per_second, "2048", "2147483.648")
MyUnitIDS.gigabit_per_second.checkWith(MyUnitIDS.kilobit_per_second, "2048", "2048000000") gigabit_per_second.checkWith(kilobit_per_second, "2048", "2048000000")
MyUnitIDS.terabit_per_second.checkWith(MyUnitIDS.gigabyte_per_second, "2048", "256000") terabit_per_second.checkWith(gigabyte_per_second, "2048", "256000")
MyUnitIDS.petabit_per_second.checkWith(MyUnitIDS.gigabyte_per_second, "2048", "256000000") petabit_per_second.checkWith(gigabyte_per_second, "2048", "256000000")
MyUnitIDS.exabit_per_second.checkWith(MyUnitIDS.petabit_per_second, "2048", "2048000") exabit_per_second.checkWith(petabit_per_second, "2048", "2048000")
MyUnitIDS.byte_per_second.checkWith(MyUnitIDS.bit_per_second, "2048", "16384") byte_per_second.checkWith(bit_per_second, "2048", "16384")
MyUnitIDS.kibibyte_per_second.checkWith(MyUnitIDS.bit_per_second, "2048", "16777216") kibibyte_per_second.checkWith(bit_per_second, "2048", "16777216")
MyUnitIDS.kilobyte_per_second.checkWith(MyUnitIDS.kibibit_per_second, "2048", "16000") kilobyte_per_second.checkWith(kibibit_per_second, "2048", "16000")
MyUnitIDS.megabyte_per_second.checkWith(MyUnitIDS.kilobyte_per_second, "2048", "2048000") megabyte_per_second.checkWith(kilobyte_per_second, "2048", "2048000")
MyUnitIDS.mebibyte_per_second.checkWith(MyUnitIDS.bit_per_second, "2048", "17179869184") mebibyte_per_second.checkWith(bit_per_second, "2048", "17179869184")
MyUnitIDS.gigabyte_per_second.checkWith(MyUnitIDS.kilobyte_per_second, "2048", "2048000000") gigabyte_per_second.checkWith(kilobyte_per_second, "2048", "2048000000")
MyUnitIDS.terabyte_per_second.checkWith(MyUnitIDS.gigabyte_per_second, "2048", "2048000") terabyte_per_second.checkWith(gigabyte_per_second, "2048", "2048000")
MyUnitIDS.petabyte_per_second.checkWith(MyUnitIDS.terabyte_per_second, "2048", "2048000") petabyte_per_second.checkWith(terabyte_per_second, "2048", "2048000")
MyUnitIDS.exabyte_per_second.checkWith(MyUnitIDS.petabyte_per_second, "2048", "2048000") exabyte_per_second.checkWith(petabyte_per_second, "2048", "2048000")
} }
@Test @Test
fun testEnergy() { fun testEnergy() = testWithUnits {
MyUnitIDS.electron_volt.checkWith(MyUnitIDS.joule, "56000000000000000000", "8.97219") electron_volt.checkWith(joule, "56000000000000000000", "8.97219")
MyUnitIDS.attojoule.checkWith(MyUnitIDS.calorie_th, "41840000000000", "0.00001") attojoule.checkWith(calorie_th, "41840000000000", "0.00001")
MyUnitIDS.joule.checkWith(MyUnitIDS.kilocalorie_th, "4184", "1") joule.checkWith(kilocalorie_th, "4184", "1")
MyUnitIDS.kilojoule.checkWith(MyUnitIDS.calorie_th, "4184000000", "1000000000000") kilojoule.checkWith(calorie_th, "4184000000", "1000000000000")
MyUnitIDS.megajoule.checkWith(MyUnitIDS.calorie_th, "0.4184", "100000") megajoule.checkWith(calorie_th, "0.4184", "100000")
MyUnitIDS.gigajoule.checkWith(MyUnitIDS.calorie_th, "0.4184", "100000000") gigajoule.checkWith(calorie_th, "0.4184", "100000000")
MyUnitIDS.energy_ton.checkWith(MyUnitIDS.calorie_th, "0.4184", "418400000") energy_ton.checkWith(calorie_th, "0.4184", "418400000")
MyUnitIDS.kiloton.checkWith(MyUnitIDS.calorie_th, "0.4184", "418400000000") kiloton.checkWith(calorie_th, "0.4184", "418400000000")
MyUnitIDS.megaton.checkWith(MyUnitIDS.calorie_th, "0.4184", "418400000000000") megaton.checkWith(calorie_th, "0.4184", "418400000000000")
MyUnitIDS.gigaton.checkWith(MyUnitIDS.calorie_th, "0.000000004184", "4184000000") gigaton.checkWith(calorie_th, "0.000000004184", "4184000000")
MyUnitIDS.energy_horse_power_metric.checkWith(MyUnitIDS.joule, "10", "26477955") energy_horse_power_metric.checkWith(joule, "10", "26477955")
MyUnitIDS.calorie_th.checkWith(MyUnitIDS.joule, "10", "41.84") calorie_th.checkWith(joule, "10", "41.84")
MyUnitIDS.kilocalorie_th.checkWith(MyUnitIDS.joule, "10", "41840") kilocalorie_th.checkWith(joule, "10", "41840")
} }
@Test @Test
fun testFileSize() { fun testFileSize() = testWithUnits {
MyUnitIDS.bit.checkWith(MyUnitIDS.kilobit, "2048", "2.048") bit.checkWith(kilobit, "2048", "2.048")
MyUnitIDS.kibibit.checkWith(MyUnitIDS.bit, "2048", "2097152") kibibit.checkWith(bit, "2048", "2097152")
MyUnitIDS.kilobit.checkWith(MyUnitIDS.bit, "2048", "2048000") kilobit.checkWith(bit, "2048", "2048000")
MyUnitIDS.megabit.checkWith(MyUnitIDS.kilobit, "2048", "2048000") megabit.checkWith(kilobit, "2048", "2048000")
MyUnitIDS.mebibit.checkWith(MyUnitIDS.kilobit, "2048", "2147483.648") mebibit.checkWith(kilobit, "2048", "2147483.648")
MyUnitIDS.gigabit.checkWith(MyUnitIDS.kilobit, "2048", "2048000000") gigabit.checkWith(kilobit, "2048", "2048000000")
MyUnitIDS.terabit.checkWith(MyUnitIDS.gigabyte, "2048", "256000") terabit.checkWith(gigabyte, "2048", "256000")
MyUnitIDS.petabit.checkWith(MyUnitIDS.gigabyte, "2048", "256000000") petabit.checkWith(gigabyte, "2048", "256000000")
MyUnitIDS.exabit.checkWith(MyUnitIDS.petabit, "2048", "2048000") exabit.checkWith(petabit, "2048", "2048000")
MyUnitIDS.byte.checkWith(MyUnitIDS.bit, "2048", "16384") byte.checkWith(bit, "2048", "16384")
MyUnitIDS.kibibyte.checkWith(MyUnitIDS.bit, "2048", "16777216") kibibyte.checkWith(bit, "2048", "16777216")
MyUnitIDS.kilobyte.checkWith(MyUnitIDS.kibibit, "2048", "16000") kilobyte.checkWith(kibibit, "2048", "16000")
MyUnitIDS.megabyte.checkWith(MyUnitIDS.kilobyte, "2048", "2048000") megabyte.checkWith(kilobyte, "2048", "2048000")
MyUnitIDS.mebibyte.checkWith(MyUnitIDS.bit, "2048", "17179869184") mebibyte.checkWith(bit, "2048", "17179869184")
MyUnitIDS.gigabyte.checkWith(MyUnitIDS.kilobyte, "2048", "2048000000") gigabyte.checkWith(kilobyte, "2048", "2048000000")
MyUnitIDS.terabyte.checkWith(MyUnitIDS.gigabyte, "2048", "2048000") terabyte.checkWith(gigabyte, "2048", "2048000")
MyUnitIDS.petabyte.checkWith(MyUnitIDS.terabyte, "2048", "2048000") petabyte.checkWith(terabyte, "2048", "2048000")
MyUnitIDS.exabyte.checkWith(MyUnitIDS.petabyte, "2048", "2048000") exabyte.checkWith(petabyte, "2048", "2048000")
} }
@Test @Test
fun testLength() { fun testLength() = testWithUnits {
MyUnitIDS.attometer.checkWith(MyUnitIDS.micrometer, "158000000000.7", "0.158") attometer.checkWith(micrometer, "158000000000.7", "0.158")
MyUnitIDS.nanometer.checkWith(MyUnitIDS.inch, "158000000000.7", "6220.47244") nanometer.checkWith(inch, "158000000000.7", "6220.47244")
MyUnitIDS.micrometer.checkWith(MyUnitIDS.inch, "158000000000.7", "6220472.44097") micrometer.checkWith(inch, "158000000000.7", "6220472.44097")
MyUnitIDS.millimeter.checkWith(MyUnitIDS.inch, "158000.7", "6220.5") millimeter.checkWith(inch, "158000.7", "6220.5")
MyUnitIDS.centimeter.checkWith(MyUnitIDS.inch, "158000.7", "62205") centimeter.checkWith(inch, "158000.7", "62205")
MyUnitIDS.decimeter.checkWith(MyUnitIDS.foot, "158000.7", "51837.5") decimeter.checkWith(foot, "158000.7", "51837.5")
MyUnitIDS.meter.checkWith(MyUnitIDS.yard, "158000.7", "172791.66667") meter.checkWith(yard, "158000.7", "172791.66667")
MyUnitIDS.kilometer.checkWith(MyUnitIDS.mile, "100", "62.13712") kilometer.checkWith(mile, "100", "62.13712")
MyUnitIDS.nautical_mile.checkWith(MyUnitIDS.kilometer, "100", "185.2") nautical_mile.checkWith(kilometer, "100", "185.2")
MyUnitIDS.inch.checkWith(MyUnitIDS.foot, "100", "8.33333") inch.checkWith(foot, "100", "8.33333")
MyUnitIDS.foot.checkWith(MyUnitIDS.inch, "100", "1200") foot.checkWith(inch, "100", "1200")
MyUnitIDS.yard.checkWith(MyUnitIDS.foot, "100", "300") yard.checkWith(foot, "100", "300")
MyUnitIDS.mile.checkWith(MyUnitIDS.foot, "100", "528000") mile.checkWith(foot, "100", "528000")
MyUnitIDS.light_year.checkWith(MyUnitIDS.foot, "0.0000001", "3103914196.85037") light_year.checkWith(foot, "0.0000001", "3103914196.85037")
MyUnitIDS.parsec.checkWith(MyUnitIDS.foot, "0.00000001", "1012361411.25044") parsec.checkWith(foot, "0.00000001", "1012361411.25044")
MyUnitIDS.kiloparsec.checkWith(MyUnitIDS.foot, "0.00000000001", "1012361411.25044") kiloparsec.checkWith(foot, "0.00000000001", "1012361411.25044")
MyUnitIDS.megaparsec.checkWith(MyUnitIDS.foot, "0.00000000000001", "1012361411.25044") megaparsec.checkWith(foot, "0.00000000000001", "1012361411.25044")
MyUnitIDS.mercury_equatorial_radius.checkWith(MyUnitIDS.kilometer, "1", "2439.7") mercury_equatorial_radius.checkWith(kilometer, "1", "2439.7")
MyUnitIDS.venus_equatorial_radius.checkWith(MyUnitIDS.kilometer, "1", "6051.8") venus_equatorial_radius.checkWith(kilometer, "1", "6051.8")
MyUnitIDS.earth_equatorial_radius.checkWith(MyUnitIDS.kilometer, "1", "6371") earth_equatorial_radius.checkWith(kilometer, "1", "6371")
MyUnitIDS.mars_equatorial_radius.checkWith(MyUnitIDS.kilometer, "1", "3389.5") mars_equatorial_radius.checkWith(kilometer, "1", "3389.5")
MyUnitIDS.jupiter_equatorial_radius.checkWith(MyUnitIDS.kilometer, "1", "69911") jupiter_equatorial_radius.checkWith(kilometer, "1", "69911")
MyUnitIDS.saturn_equatorial_radius.checkWith(MyUnitIDS.kilometer, "1", "58232") saturn_equatorial_radius.checkWith(kilometer, "1", "58232")
MyUnitIDS.uranus_equatorial_radius.checkWith(MyUnitIDS.kilometer, "1", "25362") uranus_equatorial_radius.checkWith(kilometer, "1", "25362")
MyUnitIDS.neptune_equatorial_radius.checkWith(MyUnitIDS.kilometer, "1", "24622") neptune_equatorial_radius.checkWith(kilometer, "1", "24622")
MyUnitIDS.sun_equatorial_radius.checkWith(MyUnitIDS.kilometer, "1", "695508") sun_equatorial_radius.checkWith(kilometer, "1", "695508")
} }
@Test @Test
fun testMass() { fun testMass() = testWithUnits {
MyUnitIDS.electron_mass_rest.checkWith(MyUnitIDS.milligram, "1500000000000000000", "0.000001") electron_mass_rest.checkWith(milligram, "1500000000000000000", "0.000001")
MyUnitIDS.atomic_mass_unit.checkWith(MyUnitIDS.electron_mass_rest, "150", "273433.27951") atomic_mass_unit.checkWith(electron_mass_rest, "150", "273433.27951")
MyUnitIDS.milligram.checkWith(MyUnitIDS.ounce, "1500", "0.05291") milligram.checkWith(ounce, "1500", "0.05291")
MyUnitIDS.gram.checkWith(MyUnitIDS.ounce, "1500", "52.91094") gram.checkWith(ounce, "1500", "52.91094")
MyUnitIDS.kilogram.checkWith(MyUnitIDS.carat, "1500", "7500000") kilogram.checkWith(carat, "1500", "7500000")
MyUnitIDS.metric_ton.checkWith(MyUnitIDS.carat, "1500", "7500000000") metric_ton.checkWith(carat, "1500", "7500000000")
MyUnitIDS.imperial_ton.checkWith(MyUnitIDS.kilogram, "1500", "1524070.3632") imperial_ton.checkWith(kilogram, "1500", "1524070.3632")
MyUnitIDS.ounce.checkWith(MyUnitIDS.pound, "1500", "93.75") ounce.checkWith(pound, "1500", "93.75")
MyUnitIDS.carat.checkWith(MyUnitIDS.pound, "1500", "0.66139") carat.checkWith(pound, "1500", "0.66139")
MyUnitIDS.pound.checkWith(MyUnitIDS.kilogram, "1500", "680.38856") pound.checkWith(kilogram, "1500", "680.38856")
MyUnitIDS.mercury_mass.checkWith(MyUnitIDS.kilogram, "1", "330104000000000000000000") mercury_mass.checkWith(kilogram, "1", "330104000000000000000000")
MyUnitIDS.venus_mass.checkWith(MyUnitIDS.kilogram, "1", "4867320000000000000000000") venus_mass.checkWith(kilogram, "1", "4867320000000000000000000")
MyUnitIDS.earth_mass.checkWith(MyUnitIDS.kilogram, "1", "5972190000000000000000000") earth_mass.checkWith(kilogram, "1", "5972190000000000000000000")
MyUnitIDS.mars_mass.checkWith(MyUnitIDS.kilogram, "1", "641693000000000000000000") mars_mass.checkWith(kilogram, "1", "641693000000000000000000")
MyUnitIDS.jupiter_mass.checkWith(MyUnitIDS.kilogram, "1", "1898130000000000000000000000") jupiter_mass.checkWith(kilogram, "1", "1898130000000000000000000000")
MyUnitIDS.saturn_mass.checkWith(MyUnitIDS.kilogram, "1", "568319000000000000000000000") saturn_mass.checkWith(kilogram, "1", "568319000000000000000000000")
MyUnitIDS.uranus_mass.checkWith(MyUnitIDS.kilogram, "1", "86810300000000000000000000") uranus_mass.checkWith(kilogram, "1", "86810300000000000000000000")
MyUnitIDS.neptune_mass.checkWith(MyUnitIDS.kilogram, "1", "102410000000000000000000000") neptune_mass.checkWith(kilogram, "1", "102410000000000000000000000")
MyUnitIDS.sun_mass.checkWith(MyUnitIDS.kilogram, "1", "1989100000000000000000000000000") sun_mass.checkWith(kilogram, "1", "1989100000000000000000000000000")
} }
@Test @Test
fun testPower() { fun testPower() = testWithUnits {
MyUnitIDS.attowatt.checkWith(MyUnitIDS.watt, "3950000000000000", "0.00395") attowatt.checkWith(watt, "3950000000000000", "0.00395")
MyUnitIDS.watt.checkWith(MyUnitIDS.kilowatt, "395", "0.395") watt.checkWith(kilowatt, "395", "0.395")
MyUnitIDS.kilowatt.checkWith(MyUnitIDS.horse_power_mechanical, "395", "529.70373") kilowatt.checkWith(horse_power_mechanical, "395", "529.70373")
MyUnitIDS.megawatt.checkWith(MyUnitIDS.horse_power_mechanical, "395", "529703.72539") megawatt.checkWith(horse_power_mechanical, "395", "529703.72539")
MyUnitIDS.horse_power_mechanical.checkWith(MyUnitIDS.kilowatt, "395", "294.55145") horse_power_mechanical.checkWith(kilowatt, "395", "294.55145")
} }
@Test @Test
fun testPressure() { fun testPressure() = testWithUnits {
MyUnitIDS.attopascal.checkWith(MyUnitIDS.femtopascal, "456", "0.456") attopascal.checkWith(femtopascal, "456", "0.456")
MyUnitIDS.femtopascal.checkWith(MyUnitIDS.picopascal, "456", "0.456") femtopascal.checkWith(picopascal, "456", "0.456")
MyUnitIDS.picopascal.checkWith(MyUnitIDS.nanopascal, "456", "0.456") picopascal.checkWith(nanopascal, "456", "0.456")
MyUnitIDS.nanopascal.checkWith(MyUnitIDS.micropascal, "456", "0.456") nanopascal.checkWith(micropascal, "456", "0.456")
MyUnitIDS.micropascal.checkWith(MyUnitIDS.millipascal, "456", "0.456") micropascal.checkWith(millipascal, "456", "0.456")
MyUnitIDS.millipascal.checkWith(MyUnitIDS.centipascal, "456", "45.6") millipascal.checkWith(centipascal, "456", "45.6")
MyUnitIDS.centipascal.checkWith(MyUnitIDS.decipascal, "456", "45.6") centipascal.checkWith(decipascal, "456", "45.6")
MyUnitIDS.decipascal.checkWith(MyUnitIDS.dekapascal, "456", "4.56") decipascal.checkWith(dekapascal, "456", "4.56")
MyUnitIDS.pascal.checkWith(MyUnitIDS.bar, "456", "0.00456") pascal.checkWith(bar, "456", "0.00456")
MyUnitIDS.dekapascal.checkWith(MyUnitIDS.bar, "456", "0.0456") dekapascal.checkWith(bar, "456", "0.0456")
MyUnitIDS.hectopascal.checkWith(MyUnitIDS.psi, "456", "6.61372") hectopascal.checkWith(psi, "456", "6.61372")
MyUnitIDS.millibar.checkWith(MyUnitIDS.psi, "456", "6.61372") millibar.checkWith(psi, "456", "6.61372")
MyUnitIDS.bar.checkWith(MyUnitIDS.ksi, "456", "6.61372") bar.checkWith(ksi, "456", "6.61372")
MyUnitIDS.kilopascal.checkWith(MyUnitIDS.psi, "456", "66.13721") kilopascal.checkWith(psi, "456", "66.13721")
MyUnitIDS.megapascal.checkWith(MyUnitIDS.ksi, "456", "66.13721") megapascal.checkWith(ksi, "456", "66.13721")
MyUnitIDS.gigapascal.checkWith(MyUnitIDS.torr, "456", "3420281273.13024") gigapascal.checkWith(torr, "456", "3420281273.13024")
MyUnitIDS.terapascal.checkWith(MyUnitIDS.gigapascal, "456", "456000") terapascal.checkWith(gigapascal, "456", "456000")
MyUnitIDS.petapascal.checkWith(MyUnitIDS.gigapascal, "456", "456000000") petapascal.checkWith(gigapascal, "456", "456000000")
MyUnitIDS.exapascal.checkWith(MyUnitIDS.gigapascal, "456", "456000000000") exapascal.checkWith(gigapascal, "456", "456000000000")
MyUnitIDS.psi.checkWith(MyUnitIDS.gigapascal, "456", "0.00314") psi.checkWith(gigapascal, "456", "0.00314")
MyUnitIDS.ksi.checkWith(MyUnitIDS.gigapascal, "456", "3.14401") ksi.checkWith(gigapascal, "456", "3.14401")
MyUnitIDS.standard_atmosphere.checkWith(MyUnitIDS.torr, "456", "346560") standard_atmosphere.checkWith(torr, "456", "346560")
MyUnitIDS.torr.checkWith(MyUnitIDS.hectopascal, "456", "607.95") torr.checkWith(hectopascal, "456", "607.95")
MyUnitIDS.micron_of_mercury.checkWith(MyUnitIDS.hectopascal, "456", "0.60795") micron_of_mercury.checkWith(hectopascal, "456", "0.60795")
MyUnitIDS.millimeter_of_mercury.checkWith(MyUnitIDS.hectopascal, "456", "607.95") millimeter_of_mercury.checkWith(hectopascal, "456", "607.95")
} }
@Test @Test
fun testSpeed() { fun testSpeed() = testWithUnits {
MyUnitIDS.millimeter_per_hour.checkWith(MyUnitIDS.kilometer_per_hour, "396", "0.0004") millimeter_per_hour.checkWith(kilometer_per_hour, "396", "0.0004")
MyUnitIDS.millimeter_per_minute.checkWith(MyUnitIDS.kilometer_per_hour, "396", "0.02376") millimeter_per_minute.checkWith(kilometer_per_hour, "396", "0.02376")
MyUnitIDS.millimeter_per_second.checkWith(MyUnitIDS.kilometer_per_hour, "396", "1.4256") millimeter_per_second.checkWith(kilometer_per_hour, "396", "1.4256")
MyUnitIDS.centimeter_per_hour.checkWith(MyUnitIDS.kilometer_per_hour, "396", "0.00396") centimeter_per_hour.checkWith(kilometer_per_hour, "396", "0.00396")
MyUnitIDS.centimeter_per_minute.checkWith(MyUnitIDS.kilometer_per_hour, "396", "0.2376") centimeter_per_minute.checkWith(kilometer_per_hour, "396", "0.2376")
MyUnitIDS.centimeter_per_second.checkWith(MyUnitIDS.kilometer_per_hour, "396", "14.256") centimeter_per_second.checkWith(kilometer_per_hour, "396", "14.256")
MyUnitIDS.meter_per_hour.checkWith(MyUnitIDS.kilometer_per_hour, "396", "0.396") meter_per_hour.checkWith(kilometer_per_hour, "396", "0.396")
MyUnitIDS.meter_per_minute.checkWith(MyUnitIDS.kilometer_per_hour, "396", "23.76") meter_per_minute.checkWith(kilometer_per_hour, "396", "23.76")
MyUnitIDS.meter_per_second.checkWith(MyUnitIDS.kilometer_per_hour, "396", "1425.6") meter_per_second.checkWith(kilometer_per_hour, "396", "1425.6")
MyUnitIDS.kilometer_per_hour.checkWith(MyUnitIDS.mile_per_hour, "396", "246.06299") kilometer_per_hour.checkWith(mile_per_hour, "396", "246.06299")
MyUnitIDS.kilometer_per_minute.checkWith(MyUnitIDS.mile_per_hour, "396", "14763.77953") kilometer_per_minute.checkWith(mile_per_hour, "396", "14763.77953")
MyUnitIDS.kilometer_per_second.checkWith(MyUnitIDS.mile_per_hour, "396", "885826.77165") kilometer_per_second.checkWith(mile_per_hour, "396", "885826.77165")
MyUnitIDS.foot_per_hour.checkWith(MyUnitIDS.mile_per_hour, "396", "0.075") foot_per_hour.checkWith(mile_per_hour, "396", "0.075")
MyUnitIDS.foot_per_minute.checkWith(MyUnitIDS.mile_per_hour, "396", "4.5") foot_per_minute.checkWith(mile_per_hour, "396", "4.5")
MyUnitIDS.foot_per_second.checkWith(MyUnitIDS.mile_per_hour, "396", "270") foot_per_second.checkWith(mile_per_hour, "396", "270")
MyUnitIDS.yard_per_hour.checkWith(MyUnitIDS.mile_per_hour, "396", "0.225") yard_per_hour.checkWith(mile_per_hour, "396", "0.225")
MyUnitIDS.yard_per_minute.checkWith(MyUnitIDS.mile_per_hour, "396", "13.5") yard_per_minute.checkWith(mile_per_hour, "396", "13.5")
MyUnitIDS.yard_per_second.checkWith(MyUnitIDS.mile_per_hour, "396", "810") yard_per_second.checkWith(mile_per_hour, "396", "810")
MyUnitIDS.mile_per_hour.checkWith(MyUnitIDS.foot_per_hour, "396", "2090880") mile_per_hour.checkWith(foot_per_hour, "396", "2090880")
MyUnitIDS.mile_per_minute.checkWith(MyUnitIDS.foot_per_hour, "396", "125452800") mile_per_minute.checkWith(foot_per_hour, "396", "125452800")
MyUnitIDS.mile_per_second.checkWith(MyUnitIDS.foot_per_hour, "396", "7527168000") mile_per_second.checkWith(foot_per_hour, "396", "7527168000")
MyUnitIDS.knot.checkWith(MyUnitIDS.meter_per_hour, "396", "733392") knot.checkWith(meter_per_hour, "396", "733392")
MyUnitIDS.velocity_of_light_in_vacuum.checkWith(MyUnitIDS.meter_per_second, "1", "299792458") velocity_of_light_in_vacuum.checkWith(meter_per_second, "1", "299792458")
MyUnitIDS.cosmic_velocity_first.checkWith(MyUnitIDS.meter_per_second, "1", "7900") cosmic_velocity_first.checkWith(meter_per_second, "1", "7900")
MyUnitIDS.cosmic_velocity_second.checkWith(MyUnitIDS.meter_per_second, "1", "11200") cosmic_velocity_second.checkWith(meter_per_second, "1", "11200")
MyUnitIDS.cosmic_velocity_third.checkWith(MyUnitIDS.meter_per_second, "1", "16670") cosmic_velocity_third.checkWith(meter_per_second, "1", "16670")
MyUnitIDS.earths_orbital_speed.checkWith(MyUnitIDS.meter_per_second, "1", "29765") earths_orbital_speed.checkWith(meter_per_second, "1", "29765")
MyUnitIDS.mach.checkWith(MyUnitIDS.meter_per_second, "1", "343.6") mach.checkWith(meter_per_second, "1", "343.6")
MyUnitIDS.mach_si_standard.checkWith(MyUnitIDS.meter_per_second, "1", "295.0464") mach_si_standard.checkWith(meter_per_second, "1", "295.0464")
} }
@Test @Test
fun testTemperature() { fun testTemperature() = testWithUnits {
MyUnitIDS.celsius.checkWith(MyUnitIDS.celsius, "0", "0") celsius.checkWith(celsius, "0", "0")
MyUnitIDS.celsius.checkWith(MyUnitIDS.fahrenheit, "0", "32") celsius.checkWith(fahrenheit, "0", "32")
MyUnitIDS.celsius.checkWith(MyUnitIDS.kelvin, "0", "273.15") celsius.checkWith(kelvin, "0", "273.15")
MyUnitIDS.celsius.checkWith(MyUnitIDS.celsius, "36.6", "36.6") celsius.checkWith(celsius, "36.6", "36.6")
MyUnitIDS.celsius.checkWith(MyUnitIDS.fahrenheit, "36.6", "97.88") celsius.checkWith(fahrenheit, "36.6", "97.88")
MyUnitIDS.celsius.checkWith(MyUnitIDS.kelvin, "36.6", "309.75") celsius.checkWith(kelvin, "36.6", "309.75")
MyUnitIDS.celsius.checkWith(MyUnitIDS.celsius, "-36.6", "-36.6") celsius.checkWith(celsius, "-36.6", "-36.6")
MyUnitIDS.celsius.checkWith(MyUnitIDS.fahrenheit, "-36.6", "-33.88") celsius.checkWith(fahrenheit, "-36.6", "-33.88")
MyUnitIDS.celsius.checkWith(MyUnitIDS.kelvin, "-36.6", "236.55") celsius.checkWith(kelvin, "-36.6", "236.55")
MyUnitIDS.fahrenheit.checkWith(MyUnitIDS.celsius, "0", "-17.77778") fahrenheit.checkWith(celsius, "0", "-17.77778")
MyUnitIDS.fahrenheit.checkWith(MyUnitIDS.fahrenheit, "0", "0") fahrenheit.checkWith(fahrenheit, "0", "0")
MyUnitIDS.fahrenheit.checkWith(MyUnitIDS.kelvin, "0", "255.37222") fahrenheit.checkWith(kelvin, "0", "255.37222")
MyUnitIDS.fahrenheit.checkWith(MyUnitIDS.celsius, "36.6", "2.55556") fahrenheit.checkWith(celsius, "36.6", "2.55556")
MyUnitIDS.fahrenheit.checkWith(MyUnitIDS.fahrenheit, "36.6", "36.6") fahrenheit.checkWith(fahrenheit, "36.6", "36.6")
MyUnitIDS.fahrenheit.checkWith(MyUnitIDS.kelvin, "36.6", "275.70556") fahrenheit.checkWith(kelvin, "36.6", "275.70556")
MyUnitIDS.fahrenheit.checkWith(MyUnitIDS.celsius, "-36.6", "-38.11111") fahrenheit.checkWith(celsius, "-36.6", "-38.11111")
MyUnitIDS.fahrenheit.checkWith(MyUnitIDS.fahrenheit, "-36.6", "-36.6") fahrenheit.checkWith(fahrenheit, "-36.6", "-36.6")
MyUnitIDS.fahrenheit.checkWith(MyUnitIDS.kelvin, "-36.6", "235.03889") fahrenheit.checkWith(kelvin, "-36.6", "235.03889")
MyUnitIDS.kelvin.checkWith(MyUnitIDS.celsius, "0", "-273.15") kelvin.checkWith(celsius, "0", "-273.15")
MyUnitIDS.kelvin.checkWith(MyUnitIDS.fahrenheit, "0", "-459.67") kelvin.checkWith(fahrenheit, "0", "-459.67")
MyUnitIDS.kelvin.checkWith(MyUnitIDS.kelvin, "0", "0") kelvin.checkWith(kelvin, "0", "0")
MyUnitIDS.kelvin.checkWith(MyUnitIDS.celsius, "36.6", "-236.55") kelvin.checkWith(celsius, "36.6", "-236.55")
MyUnitIDS.kelvin.checkWith(MyUnitIDS.fahrenheit, "36.6", "-393.79") kelvin.checkWith(fahrenheit, "36.6", "-393.79")
MyUnitIDS.kelvin.checkWith(MyUnitIDS.kelvin, "36.6", "36.6") kelvin.checkWith(kelvin, "36.6", "36.6")
MyUnitIDS.kelvin.checkWith(MyUnitIDS.celsius, "-36.6", "-309.75") kelvin.checkWith(celsius, "-36.6", "-309.75")
MyUnitIDS.kelvin.checkWith(MyUnitIDS.fahrenheit, "-36.6", "-525.55") kelvin.checkWith(fahrenheit, "-36.6", "-525.55")
MyUnitIDS.kelvin.checkWith(MyUnitIDS.kelvin, "-36.6", "-36.6") kelvin.checkWith(kelvin, "-36.6", "-36.6")
} }
@Test @Test
fun testTime() { fun testTime() = testWithUnits {
MyUnitIDS.attosecond.checkWith(MyUnitIDS.millisecond, "366000000000", "0.00037") attosecond.checkWith(millisecond, "366000000000", "0.00037")
MyUnitIDS.nanosecond.checkWith(MyUnitIDS.millisecond, "366", "0.00037") nanosecond.checkWith(millisecond, "366", "0.00037")
MyUnitIDS.microsecond.checkWith(MyUnitIDS.millisecond, "366", "0.366") microsecond.checkWith(millisecond, "366", "0.366")
MyUnitIDS.millisecond.checkWith(MyUnitIDS.second, "366", "0.366") millisecond.checkWith(second, "366", "0.366")
MyUnitIDS.jiffy.checkWith(MyUnitIDS.second, "366", "3.66") jiffy.checkWith(second, "366", "3.66")
MyUnitIDS.second.checkWith(MyUnitIDS.millisecond, "366", "366000") second.checkWith(millisecond, "366", "366000")
MyUnitIDS.minute.checkWith(MyUnitIDS.millisecond, "366", "21960000") minute.checkWith(millisecond, "366", "21960000")
MyUnitIDS.hour.checkWith(MyUnitIDS.millisecond, "366", "1317600000") hour.checkWith(millisecond, "366", "1317600000")
MyUnitIDS.day.checkWith(MyUnitIDS.hour, "366", "8784") day.checkWith(hour, "366", "8784")
MyUnitIDS.week.checkWith(MyUnitIDS.hour, "366", "61488") week.checkWith(hour, "366", "61488")
} }
@Test @Test
fun testVolume() { fun testVolume() = testWithUnits {
MyUnitIDS.attoliter.checkWith(MyUnitIDS.millimeter, "1507000000000", "0.00151") attoliter.checkWith(millimeter, "1507000000000", "0.00151")
MyUnitIDS.milliliter.checkWith(MyUnitIDS.liter, "1507", "1.507") milliliter.checkWith(liter, "1507", "1.507")
MyUnitIDS.liter.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "398.10728") liter.checkWith(us_liquid_gallon, "1507", "398.10728")
MyUnitIDS.us_liquid_gallon.checkWith(MyUnitIDS.us_fluid_ounce, "1507", "192896") us_liquid_gallon.checkWith(us_fluid_ounce, "1507", "192896")
MyUnitIDS.us_liquid_quart.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "376.75") us_liquid_quart.checkWith(us_liquid_gallon, "1507", "376.75")
MyUnitIDS.us_liquid_pint.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "188.375") us_liquid_pint.checkWith(us_liquid_gallon, "1507", "188.375")
MyUnitIDS.us_legal_cup.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "94.1875") us_legal_cup.checkWith(us_liquid_gallon, "1507", "94.1875")
MyUnitIDS.us_fluid_ounce.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "11.77344") us_fluid_ounce.checkWith(us_liquid_gallon, "1507", "11.77344")
MyUnitIDS.us_tablespoon.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "5.88672") us_tablespoon.checkWith(us_liquid_gallon, "1507", "5.88672")
MyUnitIDS.us_teaspoon.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "1.96224") us_teaspoon.checkWith(us_liquid_gallon, "1507", "1.96224")
MyUnitIDS.imperial_gallon.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "1809.83154") imperial_gallon.checkWith(us_liquid_gallon, "1507", "1809.83154")
MyUnitIDS.imperial_quart.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "452.45788") imperial_quart.checkWith(us_liquid_gallon, "1507", "452.45788")
MyUnitIDS.imperial_pint.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "226.22894") imperial_pint.checkWith(us_liquid_gallon, "1507", "226.22894")
MyUnitIDS.imperial_cup.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "113.11447") imperial_cup.checkWith(us_liquid_gallon, "1507", "113.11447")
MyUnitIDS.imperial_fluid_ounce.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "11.31145") imperial_fluid_ounce.checkWith(us_liquid_gallon, "1507", "11.31145")
MyUnitIDS.imperial_tablespoon.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "7.06965") imperial_tablespoon.checkWith(us_liquid_gallon, "1507", "7.06965")
MyUnitIDS.imperial_teaspoon.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "2.35655") imperial_teaspoon.checkWith(us_liquid_gallon, "1507", "2.35655")
MyUnitIDS.cubic_millimeter.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "0.0004") cubic_millimeter.checkWith(us_liquid_gallon, "1507", "0.0004")
MyUnitIDS.cubic_centimeter.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "0.39811") cubic_centimeter.checkWith(us_liquid_gallon, "1507", "0.39811")
MyUnitIDS.cubic_meter.checkWith(MyUnitIDS.us_liquid_gallon, "1507", "398107.2829") cubic_meter.checkWith(us_liquid_gallon, "1507", "398107.2829")
MyUnitIDS.cubic_kilometer.checkWith(MyUnitIDS.us_liquid_gallon, "0.0000001507", "39810.72829") cubic_kilometer.checkWith(us_liquid_gallon, "0.0000001507", "39810.72829")
} }
@Test @Test
fun testFlux() { fun testFlux() = testWithUnits {
MyUnitIDS.maxwell.checkWith(MyUnitIDS.milliweber, "68.2", "0.00068") maxwell.checkWith(milliweber, "68.2", "0.00068")
MyUnitIDS.weber.checkWith(MyUnitIDS.milliweber, "68.2", "68200") weber.checkWith(milliweber, "68.2", "68200")
MyUnitIDS.milliweber.checkWith(MyUnitIDS.weber, "68.2", "0.0682") milliweber.checkWith(weber, "68.2", "0.0682")
MyUnitIDS.microweber.checkWith(MyUnitIDS.milliweber, "68.2", "0.0682") microweber.checkWith(milliweber, "68.2", "0.0682")
MyUnitIDS.kiloweber.checkWith(MyUnitIDS.weber, "68.2", "68200") kiloweber.checkWith(weber, "68.2", "68200")
MyUnitIDS.megaweber.checkWith(MyUnitIDS.weber, "68.2", "68200000") megaweber.checkWith(weber, "68.2", "68200000")
MyUnitIDS.gigaweber.checkWith(MyUnitIDS.weber, "68.2", "68200000000") gigaweber.checkWith(weber, "68.2", "68200000000")
} }
@Test @Test
fun testNumberBase() { fun testNumberBase() = testWithUnits {
MyUnitIDS.binary.checkWith(MyUnitIDS.octal, "1000001001", "1011") binary.checkWith(octal, "1000001001", "1011")
MyUnitIDS.ternary.checkWith(MyUnitIDS.decimal, "10112020111", "69430") ternary.checkWith(decimal, "10112020111", "69430")
MyUnitIDS.quaternary.checkWith(MyUnitIDS.quinary, "20321", "4234") quaternary.checkWith(quinary, "20321", "4234")
MyUnitIDS.quinary.checkWith(MyUnitIDS.nonary, "4234", "702") quinary.checkWith(nonary, "4234", "702")
MyUnitIDS.senary.checkWith(MyUnitIDS.nonary, "4234", "1274") senary.checkWith(nonary, "4234", "1274")
MyUnitIDS.septenary.checkWith(MyUnitIDS.nonary, "4234", "2041") septenary.checkWith(nonary, "4234", "2041")
MyUnitIDS.octal.checkWith(MyUnitIDS.undecimal, "42343277", "5107945") octal.checkWith(undecimal, "42343277", "5107945")
MyUnitIDS.nonary.checkWith(MyUnitIDS.duodecimal, "42343287", "69b9a81") nonary.checkWith(duodecimal, "42343287", "69b9a81")
MyUnitIDS.decimal.checkWith(MyUnitIDS.duodecimal, "42343287", "12220273") decimal.checkWith(duodecimal, "42343287", "12220273")
MyUnitIDS.undecimal.checkWith(MyUnitIDS.hexadecimal, "4234a287", "4e3f0c2") undecimal.checkWith(hexadecimal, "4234a287", "4e3f0c2")
MyUnitIDS.duodecimal.checkWith(MyUnitIDS.hexadecimal, "4234a287", "8f30d07") duodecimal.checkWith(hexadecimal, "4234a287", "8f30d07")
MyUnitIDS.tridecimal.checkWith(MyUnitIDS.hexadecimal, "4234a287", "f9c3ff4") tridecimal.checkWith(hexadecimal, "4234a287", "f9c3ff4")
MyUnitIDS.tetradecimal.checkWith(MyUnitIDS.hexadecimal, "bb", "a5") tetradecimal.checkWith(hexadecimal, "bb", "a5")
MyUnitIDS.pentadecimal.checkWith(MyUnitIDS.hexadecimal, "BABE", "9a82") pentadecimal.checkWith(hexadecimal, "BABE", "9a82")
MyUnitIDS.hexadecimal.checkWith(MyUnitIDS.quinary, "FADE", "4023342") hexadecimal.checkWith(quinary, "FADE", "4023342")
}
@Test
fun testElectrostaticCapacitance() = testWithUnits {
attofarad.checkWith(nanofarad, "364354322342", "364.35432")
statfarad.checkWith(microfarad, "123312", "0.1372")
farad.checkWith(kilofarad, "123312", "123.312")
exafarad.checkWith(petafarad, "123312", "123312000")
picofarad.checkWith(nanofarad, "11233", "11.233")
nanofarad.checkWith(millifarad, "11233", "0.01123")
microfarad.checkWith(nanofarad, "1123433", "1123433000")
millifarad.checkWith(nanofarad, "112", "112000000")
kilofarad.checkWith(microfarad, "11132", "11132000000000")
megafarad.checkWith(kilofarad, "11132", "11132000")
gigafarad.checkWith(petafarad, "11132", "0.01113")
petafarad.checkWith(kilofarad, "11132", "11132000000000000")
}
@Test
fun testPrefix() = testWithUnits {
prefix_quetta.checkWith(prefix_base, "1", "1000000000000000000000000000000")
prefix_ronna.checkWith(prefix_base, "1", "1000000000000000000000000000")
prefix_yotta.checkWith(prefix_base, "1", "1000000000000000000000000")
prefix_zetta.checkWith(prefix_base, "1", "1000000000000000000000")
prefix_exa.checkWith(prefix_base, "1", "1000000000000000000")
prefix_peta.checkWith(prefix_base, "1", "1000000000000000")
prefix_tera.checkWith(prefix_base, "1", "1000000000000")
prefix_giga.checkWith(prefix_base, "1", "1000000000")
prefix_mega.checkWith(prefix_base, "1", "1000000")
prefix_kilo.checkWith(prefix_base, "1", "1000")
prefix_hecto.checkWith(prefix_base, "1", "100")
prefix_deca.checkWith(prefix_base, "1", "10")
prefix_base.checkWith(prefix_base, "77777", "77777")
prefix_deci.checkWith(prefix_base, "1", "0.1")
prefix_centi.checkWith(prefix_base, "1", "0.01")
prefix_milli.checkWith(prefix_base, "1", "0.001")
prefix_micro.checkWith(prefix_base, "1", "0.000001")
prefix_nano.checkWith(prefix_base, "1", "0.000000001")
prefix_pico.checkWith(prefix_base, "1", "0.000000000001")
prefix_femto.checkWith(prefix_base, "1", "0.000000000000001")
prefix_atto.checkWith(prefix_base, "1", "0.000000000000000001")
prefix_zepto.checkWith(prefix_base, "1", "0.000000000000000000001")
prefix_yocto.checkWith(prefix_base, "1", "0.000000000000000000000001")
prefix_ronto.checkWith(prefix_base, "1", "0.000000000000000000000000001")
prefix_quecto.checkWith(prefix_base, "1", "0.000000000000000000000000000001")
}
@Test
fun testForce() = testWithUnits {
newton.checkWith(pond, "6553", "668220.03436")
kilonewton.checkWith(kilopound_force, "6553", "1473.173")
gram_force.checkWith(kilonewton, "6553", "0.06426")
kilogram_force.checkWith(ton_force, "6553", "6.553")
ton_force.checkWith(millinewton, "6553", "64262977450")
millinewton.checkWith(kilonewton, "6553", "0.00655")
attonewton.checkWith(dyne, "6553123123", "0.00066")
dyne.checkWith(joule_per_meter, "6553", "0.06553")
joule_per_meter.checkWith(pond, "6553", "668220.03436")
joule_per_centimeter.checkWith(kilopond, "6553", "6.6822")
kilopound_force.checkWith(kilopond, "6553", "2972390.80061")
pound_force.checkWith(ounce_force, "6553", "104848")
ounce_force.checkWith(pound_force, "6553", "409.5625")
pond.checkWith(kilonewton, "6553", "0.06426")
kilopond.checkWith(kilonewton, "6553", "64.26298")
}
@Test
fun testTorque() = testWithUnits {
newton_meter.checkWith(dyne_meter, "2134", "213400000")
newton_centimeter.checkWith(kilogram_force_millimeter, "2345", "2391.23452")
newton_millimeter.checkWith(pound_force_inch, "2345", "20.755")
kilonewton_meter.checkWith(kilogram_force_meter, "2134", "217607.43985")
dyne_meter.checkWith(newton_centimeter, "2134", "2.134")
dyne_centimeter.checkWith(gram_force_centimeter, "2134", "2.17607")
dyne_millimeter.checkWith(gram_force_millimeter, "2134", "2.17607")
kilogram_force_meter.checkWith(dyne_millimeter, "2134", "2092739110000")
kilogram_force_centimeter.checkWith(gram_force_meter, "2134", "21340")
kilogram_force_millimeter.checkWith(ounce_force_inch, "2134", "2963.56822")
gram_force_meter.checkWith(newton_millimeter, "2134", "20927.3911")
gram_force_centimeter.checkWith(kilogram_force_centimeter, "2134", "2.134")
gram_force_millimeter.checkWith(kilonewton_meter, "2134", "0.00002")
ounce_force_foot.checkWith(kilogram_force_millimeter, "2134", "18439.75503")
ounce_force_inch.checkWith(dyne_meter, "2134", "1506935.1968")
pound_force_foot.checkWith(newton_millimeter, "2134", "2893315.612")
pound_force_inch.checkWith(ounce_force_foot, "2134", "2845.33337")
} }
private fun String.checkWith(checkingId: String, value: String, expected: String) { private fun String.checkWith(checkingId: String, value: String, expected: String) {
@ -399,4 +484,6 @@ class AllUnitsTest {
// GROUP : testedCount / totalCount // GROUP : testedCount / totalCount
println("${unitGroup.name} : ${history[unitGroup]?.size} / ${allUnitsRepository.getCollectionByGroup(unitGroup).size}") println("${unitGroup.name} : ${history[unitGroup]?.size} / ${allUnitsRepository.getCollectionByGroup(unitGroup).size}")
} }
private fun testWithUnits(block: MyUnitIDS.() -> Unit): Unit = with(MyUnitIDS, block = block)
} }

View File

@ -54,6 +54,7 @@ import javax.inject.Inject
* @property shownUnitGroups [UnitGroup]s that user wants to see. Excludes other [UnitGroup]s, * @property shownUnitGroups [UnitGroup]s that user wants to see. Excludes other [UnitGroup]s,
* @property enableVibrations When true will use haptic feedback in app. * @property enableVibrations When true will use haptic feedback in app.
* @property enableToolsExperiment When true will enable experimental Tools screen. * @property enableToolsExperiment When true will enable experimental Tools screen.
* @property radianMode AngleMode in mxParser. When true - Radian, when False - Degree.
*/ */
data class UserPreferences( data class UserPreferences(
val themingMode: ThemingMode? = null, val themingMode: ThemingMode? = null,
@ -67,7 +68,8 @@ data class UserPreferences(
val shownUnitGroups: List<UnitGroup> = ALL_UNIT_GROUPS, val shownUnitGroups: List<UnitGroup> = ALL_UNIT_GROUPS,
val enableVibrations: Boolean = true, val enableVibrations: Boolean = true,
val enableToolsExperiment: Boolean = false, val enableToolsExperiment: Boolean = false,
val startingScreen: String = TopLevelDestinations.Converter.route val startingScreen: String = TopLevelDestinations.Converter.route,
val radianMode: Boolean = true
) )
/** /**
@ -90,6 +92,7 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS
val ENABLE_VIBRATIONS = booleanPreferencesKey("ENABLE_VIBRATIONS_PREF_KEY") val ENABLE_VIBRATIONS = booleanPreferencesKey("ENABLE_VIBRATIONS_PREF_KEY")
val ENABLE_TOOLS_EXPERIMENT = booleanPreferencesKey("ENABLE_TOOLS_EXPERIMENT_PREF_KEY") val ENABLE_TOOLS_EXPERIMENT = booleanPreferencesKey("ENABLE_TOOLS_EXPERIMENT_PREF_KEY")
val STARTING_SCREEN = stringPreferencesKey("STARTING_SCREEN_PREF_KEY") val STARTING_SCREEN = stringPreferencesKey("STARTING_SCREEN_PREF_KEY")
val RADIAN_MODE = booleanPreferencesKey("RADIAN_MODE_PREF_KEY")
} }
val userPreferencesFlow: Flow<UserPreferences> = dataStore.data val userPreferencesFlow: Flow<UserPreferences> = dataStore.data
@ -134,6 +137,7 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS
val enableVibrations: Boolean = preferences[PrefsKeys.ENABLE_VIBRATIONS] ?: true val enableVibrations: Boolean = preferences[PrefsKeys.ENABLE_VIBRATIONS] ?: true
val enableToolsExperiment: Boolean = preferences[PrefsKeys.ENABLE_TOOLS_EXPERIMENT] ?: false val enableToolsExperiment: Boolean = preferences[PrefsKeys.ENABLE_TOOLS_EXPERIMENT] ?: false
val startingScreen: String = preferences[PrefsKeys.STARTING_SCREEN] ?: TopLevelDestinations.Converter.route val startingScreen: String = preferences[PrefsKeys.STARTING_SCREEN] ?: TopLevelDestinations.Converter.route
val radianMode: Boolean = preferences[PrefsKeys.RADIAN_MODE] ?: true
UserPreferences( UserPreferences(
themingMode = themingMode, themingMode = themingMode,
@ -147,7 +151,8 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS
shownUnitGroups = shownUnitGroups, shownUnitGroups = shownUnitGroups,
enableVibrations = enableVibrations, enableVibrations = enableVibrations,
enableToolsExperiment = enableToolsExperiment, enableToolsExperiment = enableToolsExperiment,
startingScreen = startingScreen startingScreen = startingScreen,
radianMode = radianMode
) )
} }
@ -269,4 +274,15 @@ class UserPreferencesRepository @Inject constructor(private val dataStore: DataS
preferences[PrefsKeys.ENABLE_TOOLS_EXPERIMENT] = enabled preferences[PrefsKeys.ENABLE_TOOLS_EXPERIMENT] = enabled
} }
} }
/**
* Update angle mode for calculator.
*
* @param radianMode When true - Radian, when False - Degree.
*/
suspend fun updateRadianMode(radianMode: Boolean) {
dataStore.edit { preferences ->
preferences[PrefsKeys.RADIAN_MODE] = radianMode
}
}
} }

View File

@ -0,0 +1 @@
Fixed crashes in calculator.

View File

@ -0,0 +1 @@
Исправлены ошибки в калькуляторе.

View File

@ -1,21 +0,0 @@
/*
* Unitto is a unit converter for Android
* Copyright (c) 2023 Elshan Agaev
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.sadellie.unitto.feature.calculator
internal enum class AngleMode { DEG, RAD }

View File

@ -270,7 +270,7 @@ private fun CalculatorScreen(
numPad = { numPad = {
CalculatorKeyboard( CalculatorKeyboard(
modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp, vertical = 4.dp), modifier = Modifier.fillMaxSize().padding(horizontal = 8.dp, vertical = 4.dp),
angleMode = uiState.angleMode, radianMode = uiState.radianMode,
allowVibration = uiState.allowVibration, allowVibration = uiState.allowVibration,
addSymbol = addSymbol, addSymbol = addSymbol,
clearSymbols = clearSymbols, clearSymbols = clearSymbols,

View File

@ -24,7 +24,7 @@ import com.sadellie.unitto.data.model.HistoryItem
internal data class CalculatorUIState( internal data class CalculatorUIState(
val input: TextFieldValue = TextFieldValue(), val input: TextFieldValue = TextFieldValue(),
val output: String = "", val output: String = "",
val angleMode: AngleMode = AngleMode.RAD, val radianMode: Boolean = true,
val history: List<HistoryItem> = emptyList(), val history: List<HistoryItem> = emptyList(),
val allowVibration: Boolean = false val allowVibration: Boolean = false
) )

View File

@ -34,7 +34,6 @@ import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.merge
import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
@ -46,7 +45,7 @@ import org.mariuszgromada.math.mxparser.mXparser as MathParser
@HiltViewModel @HiltViewModel
internal class CalculatorViewModel @Inject constructor( internal class CalculatorViewModel @Inject constructor(
userPrefsRepository: UserPreferencesRepository, private val userPrefsRepository: UserPreferencesRepository,
private val calculatorHistoryRepository: CalculatorHistoryRepository, private val calculatorHistoryRepository: CalculatorHistoryRepository,
private val textFieldController: TextFieldController private val textFieldController: TextFieldController
) : ViewModel() { ) : ViewModel() {
@ -58,16 +57,15 @@ internal class CalculatorViewModel @Inject constructor(
) )
private val _output: MutableStateFlow<String> = MutableStateFlow("") private val _output: MutableStateFlow<String> = MutableStateFlow("")
private val _angleMode: MutableStateFlow<AngleMode> = MutableStateFlow(AngleMode.RAD)
private val _history = calculatorHistoryRepository.historyFlow private val _history = calculatorHistoryRepository.historyFlow
val uiState = combine( val uiState = combine(
textFieldController.input, _output, _angleMode, _history, _userPrefs textFieldController.input, _output, _history, _userPrefs
) { input, output, angleMode, history, userPrefs -> ) { input, output, history, userPrefs ->
return@combine CalculatorUIState( return@combine CalculatorUIState(
input = input, input = input,
output = output, output = output,
angleMode = angleMode, radianMode = userPrefs.radianMode,
history = history, history = history,
allowVibration = userPrefs.enableVibrations allowVibration = userPrefs.enableVibrations
) )
@ -82,14 +80,8 @@ internal class CalculatorViewModel @Inject constructor(
fun clearSymbols() = textFieldController.clearInput() fun clearSymbols() = textFieldController.clearInput()
fun toggleCalculatorMode() { fun toggleCalculatorMode() {
_angleMode.update { viewModelScope.launch {
if (it == AngleMode.DEG) { userPrefsRepository.updateRadianMode(!_userPrefs.value.radianMode)
MathParser.setRadiansMode()
AngleMode.RAD
} else {
MathParser.setDegreesMode()
AngleMode.DEG
}
} }
} }
@ -185,7 +177,9 @@ internal class CalculatorViewModel @Inject constructor(
// Observe and invoke calculation without UI lag. // Observe and invoke calculation without UI lag.
viewModelScope.launch(Dispatchers.Default) { viewModelScope.launch(Dispatchers.Default) {
merge(_userPrefs, textFieldController.input, _angleMode).collectLatest { combine(_userPrefs, textFieldController.input) { userPrefs, _ ->
if (userPrefs.radianMode) MathParser.setRadiansMode() else MathParser.setDegreesMode()
}.collectLatest {
calculateInput() calculateInput()
} }
} }

View File

@ -57,11 +57,15 @@ class TextFieldController @Inject constructor() {
val inputFormatted = newInput.fixFormat() val inputFormatted = newInput.fixFormat()
val newSelectionStartEnd = inputFormatted.length - lastToEndDistance val newSelectionStartEnd = inputFormatted.length - lastToEndDistance
val fixedCursor = fixCursor(
newPosition = newSelectionStartEnd..newSelectionStartEnd,
currentInput = inputFormatted
) ?: newSelectionStartEnd..newSelectionStartEnd
input.update { input.update {
it.copy( it.copy(
text = inputFormatted, text = inputFormatted,
selection = TextRange(newSelectionStartEnd, newSelectionStartEnd) selection = TextRange(fixedCursor)
) )
} }
} }
@ -72,16 +76,9 @@ class TextFieldController @Inject constructor() {
fun pasteSymbols(symbols: String) = addToInput(symbols.filterUnknownSymbols()) fun pasteSymbols(symbols: String) = addToInput(symbols.filterUnknownSymbols())
fun moveCursor(newPosition: IntRange) { fun moveCursor(newPosition: IntRange) {
val currentInput = input.value.text
if (newPosition.last > currentInput.length) return
val fixedLeftCursor = cursorFixer.fixCursorIfNeeded(currentInput, newPosition.first)
val fixedRightCursor = cursorFixer.fixCursorIfNeeded(currentInput, newPosition.last)
// Will modify
input.update { input.update {
it.copy( it.copy(
selection = TextRange(fixedLeftCursor, fixedRightCursor) selection = TextRange(fixCursor(newPosition) ?: return)
) )
} }
} }
@ -115,7 +112,7 @@ class TextFieldController @Inject constructor() {
.fixFormat() .fixFormat()
it.copy( it.copy(
text = newText, text = newText,
selection = TextRange(newText.length - distanceFromEnd) selection = TextRange((newText.length - distanceFromEnd).coerceAtLeast(0))
) )
} }
} }
@ -126,10 +123,24 @@ class TextFieldController @Inject constructor() {
.replace(localFormatter.grouping, "") .replace(localFormatter.grouping, "")
.replace(localFormatter.fractional, Token.dot) .replace(localFormatter.fractional, Token.dot)
private fun fixCursor(
newPosition: IntRange,
currentInput: String = input.value.text
): IntRange? {
if (newPosition.last > currentInput.length) return null
val fixedLeftCursor = cursorFixer.fixCursorIfNeeded(currentInput, newPosition.first)
val fixedRightCursor = cursorFixer.fixCursorIfNeeded(currentInput, newPosition.last)
return fixedLeftCursor..fixedRightCursor
}
private fun String.fixFormat(): String = localFormatter.reFormat(this) private fun String.fixFormat(): String = localFormatter.reFormat(this)
private fun String.filterUnknownSymbols() = localFormatter.filterUnknownSymbols(this) private fun String.filterUnknownSymbols() = localFormatter.filterUnknownSymbols(this)
private fun TextRange(range: IntRange): TextRange = TextRange(range.first, range.last)
inner class CursorFixer { inner class CursorFixer {
private val illegalTokens by lazy { private val illegalTokens by lazy {
listOf( listOf(

View File

@ -98,12 +98,11 @@ import com.sadellie.unitto.core.ui.common.key.unittoicons.RightBracket
import com.sadellie.unitto.core.ui.common.key.unittoicons.Sin import com.sadellie.unitto.core.ui.common.key.unittoicons.Sin
import com.sadellie.unitto.core.ui.common.key.unittoicons.SquareRootWide import com.sadellie.unitto.core.ui.common.key.unittoicons.SquareRootWide
import com.sadellie.unitto.core.ui.common.key.unittoicons.Tan import com.sadellie.unitto.core.ui.common.key.unittoicons.Tan
import com.sadellie.unitto.feature.calculator.AngleMode
@Composable @Composable
internal fun CalculatorKeyboard( internal fun CalculatorKeyboard(
modifier: Modifier, modifier: Modifier,
angleMode: AngleMode, radianMode: Boolean,
allowVibration: Boolean, allowVibration: Boolean,
addSymbol: (String) -> Unit, addSymbol: (String) -> Unit,
clearSymbols: () -> Unit, clearSymbols: () -> Unit,
@ -114,7 +113,7 @@ internal fun CalculatorKeyboard(
if (LocalConfiguration.current.orientation == Configuration.ORIENTATION_PORTRAIT) { if (LocalConfiguration.current.orientation == Configuration.ORIENTATION_PORTRAIT) {
PortraitKeyboard( PortraitKeyboard(
modifier = modifier, modifier = modifier,
angleMode = angleMode, radianMode = radianMode,
allowVibration = allowVibration, allowVibration = allowVibration,
addSymbol = addSymbol, addSymbol = addSymbol,
toggleAngleMode = toggleAngleMode, toggleAngleMode = toggleAngleMode,
@ -125,7 +124,7 @@ internal fun CalculatorKeyboard(
} else { } else {
LandscapeKeyboard( LandscapeKeyboard(
modifier = modifier, modifier = modifier,
angleMode = angleMode, radianMode = radianMode,
allowVibration = allowVibration, allowVibration = allowVibration,
addSymbol = addSymbol, addSymbol = addSymbol,
toggleAngleMode = toggleAngleMode, toggleAngleMode = toggleAngleMode,
@ -139,7 +138,7 @@ internal fun CalculatorKeyboard(
@Composable @Composable
private fun PortraitKeyboard( private fun PortraitKeyboard(
modifier: Modifier, modifier: Modifier,
angleMode: AngleMode, radianMode: Boolean,
allowVibration: Boolean, allowVibration: Boolean,
addSymbol: (String) -> Unit, addSymbol: (String) -> Unit,
toggleAngleMode: () -> Unit, toggleAngleMode: () -> Unit,
@ -185,7 +184,7 @@ private fun PortraitKeyboard(
allowVibration = allowVibration, allowVibration = allowVibration,
addSymbol = addSymbol, addSymbol = addSymbol,
showAdditional = showAdditional, showAdditional = showAdditional,
angleMode = angleMode, radianMode = radianMode,
toggleAngleMode = toggleAngleMode, toggleAngleMode = toggleAngleMode,
toggleInvMode = { invMode = !invMode } toggleInvMode = { invMode = !invMode }
) )
@ -195,7 +194,7 @@ private fun PortraitKeyboard(
allowVibration = allowVibration, allowVibration = allowVibration,
addSymbol = addSymbol, addSymbol = addSymbol,
showAdditional = showAdditional, showAdditional = showAdditional,
angleMode = angleMode, radianMode = radianMode,
toggleAngleMode = toggleAngleMode, toggleAngleMode = toggleAngleMode,
toggleInvMode = { invMode = !invMode } toggleInvMode = { invMode = !invMode }
) )
@ -212,7 +211,7 @@ private fun PortraitKeyboard(
} }
} }
} }
Spacer(modifier = Modifier.height(verticalFraction(0.015f))) Spacer(modifier = Modifier.height(verticalFraction(0.015f)))
Row(weightModifier) { Row(weightModifier) {
@ -257,7 +256,7 @@ private fun AdditionalButtonsPortrait(
allowVibration: Boolean, allowVibration: Boolean,
addSymbol: (String) -> Unit, addSymbol: (String) -> Unit,
showAdditional: Boolean, showAdditional: Boolean,
angleMode: AngleMode, radianMode: Boolean,
toggleAngleMode: () -> Unit, toggleAngleMode: () -> Unit,
toggleInvMode: () -> Unit toggleInvMode: () -> Unit
) { ) {
@ -271,7 +270,7 @@ private fun AdditionalButtonsPortrait(
AnimatedVisibility(showAdditional) { AnimatedVisibility(showAdditional) {
Column { Column {
Row { Row {
KeyboardButtonAdditional(modifier, if (angleMode == AngleMode.DEG) UnittoIcons.Deg else UnittoIcons.Rad, allowVibration) { toggleAngleMode() } KeyboardButtonAdditional(modifier, if (radianMode) UnittoIcons.Rad else UnittoIcons.Deg, allowVibration) { toggleAngleMode() }
KeyboardButtonAdditional(modifier, UnittoIcons.Sin, allowVibration) { addSymbol(Token.sin) } KeyboardButtonAdditional(modifier, UnittoIcons.Sin, allowVibration) { addSymbol(Token.sin) }
KeyboardButtonAdditional(modifier, UnittoIcons.Cos, allowVibration) { addSymbol(Token.cos) } KeyboardButtonAdditional(modifier, UnittoIcons.Cos, allowVibration) { addSymbol(Token.cos) }
KeyboardButtonAdditional(modifier, UnittoIcons.Tan, allowVibration) { addSymbol(Token.tan) } KeyboardButtonAdditional(modifier, UnittoIcons.Tan, allowVibration) { addSymbol(Token.tan) }
@ -293,7 +292,7 @@ private fun AdditionalButtonsPortraitInverse(
allowVibration: Boolean, allowVibration: Boolean,
addSymbol: (String) -> Unit, addSymbol: (String) -> Unit,
showAdditional: Boolean, showAdditional: Boolean,
angleMode: AngleMode, radianMode: Boolean,
toggleAngleMode: () -> Unit, toggleAngleMode: () -> Unit,
toggleInvMode: () -> Unit toggleInvMode: () -> Unit
) { ) {
@ -307,7 +306,7 @@ private fun AdditionalButtonsPortraitInverse(
AnimatedVisibility(showAdditional) { AnimatedVisibility(showAdditional) {
Column { Column {
Row { Row {
KeyboardButtonAdditional(modifier, if (angleMode == AngleMode.DEG) UnittoIcons.Deg else UnittoIcons.Rad, allowVibration) { toggleAngleMode() } KeyboardButtonAdditional(modifier, if (radianMode) UnittoIcons.Rad else UnittoIcons.Deg, allowVibration) { toggleAngleMode() }
KeyboardButtonAdditional(modifier, UnittoIcons.ArSin, allowVibration) { addSymbol(Token.arSin) } KeyboardButtonAdditional(modifier, UnittoIcons.ArSin, allowVibration) { addSymbol(Token.arSin) }
KeyboardButtonAdditional(modifier, UnittoIcons.ArCos, allowVibration) { addSymbol(Token.arCos) } KeyboardButtonAdditional(modifier, UnittoIcons.ArCos, allowVibration) { addSymbol(Token.arCos) }
KeyboardButtonAdditional(modifier, UnittoIcons.AcTan, allowVibration) { addSymbol(Token.acTan) } KeyboardButtonAdditional(modifier, UnittoIcons.AcTan, allowVibration) { addSymbol(Token.acTan) }
@ -326,7 +325,7 @@ private fun AdditionalButtonsPortraitInverse(
@Composable @Composable
private fun LandscapeKeyboard( private fun LandscapeKeyboard(
modifier: Modifier, modifier: Modifier,
angleMode: AngleMode, radianMode: Boolean,
allowVibration: Boolean, allowVibration: Boolean,
addSymbol: (String) -> Unit, addSymbol: (String) -> Unit,
toggleAngleMode: () -> Unit, toggleAngleMode: () -> Unit,
@ -350,7 +349,7 @@ private fun LandscapeKeyboard(
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
buttonModifier = buttonModifier, buttonModifier = buttonModifier,
allowVibration = allowVibration, allowVibration = allowVibration,
angleMode = angleMode, radianMode = radianMode,
addSymbol = addSymbol, addSymbol = addSymbol,
toggleAngleMode = toggleAngleMode, toggleAngleMode = toggleAngleMode,
toggleInvMode = { invMode = !invMode } toggleInvMode = { invMode = !invMode }
@ -360,7 +359,7 @@ private fun LandscapeKeyboard(
modifier = Modifier.weight(1f), modifier = Modifier.weight(1f),
buttonModifier = buttonModifier, buttonModifier = buttonModifier,
allowVibration = allowVibration, allowVibration = allowVibration,
angleMode = angleMode, radianMode = radianMode,
addSymbol = addSymbol, addSymbol = addSymbol,
toggleAngleMode = toggleAngleMode, toggleAngleMode = toggleAngleMode,
toggleInvMode = { invMode = !invMode } toggleInvMode = { invMode = !invMode }
@ -408,13 +407,13 @@ private fun AdditionalButtonsLandscape(
modifier: Modifier, modifier: Modifier,
buttonModifier: Modifier, buttonModifier: Modifier,
allowVibration: Boolean, allowVibration: Boolean,
angleMode: AngleMode, radianMode: Boolean,
addSymbol: (String) -> Unit, addSymbol: (String) -> Unit,
toggleAngleMode: () -> Unit, toggleAngleMode: () -> Unit,
toggleInvMode: () -> Unit toggleInvMode: () -> Unit
) { ) {
Column(modifier) { Column(modifier) {
KeyboardButtonAdditional(buttonModifier, if (angleMode == AngleMode.DEG) UnittoIcons.Deg else UnittoIcons.Rad, allowVibration) { toggleAngleMode() } KeyboardButtonAdditional(buttonModifier, if (radianMode) UnittoIcons.Rad else UnittoIcons.Deg, allowVibration) { toggleAngleMode() }
KeyboardButtonAdditional(buttonModifier, UnittoIcons.Inv, allowVibration) { toggleInvMode() } KeyboardButtonAdditional(buttonModifier, UnittoIcons.Inv, allowVibration) { toggleInvMode() }
KeyboardButtonAdditional(buttonModifier, UnittoIcons.Sin, allowVibration) { addSymbol(Token.sin) } KeyboardButtonAdditional(buttonModifier, UnittoIcons.Sin, allowVibration) { addSymbol(Token.sin) }
KeyboardButtonAdditional(buttonModifier, UnittoIcons.E, allowVibration) { addSymbol(Token.e) } KeyboardButtonAdditional(buttonModifier, UnittoIcons.E, allowVibration) { addSymbol(Token.e) }
@ -440,13 +439,13 @@ private fun AdditionalButtonsLandscapeInverse(
modifier: Modifier, modifier: Modifier,
buttonModifier: Modifier, buttonModifier: Modifier,
allowVibration: Boolean, allowVibration: Boolean,
angleMode: AngleMode, radianMode: Boolean,
addSymbol: (String) -> Unit, addSymbol: (String) -> Unit,
toggleAngleMode: () -> Unit, toggleAngleMode: () -> Unit,
toggleInvMode: () -> Unit toggleInvMode: () -> Unit
) { ) {
Column(modifier) { Column(modifier) {
KeyboardButtonAdditional(buttonModifier, if (angleMode == AngleMode.DEG) UnittoIcons.Deg else UnittoIcons.Rad, allowVibration) { toggleAngleMode() } KeyboardButtonAdditional(buttonModifier, if (radianMode) UnittoIcons.Rad else UnittoIcons.Deg, allowVibration) { toggleAngleMode() }
KeyboardButtonAdditional(buttonModifier, UnittoIcons.Inv, allowVibration) { toggleInvMode() } KeyboardButtonAdditional(buttonModifier, UnittoIcons.Inv, allowVibration) { toggleInvMode() }
KeyboardButtonAdditional(buttonModifier, UnittoIcons.ArSin, allowVibration) { addSymbol(Token.arSin) } KeyboardButtonAdditional(buttonModifier, UnittoIcons.ArSin, allowVibration) { addSymbol(Token.arSin) }
KeyboardButtonAdditional(buttonModifier, UnittoIcons.E, allowVibration) { addSymbol(Token.e) } KeyboardButtonAdditional(buttonModifier, UnittoIcons.E, allowVibration) { addSymbol(Token.e) }
@ -472,7 +471,7 @@ private fun AdditionalButtonsLandscapeInverse(
private fun PreviewCalculatorKeyboard() { private fun PreviewCalculatorKeyboard() {
CalculatorKeyboard( CalculatorKeyboard(
modifier = Modifier, modifier = Modifier,
angleMode = AngleMode.DEG, radianMode = true,
addSymbol = {}, addSymbol = {},
clearSymbols = {}, clearSymbols = {},
deleteSymbol = {}, deleteSymbol = {},

View File

@ -184,6 +184,13 @@ internal class TextFieldControllerTest {
textFieldController.delete() textFieldController.delete()
assertEquals("", textFieldController.text) assertEquals("", textFieldController.text)
assertEquals(0..0, textFieldController.selection) assertEquals(0..0, textFieldController.selection)
textFieldController.addToInput("1234")
// Place cursor like 1|,234
textFieldController.moveCursor(1..1)
textFieldController.delete()
assertEquals("234", textFieldController.text)
assertEquals(0..0, textFieldController.selection)
} }
@Test @Test

View File

@ -1,5 +1,5 @@
[versions] [versions]
appCode = "17" appCode = "18"
appName = "Illuminating emerald" appName = "Illuminating emerald"
kotlin = "1.8.10" kotlin = "1.8.10"
androidxCore = "1.9.0" androidxCore = "1.9.0"

BIN
where-logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 74 KiB