1use crate::system::defs::base::{Centimetre, Inch, Second};
4use crate::system::prefixes::*;
5use crate::{quantity, unit};
6use typenum::*;
7
8quantity!(Information: M Z0, L Z0, T Z0, I Z0, Th Z0, N Z0, J Z0; marked); unit!(base: Bit, "bit", Information; prefixable);
15unit!(derived: Byte, "B", (8, Bit); prefixable);
16unit!(derived: Nibble, "nibble", (4, Bit));
17unit!(derived: Word, "word", (16, Bit)); unit!(derived: DoubleWord, "dword", (32, Bit)); unit!(derived: QuadWord, "qword", (64, Bit)); unit!(prefix: Kilobit, Kilo, Bit);
23unit!(prefix: Megabit, Mega, Bit);
24unit!(prefix: Gigabit, Giga, Bit);
25unit!(prefix: Terabit, Tera, Bit);
26unit!(prefix: Petabit, Peta, Bit);
27unit!(prefix: Exabit, Exa, Bit);
28
29unit!(prefix: Kilobyte, Kilo, Byte);
30unit!(prefix: Megabyte, Mega, Byte);
31unit!(prefix: Gigabyte, Giga, Byte);
32unit!(prefix: Terabyte, Tera, Byte);
33unit!(prefix: Petabyte, Peta, Byte);
34unit!(prefix: Exabyte, Exa, Byte);
35unit!(prefix: Zettabyte, Zetta, Byte);
36unit!(prefix: Yottabyte, Yotta, Byte);
37
38unit!(prefix: Kibibit, Kibi, Bit);
40unit!(prefix: Mebibit, Mebi, Bit);
41unit!(prefix: Gibibit, Gibi, Bit);
42unit!(prefix: Tebibit, Tebi, Bit);
43unit!(prefix: Pebibit, Pebi, Bit);
44unit!(prefix: Exbibit, Exbi, Bit);
45unit!(prefix: Zebibit, Zebi, Bit);
46unit!(prefix: Yobibit, Yobi, Bit);
47
48unit!(prefix: Kibibyte, Kibi, Byte);
49unit!(prefix: Mebibyte, Mebi, Byte);
50unit!(prefix: Gibibyte, Gibi, Byte);
51unit!(prefix: Tebibyte, Tebi, Byte);
52unit!(prefix: Pebibyte, Pebi, Byte);
53unit!(prefix: Exbibyte, Exbi, Byte);
54unit!(prefix: Zebibyte, Zebi, Byte);
55unit!(prefix: Yobibyte, Yobi, Byte);
56
57quantity!(DataRate: M Z0, L Z0, T N1, I Z0, Th Z0, N Z0, J Z0; marked); unit!(compound: BitPerSecond, "bit/s", [(Bit, P1), (Second, N1)]; prefixable, marked DataRate);
64unit!(compound: BytePerSecond, "B/s", [(Byte, P1), (Second, N1)]; prefixable, marked DataRate);
65
66unit!(prefix: KilobitPerSecond, Kilo, BitPerSecond);
68unit!(prefix: MegabitPerSecond, Mega, BitPerSecond);
69unit!(prefix: GigabitPerSecond, Giga, BitPerSecond);
70unit!(prefix: TerabitPerSecond, Tera, BitPerSecond);
71
72unit!(prefix: KilobytePerSecond, Kilo, BytePerSecond);
73unit!(prefix: MegabytePerSecond, Mega, BytePerSecond);
74unit!(prefix: GigabytePerSecond, Giga, BytePerSecond);
75unit!(prefix: TerabytePerSecond, Tera, BytePerSecond);
76
77unit!(prefix: KibibitPerSecond, Kibi, BitPerSecond);
79unit!(prefix: MebibitPerSecond, Mebi, BitPerSecond);
80unit!(prefix: GibibitPerSecond, Gibi, BitPerSecond);
81unit!(prefix: TebibitPerSecond, Tebi, BitPerSecond);
82
83unit!(prefix: KibibytePerSecond, Kibi, BytePerSecond);
84unit!(prefix: MebibytePerSecond, Mebi, BytePerSecond);
85unit!(prefix: GibibytePerSecond, Gibi, BytePerSecond);
86unit!(prefix: TebibytePerSecond, Tebi, BytePerSecond);
87
88quantity!(ComputationalRate: M Z0, L Z0, T N1, I Z0, Th Z0, N Z0, J Z0; marked); unit!(base: InstructionPerSecond, "IPS", ComputationalRate; prefixable);
95unit!(prefix: KiloInstructionPerSecond, Kilo, InstructionPerSecond);
96unit!(prefix: MegaInstructionPerSecond, Mega, InstructionPerSecond);
97unit!(prefix: GigaInstructionPerSecond, Giga, InstructionPerSecond);
98
99unit!(base: FloatingPointOperationPerSecond, "FLOPS", ComputationalRate; prefixable);
101unit!(prefix: KiloFloatingPointOperationPerSecond, Kilo, FloatingPointOperationPerSecond);
102unit!(prefix: MegaFloatingPointOperationPerSecond, Mega, FloatingPointOperationPerSecond);
103unit!(prefix: GigaFloatingPointOperationPerSecond, Giga, FloatingPointOperationPerSecond);
104unit!(prefix: TeraFloatingPointOperationPerSecond, Tera, FloatingPointOperationPerSecond);
105unit!(prefix: PetaFloatingPointOperationPerSecond, Peta, FloatingPointOperationPerSecond);
106unit!(prefix: ExaFloatingPointOperationPerSecond, Exa, FloatingPointOperationPerSecond);
107
108quantity!(PixelDensity: M Z0, L N1, T Z0, I Z0, Th Z0, N Z0, J Z0; marked); unit!(compound: PixelPerInch, "PPI", [(Inch, N1)]; marked PixelDensity); unit!(compound: DotPerInch, "DPI", [(Inch, N1)]; marked PixelDensity); unit!(compound: PixelPerCentimetre, "PPCM", [(Centimetre, N1)]; marked PixelDensity); #[cfg(test)]
118mod tests {
119 use super::*;
120 use crate::common::verify_unit;
121
122 verify_unit!(Bit, Information, 1.0);
124 verify_unit!(Byte, Information, 8.0);
125 verify_unit!(Nibble, Information, 4.0);
126 verify_unit!(Word, Information, 16.0);
127 verify_unit!(DoubleWord, Information, 32.0);
128 verify_unit!(QuadWord, Information, 64.0);
129
130 verify_unit!(Kilobit, Information, 1000.0);
132 verify_unit!(Megabit, Information, 1_000_000.0);
133 verify_unit!(Gigabit, Information, 1_000_000_000.0);
134 verify_unit!(Terabit, Information, 1_000_000_000_000.0);
135 verify_unit!(Petabit, Information, 1_000_000_000_000_000.0);
136 verify_unit!(Exabit, Information, 1_000_000_000_000_000_000.0);
137
138 verify_unit!(Kilobyte, Information, 8_000.0);
139 verify_unit!(Megabyte, Information, 8_000_000.0);
140 verify_unit!(Gigabyte, Information, 8_000_000_000.0);
141 verify_unit!(Terabyte, Information, 8_000_000_000_000.0);
142 verify_unit!(Petabyte, Information, 8_000_000_000_000_000.0);
143 verify_unit!(Exabyte, Information, 8_000_000_000_000_000_000.0);
144 verify_unit!(Zettabyte, Information, 8e21);
145 verify_unit!(Yottabyte, Information, 8e24);
146
147 verify_unit!(Kibibit, Information, 1024.0);
149 verify_unit!(Mebibit, Information, 1_048_576.0);
150 verify_unit!(Gibibit, Information, 1_073_741_824.0);
151 verify_unit!(Tebibit, Information, 1_099_511_627_776.0);
152 verify_unit!(Pebibit, Information, 1_125_899_906_842_624.0);
153 verify_unit!(Exbibit, Information, 1_152_921_504_606_846_976.0);
154 verify_unit!(Zebibit, Information, 1_180_591_620_717_411_303_424.0);
155 verify_unit!(Yobibit, Information, 1_208_925_819_614_629_174_706_176.0);
156
157 verify_unit!(Kibibyte, Information, 8_192.0);
158 verify_unit!(Mebibyte, Information, 8_388_608.0);
159 verify_unit!(Gibibyte, Information, 8_589_934_592.0);
160 verify_unit!(Tebibyte, Information, 8_796_093_022_208.0);
161 verify_unit!(Pebibyte, Information, 9_007_199_254_740_992.0);
162 verify_unit!(Exbibyte, Information, 9_223_372_036_854_775_808.0);
163 verify_unit!(Zebibyte, Information, 9_444_732_965_739_290_427_392.0);
164 verify_unit!(Yobibyte, Information, 9_671_406_556_917_033_397_649_408.0);
165
166 verify_unit!(BitPerSecond, DataRate, 1.0);
168 verify_unit!(BytePerSecond, DataRate, 8.0);
169
170 verify_unit!(KilobitPerSecond, DataRate, 1_000.0);
172 verify_unit!(MegabitPerSecond, DataRate, 1_000_000.0);
173 verify_unit!(GigabitPerSecond, DataRate, 1_000_000_000.0);
174 verify_unit!(TerabitPerSecond, DataRate, 1_000_000_000_000.0);
175
176 verify_unit!(KilobytePerSecond, DataRate, 8_000.0);
177 verify_unit!(MegabytePerSecond, DataRate, 8_000_000.0);
178 verify_unit!(GigabytePerSecond, DataRate, 8_000_000_000.0);
179 verify_unit!(TerabytePerSecond, DataRate, 8_000_000_000_000.0);
180
181 verify_unit!(KibibitPerSecond, DataRate, 1_024.0);
183 verify_unit!(MebibitPerSecond, DataRate, 1_048_576.0);
184 verify_unit!(GibibitPerSecond, DataRate, 1_073_741_824.0);
185 verify_unit!(TebibitPerSecond, DataRate, 1_099_511_627_776.0);
186
187 verify_unit!(KibibytePerSecond, DataRate, 8_192.0);
188 verify_unit!(MebibytePerSecond, DataRate, 8_388_608.0);
189 verify_unit!(GibibytePerSecond, DataRate, 8_589_934_592.0);
190 verify_unit!(TebibytePerSecond, DataRate, 8_796_093_022_208.0);
191
192 verify_unit!(InstructionPerSecond, ComputationalRate, 1.0);
194 verify_unit!(KiloInstructionPerSecond, ComputationalRate, 1_000.0);
195 verify_unit!(MegaInstructionPerSecond, ComputationalRate, 1_000_000.0);
196 verify_unit!(GigaInstructionPerSecond, ComputationalRate, 1_000_000_000.0);
197
198 verify_unit!(FloatingPointOperationPerSecond, ComputationalRate, 1.0);
199 verify_unit!(
200 KiloFloatingPointOperationPerSecond,
201 ComputationalRate,
202 1_000.0
203 );
204 verify_unit!(
205 MegaFloatingPointOperationPerSecond,
206 ComputationalRate,
207 1_000_000.0
208 );
209 verify_unit!(
210 GigaFloatingPointOperationPerSecond,
211 ComputationalRate,
212 1_000_000_000.0
213 );
214 verify_unit!(
215 TeraFloatingPointOperationPerSecond,
216 ComputationalRate,
217 1_000_000_000_000.0
218 );
219 verify_unit!(
220 PetaFloatingPointOperationPerSecond,
221 ComputationalRate,
222 1_000_000_000_000_000.0
223 );
224 verify_unit!(
225 ExaFloatingPointOperationPerSecond,
226 ComputationalRate,
227 1_000_000_000_000_000_000.0
228 );
229
230 verify_unit!(PixelPerInch, PixelDensity, 39.3700787402); verify_unit!(DotPerInch, PixelDensity, 39.3700787402); verify_unit!(PixelPerCentimetre, PixelDensity, 100.0); }