Skip to main content

dimensioned/opt/rustwide/target/x86_64-unknown-linux-gnu/debug/build/dimensioned-7f44ed1ff556b03d/out/
cgs.rs

1/**
2The Gaussian CGS unit system
3
4Note: this system is incomplete. More derived units and constants are coming.
5
6
7
8
9
10Following, we list all of the [base units](#base-units), [derived units](#derived-units), and
11[constants](#constants) that are defined in this unit system.
12# Base Units
13Constant | Unit | Print Token | Dimension
14---|---|---|---
15SQRTCM | SqrtCentimeter | sqrtcm | 
16SQRTG | SqrtGram | sqrtg | 
17S | Second | s | Time
18# Derived Units
19Constant | Unit | Unit Definition | Dimension
20---|---|---|---
21CM | Centimeter | SqrtCentimeter * SqrtCentimeter | Length
22G | Gram | SqrtGram * SqrtGram | Mass
23CM2 | Centimeter2 | Centimeter * Centimeter | Area
24CM3 | Centimeter3 | Centimeter2 * Centimeter | Volume
25S2 | Second2 | Second * Second | 
26S3 | Second3 | Second2 * Second | 
27S4 | Second4 | Second3 * Second | 
28CMPS | CentimeterPerSecond | Centimeter / Second | Velocity
29CMPS3 | CentimeterPerSecond3 | Centimeter / Second3 | Jerk
30CMPS4 | CentimeterPerSecond4 | Centimeter / Second4 | 
31CM2PS | Centimeter2PerSecond | Centimeter2 / Second | 
32CM2PS2 | Centimeter2PerSecond2 | Centimeter2 / Second2 | 
33CM2PS3 | Centimeter2PerSecond3 | Centimeter2 / Second3 | 
34CM3PS | Centimeter3PerSecond | Centimeter3 / Second | 
35CM3PS2 | Centimeter3PerSecond2 | Centimeter3 / Second2 | 
36CM3PS3 | Centimeter3PerSecond3 | Centimeter3 / Second3 | 
37GAL | Gal | Centimeter / Second2 | Acceleration
38DYN | Dyne | Gram * Gal | Force
39ERG | Erg | Dyne * Centimeter | Energy
40ERGPS | ErgPerSecond | Erg / Second | Power
41BA | Barye | Dyne / Centimeter2 | Pressure
42P | Poise | Gram / Centimeter / Second | 
43ST | Stokes | Centimeter2 / Second | 
44K | Kayser | Unitless / Centimeter | ReciprocalLength
45STATC | StatCoulomb | SqrtGram * SqrtCentimeter * Centimeter / Second | 
46STATA | StatAmpere | StatCoulomb / Second | 
47STATV | StatVolt | Erg / StatCoulomb | 
48# Constants
49Name | Constant | Value | Unit | Dimension
50---|---|---|---|---
51Meter | M | HECTO * CM | Centimeter | Length
52|
53*/
54pub mod cgs {
55    #![allow(clippy::upper_case_acronyms)]
56    make_units! {
57        CGS;
58        ONE: Unitless;
59
60        base {
61            SQRTCM: SqrtCentimeter, "sqrtcm";
62            SQRTG: SqrtGram, "sqrtg";
63            S: Second, "s", Time;
64        }
65
66        derived {
67            CM: Centimeter = (SqrtCentimeter * SqrtCentimeter), Length;
68            G: Gram = (SqrtGram * SqrtGram), Mass;
69            CM2: Centimeter2 = (Centimeter * Centimeter), Area;
70            CM3: Centimeter3 = (Centimeter2 * Centimeter), Volume;
71            S2: Second2 = (Second * Second);
72            S3: Second3 = (Second2 * Second);
73            S4: Second4 = (Second3 * Second);
74            CMPS: CentimeterPerSecond = (Centimeter / Second), Velocity;
75            CMPS3: CentimeterPerSecond3 = (Centimeter / Second3), Jerk;
76            CMPS4: CentimeterPerSecond4 = (Centimeter / Second4);
77            CM2PS: Centimeter2PerSecond = (Centimeter2 / Second);
78            CM2PS2: Centimeter2PerSecond2 = (Centimeter2 / Second2);
79            CM2PS3: Centimeter2PerSecond3 = (Centimeter2 / Second3);
80            CM3PS: Centimeter3PerSecond = (Centimeter3 / Second);
81            CM3PS2: Centimeter3PerSecond2 = (Centimeter3 / Second2);
82            CM3PS3: Centimeter3PerSecond3 = (Centimeter3 / Second3);
83            GAL: Gal = (Centimeter / Second2), Acceleration;
84            DYN: Dyne = (Gram * Gal), Force;
85            ERG: Erg = (Dyne * Centimeter), Energy;
86            ERGPS: ErgPerSecond = (Erg / Second), Power;
87            BA: Barye = (Dyne / Centimeter2), Pressure;
88            P: Poise = (Gram / Centimeter / Second);
89            ST: Stokes = (Centimeter2 / Second);
90            K: Kayser = (Unitless / Centimeter), ReciprocalLength;
91            STATC: StatCoulomb = (SqrtGram * SqrtCentimeter * Centimeter / Second);
92            STATA: StatAmpere = (StatCoulomb / Second);
93            STATV: StatVolt = (Erg / StatCoulomb);
94        }
95
96        constants {
97            M: Centimeter = HECTO * CM.value_unsafe;
98        }
99
100        fmt = false;
101    }
102
103    #[cfg(feature = "serde")]
104    impl_serde!(CGS);
105    #[cfg(feature = "clapme")]
106    impl_clapme!(CGS);
107    #[cfg(feature = "auto-args")]
108    impl_auto_args!(CGS);
109
110    #[cfg(feature = "rand")]
111    impl_rand!(CGS);
112
113    pub use self::f64consts::*;
114
115
116    #[test]
117    fn test_cgs_constants() {
118        #[allow(unused_imports)]
119        use crate::f64prefixes::*;
120        #[allow(unused_imports)]
121        use core::f64::consts;
122
123        assert_eq!(M, HECTO * CM);
124    }
125    /// Test that serializing/deserializing values with units is
126    /// equivalent to doing so with raw numeric types.
127    #[cfg(feature = "serde")]
128    #[test]
129    fn test_cgs_serde() {
130        use ::serde_test::{assert_tokens, Token};
131
132        let value = 1.0 * SQRTCM;
133        assert_tokens(&value, &[Token::F64(1.0)]);
134
135        let value = 1.0 * SQRTG;
136        assert_tokens(&value, &[Token::F64(1.0)]);
137
138        let value = 1.0 * S;
139        assert_tokens(&value, &[Token::F64(1.0)]);
140
141    }
142    /// Test that we can get random numbers nicely.
143    #[cfg(feature = "rand")]
144    #[test]
145    fn test_cgs_rand() {
146        use ::rand::prelude::*;
147        use ::rand::rngs::{StdRng};
148        use ::rand::distributions::Uniform;
149        use ::rand::{SeedableRng};
150        let mut rng1 = StdRng::from_seed([0u8;32]);
151        let mut rng2 = rng1.clone();
152
153        let raw_value: f64 = rng1.gen();
154        let value: SqrtCentimeter<f64>  = rng2.gen();
155        assert_eq!(value, SqrtCentimeter::new(raw_value));
156
157        let raw_value: f64 = rng1.gen();
158        let value: SqrtGram<f64>  = rng2.gen();
159        assert_eq!(value, SqrtGram::new(raw_value));
160
161        let raw_value: f64 = rng1.gen();
162        let value: Second<f64>  = rng2.gen();
163        assert_eq!(value, Second::new(raw_value));
164
165        let raw_value: f64 = rng1.gen();
166        let value: Centimeter<f64>  = rng2.gen();
167        assert_eq!(value, Centimeter::new(raw_value));
168
169        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
170        let value = rng2.sample(Uniform::new(Centimeter::new(-5.0), Centimeter::new(7.0)));
171        assert_eq!(value, Centimeter::new(raw_value));
172
173        let raw_value: f64 = rng1.gen();
174        let value: Gram<f64>  = rng2.gen();
175        assert_eq!(value, Gram::new(raw_value));
176
177        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
178        let value = rng2.sample(Uniform::new(Gram::new(-5.0), Gram::new(7.0)));
179        assert_eq!(value, Gram::new(raw_value));
180
181        let raw_value: f64 = rng1.gen();
182        let value: Centimeter2<f64>  = rng2.gen();
183        assert_eq!(value, Centimeter2::new(raw_value));
184
185        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
186        let value = rng2.sample(Uniform::new(Centimeter2::new(-5.0), Centimeter2::new(7.0)));
187        assert_eq!(value, Centimeter2::new(raw_value));
188
189        let raw_value: f64 = rng1.gen();
190        let value: Centimeter3<f64>  = rng2.gen();
191        assert_eq!(value, Centimeter3::new(raw_value));
192
193        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
194        let value = rng2.sample(Uniform::new(Centimeter3::new(-5.0), Centimeter3::new(7.0)));
195        assert_eq!(value, Centimeter3::new(raw_value));
196
197        let raw_value: f64 = rng1.gen();
198        let value: Second2<f64>  = rng2.gen();
199        assert_eq!(value, Second2::new(raw_value));
200
201        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
202        let value = rng2.sample(Uniform::new(Second2::new(-5.0), Second2::new(7.0)));
203        assert_eq!(value, Second2::new(raw_value));
204
205        let raw_value: f64 = rng1.gen();
206        let value: Second3<f64>  = rng2.gen();
207        assert_eq!(value, Second3::new(raw_value));
208
209        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
210        let value = rng2.sample(Uniform::new(Second3::new(-5.0), Second3::new(7.0)));
211        assert_eq!(value, Second3::new(raw_value));
212
213        let raw_value: f64 = rng1.gen();
214        let value: Second4<f64>  = rng2.gen();
215        assert_eq!(value, Second4::new(raw_value));
216
217        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
218        let value = rng2.sample(Uniform::new(Second4::new(-5.0), Second4::new(7.0)));
219        assert_eq!(value, Second4::new(raw_value));
220
221        let raw_value: f64 = rng1.gen();
222        let value: CentimeterPerSecond<f64>  = rng2.gen();
223        assert_eq!(value, CentimeterPerSecond::new(raw_value));
224
225        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
226        let value = rng2.sample(Uniform::new(CentimeterPerSecond::new(-5.0), CentimeterPerSecond::new(7.0)));
227        assert_eq!(value, CentimeterPerSecond::new(raw_value));
228
229        let raw_value: f64 = rng1.gen();
230        let value: CentimeterPerSecond3<f64>  = rng2.gen();
231        assert_eq!(value, CentimeterPerSecond3::new(raw_value));
232
233        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
234        let value = rng2.sample(Uniform::new(CentimeterPerSecond3::new(-5.0), CentimeterPerSecond3::new(7.0)));
235        assert_eq!(value, CentimeterPerSecond3::new(raw_value));
236
237        let raw_value: f64 = rng1.gen();
238        let value: CentimeterPerSecond4<f64>  = rng2.gen();
239        assert_eq!(value, CentimeterPerSecond4::new(raw_value));
240
241        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
242        let value = rng2.sample(Uniform::new(CentimeterPerSecond4::new(-5.0), CentimeterPerSecond4::new(7.0)));
243        assert_eq!(value, CentimeterPerSecond4::new(raw_value));
244
245        let raw_value: f64 = rng1.gen();
246        let value: Centimeter2PerSecond<f64>  = rng2.gen();
247        assert_eq!(value, Centimeter2PerSecond::new(raw_value));
248
249        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
250        let value = rng2.sample(Uniform::new(Centimeter2PerSecond::new(-5.0), Centimeter2PerSecond::new(7.0)));
251        assert_eq!(value, Centimeter2PerSecond::new(raw_value));
252
253        let raw_value: f64 = rng1.gen();
254        let value: Centimeter2PerSecond2<f64>  = rng2.gen();
255        assert_eq!(value, Centimeter2PerSecond2::new(raw_value));
256
257        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
258        let value = rng2.sample(Uniform::new(Centimeter2PerSecond2::new(-5.0), Centimeter2PerSecond2::new(7.0)));
259        assert_eq!(value, Centimeter2PerSecond2::new(raw_value));
260
261        let raw_value: f64 = rng1.gen();
262        let value: Centimeter2PerSecond3<f64>  = rng2.gen();
263        assert_eq!(value, Centimeter2PerSecond3::new(raw_value));
264
265        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
266        let value = rng2.sample(Uniform::new(Centimeter2PerSecond3::new(-5.0), Centimeter2PerSecond3::new(7.0)));
267        assert_eq!(value, Centimeter2PerSecond3::new(raw_value));
268
269        let raw_value: f64 = rng1.gen();
270        let value: Centimeter3PerSecond<f64>  = rng2.gen();
271        assert_eq!(value, Centimeter3PerSecond::new(raw_value));
272
273        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
274        let value = rng2.sample(Uniform::new(Centimeter3PerSecond::new(-5.0), Centimeter3PerSecond::new(7.0)));
275        assert_eq!(value, Centimeter3PerSecond::new(raw_value));
276
277        let raw_value: f64 = rng1.gen();
278        let value: Centimeter3PerSecond2<f64>  = rng2.gen();
279        assert_eq!(value, Centimeter3PerSecond2::new(raw_value));
280
281        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
282        let value = rng2.sample(Uniform::new(Centimeter3PerSecond2::new(-5.0), Centimeter3PerSecond2::new(7.0)));
283        assert_eq!(value, Centimeter3PerSecond2::new(raw_value));
284
285        let raw_value: f64 = rng1.gen();
286        let value: Centimeter3PerSecond3<f64>  = rng2.gen();
287        assert_eq!(value, Centimeter3PerSecond3::new(raw_value));
288
289        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
290        let value = rng2.sample(Uniform::new(Centimeter3PerSecond3::new(-5.0), Centimeter3PerSecond3::new(7.0)));
291        assert_eq!(value, Centimeter3PerSecond3::new(raw_value));
292
293        let raw_value: f64 = rng1.gen();
294        let value: Gal<f64>  = rng2.gen();
295        assert_eq!(value, Gal::new(raw_value));
296
297        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
298        let value = rng2.sample(Uniform::new(Gal::new(-5.0), Gal::new(7.0)));
299        assert_eq!(value, Gal::new(raw_value));
300
301        let raw_value: f64 = rng1.gen();
302        let value: Dyne<f64>  = rng2.gen();
303        assert_eq!(value, Dyne::new(raw_value));
304
305        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
306        let value = rng2.sample(Uniform::new(Dyne::new(-5.0), Dyne::new(7.0)));
307        assert_eq!(value, Dyne::new(raw_value));
308
309        let raw_value: f64 = rng1.gen();
310        let value: Erg<f64>  = rng2.gen();
311        assert_eq!(value, Erg::new(raw_value));
312
313        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
314        let value = rng2.sample(Uniform::new(Erg::new(-5.0), Erg::new(7.0)));
315        assert_eq!(value, Erg::new(raw_value));
316
317        let raw_value: f64 = rng1.gen();
318        let value: ErgPerSecond<f64>  = rng2.gen();
319        assert_eq!(value, ErgPerSecond::new(raw_value));
320
321        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
322        let value = rng2.sample(Uniform::new(ErgPerSecond::new(-5.0), ErgPerSecond::new(7.0)));
323        assert_eq!(value, ErgPerSecond::new(raw_value));
324
325        let raw_value: f64 = rng1.gen();
326        let value: Barye<f64>  = rng2.gen();
327        assert_eq!(value, Barye::new(raw_value));
328
329        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
330        let value = rng2.sample(Uniform::new(Barye::new(-5.0), Barye::new(7.0)));
331        assert_eq!(value, Barye::new(raw_value));
332
333        let raw_value: f64 = rng1.gen();
334        let value: Poise<f64>  = rng2.gen();
335        assert_eq!(value, Poise::new(raw_value));
336
337        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
338        let value = rng2.sample(Uniform::new(Poise::new(-5.0), Poise::new(7.0)));
339        assert_eq!(value, Poise::new(raw_value));
340
341        let raw_value: f64 = rng1.gen();
342        let value: Stokes<f64>  = rng2.gen();
343        assert_eq!(value, Stokes::new(raw_value));
344
345        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
346        let value = rng2.sample(Uniform::new(Stokes::new(-5.0), Stokes::new(7.0)));
347        assert_eq!(value, Stokes::new(raw_value));
348
349        let raw_value: f64 = rng1.gen();
350        let value: Kayser<f64>  = rng2.gen();
351        assert_eq!(value, Kayser::new(raw_value));
352
353        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
354        let value = rng2.sample(Uniform::new(Kayser::new(-5.0), Kayser::new(7.0)));
355        assert_eq!(value, Kayser::new(raw_value));
356
357        let raw_value: f64 = rng1.gen();
358        let value: StatCoulomb<f64>  = rng2.gen();
359        assert_eq!(value, StatCoulomb::new(raw_value));
360
361        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
362        let value = rng2.sample(Uniform::new(StatCoulomb::new(-5.0), StatCoulomb::new(7.0)));
363        assert_eq!(value, StatCoulomb::new(raw_value));
364
365        let raw_value: f64 = rng1.gen();
366        let value: StatAmpere<f64>  = rng2.gen();
367        assert_eq!(value, StatAmpere::new(raw_value));
368
369        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
370        let value = rng2.sample(Uniform::new(StatAmpere::new(-5.0), StatAmpere::new(7.0)));
371        assert_eq!(value, StatAmpere::new(raw_value));
372
373        let raw_value: f64 = rng1.gen();
374        let value: StatVolt<f64>  = rng2.gen();
375        assert_eq!(value, StatVolt::new(raw_value));
376
377        let raw_value = rng1.sample(Uniform::new(-5.0, 7.0));
378        let value = rng2.sample(Uniform::new(StatVolt::new(-5.0), StatVolt::new(7.0)));
379        assert_eq!(value, StatVolt::new(raw_value));
380
381    }
382    /// Test that clapme can generate a help message, and can produce a value.
383    #[cfg(feature = "clapme")]
384    #[test]
385    fn test_cgs_clapme() {
386
387        let value = 3.0 * SQRTCM;
388        assert_eq!(value,
389                   <SqrtCentimeter<f64> as ClapMe>::from_iter(&["test", "3.0"]).unwrap());
390
391        let value = 3.0 * SQRTG;
392        assert_eq!(value,
393                   <SqrtGram<f64> as ClapMe>::from_iter(&["test", "3.0"]).unwrap());
394
395        let value = 3.0 * S;
396        assert_eq!(value,
397                   <Second<f64> as ClapMe>::from_iter(&["test", "3.0"]).unwrap());
398
399    }
400
401    /// Test that clapme can generate a help message, and can produce a value.
402    #[cfg(feature = "auto-args")]
403    #[test]
404    fn test_cgs_auto_args() {
405
406        let value = 3.0 * SQRTCM;
407        assert_eq!(value,
408                   <SqrtCentimeter<f64> as auto_args::AutoArgs>::from_iter(&["test", "3.0"]).unwrap());
409
410        let value = 3.0 * SQRTG;
411        assert_eq!(value,
412                   <SqrtGram<f64> as auto_args::AutoArgs>::from_iter(&["test", "3.0"]).unwrap());
413
414        let value = 3.0 * S;
415        assert_eq!(value,
416                   <Second<f64> as auto_args::AutoArgs>::from_iter(&["test", "3.0"]).unwrap());
417
418    }
419}