devtoolz-library 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (197) hide show
  1. package/dist/baseFactory.d.ts +12 -0
  2. package/dist/baseFactory.js +33 -0
  3. package/dist/constants/regexPatterns.d.ts +2 -0
  4. package/dist/constants/regexPatterns.js +9 -0
  5. package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.d.ts +4 -0
  6. package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.factory.d.ts +4 -0
  7. package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.factory.js +2 -0
  8. package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.js +2 -0
  9. package/dist/converters/numeric-systems/numericSystem.converter.d.ts +5 -0
  10. package/dist/converters/numeric-systems/numericSystem.converter.factory.d.ts +8 -0
  11. package/dist/converters/numeric-systems/numericSystem.converter.factory.js +17 -0
  12. package/dist/converters/numeric-systems/numericSystem.converter.js +17 -0
  13. package/dist/converters/numeric-systems/provider.d.ts +2 -0
  14. package/dist/converters/numeric-systems/provider.js +11 -0
  15. package/dist/converters/numeric-systems/services/binary/binary.converter.d.ts +5 -0
  16. package/dist/converters/numeric-systems/services/binary/binary.converter.js +16 -0
  17. package/dist/converters/numeric-systems/services/binary/binary.converter.test.d.ts +1 -0
  18. package/dist/converters/numeric-systems/services/binary/binary.converter.test.js +252 -0
  19. package/dist/converters/numeric-systems/services/decimal/decimal.converter.d.ts +5 -0
  20. package/dist/converters/numeric-systems/services/decimal/decimal.converter.js +16 -0
  21. package/dist/converters/numeric-systems/services/decimal/decimal.converter.test.d.ts +1 -0
  22. package/dist/converters/numeric-systems/services/decimal/decimal.converter.test.js +199 -0
  23. package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.d.ts +5 -0
  24. package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.js +18 -0
  25. package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.test.d.ts +1 -0
  26. package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.test.js +130 -0
  27. package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.d.ts +5 -0
  28. package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.js +15 -0
  29. package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.test.d.ts +1 -0
  30. package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.test.js +151 -0
  31. package/dist/converters/numeric-systems/services/roman/roman.converter.d.ts +7 -0
  32. package/dist/converters/numeric-systems/services/roman/roman.converter.js +77 -0
  33. package/dist/converters/numeric-systems/services/roman/roman.converter.test.d.ts +1 -0
  34. package/dist/converters/numeric-systems/services/roman/roman.converter.test.js +105 -0
  35. package/dist/converters/serialization/interfaces/ISerialization.converter.d.ts +5 -0
  36. package/dist/converters/serialization/interfaces/ISerialization.converter.factory.d.ts +4 -0
  37. package/dist/converters/serialization/interfaces/ISerialization.converter.factory.js +2 -0
  38. package/dist/converters/serialization/interfaces/ISerialization.converter.js +2 -0
  39. package/dist/converters/serialization/interfaces/ISerializationOptions.d.ts +4 -0
  40. package/dist/converters/serialization/interfaces/ISerializationOptions.js +2 -0
  41. package/dist/converters/serialization/provider.d.ts +2 -0
  42. package/dist/converters/serialization/provider.js +7 -0
  43. package/dist/converters/serialization/serialization.converter.d.ts +6 -0
  44. package/dist/converters/serialization/serialization.converter.factory.d.ts +9 -0
  45. package/dist/converters/serialization/serialization.converter.factory.js +20 -0
  46. package/dist/converters/serialization/serialization.converter.js +17 -0
  47. package/dist/converters/serialization/services/csv/csv.converter.d.ts +6 -0
  48. package/dist/converters/serialization/services/csv/csv.converter.js +68 -0
  49. package/dist/converters/serialization/services/csv/csv.converter.test.d.ts +1 -0
  50. package/dist/converters/serialization/services/csv/csv.converter.test.js +295 -0
  51. package/dist/converters/serialization/services/json/json.converter.d.ts +5 -0
  52. package/dist/converters/serialization/services/json/json.converter.js +12 -0
  53. package/dist/converters/text-format/inteface/ITextFormatConverter.converter.d.ts +4 -0
  54. package/dist/converters/text-format/inteface/ITextFormatConverter.converter.factory.d.ts +4 -0
  55. package/dist/converters/text-format/inteface/ITextFormatConverter.converter.factory.js +2 -0
  56. package/dist/converters/text-format/inteface/ITextFormatConverter.converter.js +2 -0
  57. package/dist/converters/text-format/provider.d.ts +2 -0
  58. package/dist/converters/text-format/provider.js +8 -0
  59. package/dist/converters/text-format/services/binary/binary-format.converter.d.ts +5 -0
  60. package/dist/converters/text-format/services/binary/binary-format.converter.js +40 -0
  61. package/dist/converters/text-format/services/binary/binary-format.converter.test.d.ts +1 -0
  62. package/dist/converters/text-format/services/binary/binary-format.converter.test.js +174 -0
  63. package/dist/converters/text-format/services/morse/morse-format.converter.d.ts +6 -0
  64. package/dist/converters/text-format/services/morse/morse-format.converter.js +85 -0
  65. package/dist/converters/text-format/services/morse/morse-format.converter.test.d.ts +1 -0
  66. package/dist/converters/text-format/services/morse/morse-format.converter.test.js +518 -0
  67. package/dist/converters/text-format/services/text/text-format.converter.d.ts +5 -0
  68. package/dist/converters/text-format/services/text/text-format.converter.js +12 -0
  69. package/dist/converters/text-format/textFormatConverter.converter.d.ts +5 -0
  70. package/dist/converters/text-format/textFormatConverter.converter.factory.d.ts +8 -0
  71. package/dist/converters/text-format/textFormatConverter.converter.factory.js +17 -0
  72. package/dist/converters/text-format/textFormatConverter.converter.js +17 -0
  73. package/dist/converters/unit-converter/converter-base.d.ts +19 -0
  74. package/dist/converters/unit-converter/converter-base.js +56 -0
  75. package/dist/converters/unit-converter/interfaces/IUnitConverter.d.ts +9 -0
  76. package/dist/converters/unit-converter/interfaces/IUnitConverter.js +2 -0
  77. package/dist/converters/unit-converter/interfaces/IUnitConverterFactory.d.ts +4 -0
  78. package/dist/converters/unit-converter/interfaces/IUnitConverterFactory.js +2 -0
  79. package/dist/converters/unit-converter/models/unit.d.ts +7 -0
  80. package/dist/converters/unit-converter/models/unit.js +2 -0
  81. package/dist/converters/unit-converter/provider.d.ts +2 -0
  82. package/dist/converters/unit-converter/provider.js +16 -0
  83. package/dist/converters/unit-converter/services/angle/angle.converter.d.ts +4 -0
  84. package/dist/converters/unit-converter/services/angle/angle.converter.js +15 -0
  85. package/dist/converters/unit-converter/services/angle/angle.converter.test.d.ts +1 -0
  86. package/dist/converters/unit-converter/services/angle/angle.converter.test.js +112 -0
  87. package/dist/converters/unit-converter/services/area/area.converter.d.ts +4 -0
  88. package/dist/converters/unit-converter/services/area/area.converter.js +24 -0
  89. package/dist/converters/unit-converter/services/area/area.converter.test.d.ts +1 -0
  90. package/dist/converters/unit-converter/services/area/area.converter.test.js +439 -0
  91. package/dist/converters/unit-converter/services/data/data.converter.d.ts +4 -0
  92. package/dist/converters/unit-converter/services/data/data.converter.js +30 -0
  93. package/dist/converters/unit-converter/services/data/data.converter.test.d.ts +1 -0
  94. package/dist/converters/unit-converter/services/data/data.converter.test.js +209 -0
  95. package/dist/converters/unit-converter/services/energy/energy.converter.d.ts +4 -0
  96. package/dist/converters/unit-converter/services/energy/energy.converter.js +20 -0
  97. package/dist/converters/unit-converter/services/energy/energy.converter.test.d.ts +1 -0
  98. package/dist/converters/unit-converter/services/energy/energy.converter.test.js +154 -0
  99. package/dist/converters/unit-converter/services/length/length.converter.d.ts +4 -0
  100. package/dist/converters/unit-converter/services/length/length.converter.js +31 -0
  101. package/dist/converters/unit-converter/services/length/length.converter.test.d.ts +1 -0
  102. package/dist/converters/unit-converter/services/length/length.converter.test.js +186 -0
  103. package/dist/converters/unit-converter/services/power/power.converter.d.ts +4 -0
  104. package/dist/converters/unit-converter/services/power/power.converter.js +17 -0
  105. package/dist/converters/unit-converter/services/power/power.converter.test.d.ts +1 -0
  106. package/dist/converters/unit-converter/services/power/power.converter.test.js +223 -0
  107. package/dist/converters/unit-converter/services/pressure/pressure.converter.d.ts +4 -0
  108. package/dist/converters/unit-converter/services/pressure/pressure.converter.js +18 -0
  109. package/dist/converters/unit-converter/services/pressure/pressure.converter.test.d.ts +1 -0
  110. package/dist/converters/unit-converter/services/pressure/pressure.converter.test.js +107 -0
  111. package/dist/converters/unit-converter/services/speed/speed.converter.d.ts +4 -0
  112. package/dist/converters/unit-converter/services/speed/speed.converter.js +22 -0
  113. package/dist/converters/unit-converter/services/speed/speed.converter.test.d.ts +1 -0
  114. package/dist/converters/unit-converter/services/speed/speed.converter.test.js +257 -0
  115. package/dist/converters/unit-converter/services/temperature/temperature.converter.d.ts +7 -0
  116. package/dist/converters/unit-converter/services/temperature/temperature.converter.js +46 -0
  117. package/dist/converters/unit-converter/services/temperature/temperature.converter.test.d.ts +1 -0
  118. package/dist/converters/unit-converter/services/temperature/temperature.converter.test.js +279 -0
  119. package/dist/converters/unit-converter/services/time/time.converter.d.ts +4 -0
  120. package/dist/converters/unit-converter/services/time/time.converter.js +26 -0
  121. package/dist/converters/unit-converter/services/volume/volume.converter.d.ts +4 -0
  122. package/dist/converters/unit-converter/services/volume/volume.converter.js +39 -0
  123. package/dist/converters/unit-converter/services/volume/volume.converter.test.d.ts +1 -0
  124. package/dist/converters/unit-converter/services/volume/volume.converter.test.js +295 -0
  125. package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.d.ts +4 -0
  126. package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.js +29 -0
  127. package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.test.d.ts +1 -0
  128. package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.test.js +218 -0
  129. package/dist/converters/unit-converter/unit.converter.factory.d.ts +9 -0
  130. package/dist/converters/unit-converter/unit.converter.factory.js +20 -0
  131. package/dist/crypt.d.ts +0 -0
  132. package/dist/crypt.js +77 -0
  133. package/dist/documents/cnpj/cnpj.d.ts +14 -0
  134. package/dist/documents/cnpj/cnpj.formatter.d.ts +5 -0
  135. package/dist/documents/cnpj/cnpj.formatter.js +12 -0
  136. package/dist/documents/cnpj/cnpj.generator.d.ts +9 -0
  137. package/dist/documents/cnpj/cnpj.generator.js +43 -0
  138. package/dist/documents/cnpj/cnpj.js +47 -0
  139. package/dist/documents/cnpj/cnpj.validator.d.ts +11 -0
  140. package/dist/documents/cnpj/cnpj.validator.js +49 -0
  141. package/dist/documents/cnpj/tests/cnpj.formatter.test.d.ts +1 -0
  142. package/dist/documents/cnpj/tests/cnpj.formatter.test.js +62 -0
  143. package/dist/documents/cnpj/tests/cnpj.generator.test.d.ts +1 -0
  144. package/dist/documents/cnpj/tests/cnpj.generator.test.js +51 -0
  145. package/dist/documents/cnpj/tests/cnpj.test.d.ts +1 -0
  146. package/dist/documents/cnpj/tests/cnpj.test.js +162 -0
  147. package/dist/documents/cnpj/tests/cnpj.validator.test.d.ts +1 -0
  148. package/dist/documents/cnpj/tests/cnpj.validator.test.js +104 -0
  149. package/dist/documents/cpf/cpf.d.ts +14 -0
  150. package/dist/documents/cpf/cpf.formatter.d.ts +5 -0
  151. package/dist/documents/cpf/cpf.formatter.js +12 -0
  152. package/dist/documents/cpf/cpf.generator.d.ts +9 -0
  153. package/dist/documents/cpf/cpf.generator.js +40 -0
  154. package/dist/documents/cpf/cpf.js +50 -0
  155. package/dist/documents/cpf/cpf.validator.d.ts +11 -0
  156. package/dist/documents/cpf/cpf.validator.js +46 -0
  157. package/dist/documents/cpf/tests/cpf.formatter.test.d.ts +1 -0
  158. package/dist/documents/cpf/tests/cpf.formatter.test.js +71 -0
  159. package/dist/documents/cpf/tests/cpf.generator.test.d.ts +1 -0
  160. package/dist/documents/cpf/tests/cpf.generator.test.js +71 -0
  161. package/dist/documents/cpf/tests/cpf.test.d.ts +1 -0
  162. package/dist/documents/cpf/tests/cpf.test.js +151 -0
  163. package/dist/documents/cpf/tests/cpf.validator.test.d.ts +1 -0
  164. package/dist/documents/cpf/tests/cpf.validator.test.js +113 -0
  165. package/dist/documents/interfaces/formatter.interface.d.ts +4 -0
  166. package/dist/documents/interfaces/formatter.interface.js +2 -0
  167. package/dist/documents/interfaces/generator.interface.d.ts +3 -0
  168. package/dist/documents/interfaces/generator.interface.js +2 -0
  169. package/dist/documents/interfaces/validator.interface.d.ts +4 -0
  170. package/dist/documents/interfaces/validator.interface.js +2 -0
  171. package/dist/documents/models/validation-result.model.d.ts +4 -0
  172. package/dist/documents/models/validation-result.model.js +2 -0
  173. package/dist/enums/cryptProvider.d.ts +6 -0
  174. package/dist/enums/cryptProvider.js +10 -0
  175. package/dist/extensions/array.extensions.d.ts +6 -0
  176. package/dist/extensions/array.extensions.js +7 -0
  177. package/dist/extensions/boolean.extensions.d.ts +6 -0
  178. package/dist/extensions/boolean.extensions.js +5 -0
  179. package/dist/extensions/number.extensions.d.ts +11 -0
  180. package/dist/extensions/number.extensions.js +24 -0
  181. package/dist/extensions/string.extensions.d.ts +13 -0
  182. package/dist/extensions/string.extensions.js +28 -0
  183. package/dist/index.d.ts +22 -0
  184. package/dist/index.js +39 -0
  185. package/dist/interfaces/IFactory.d.ts +3 -0
  186. package/dist/interfaces/IFactory.js +2 -0
  187. package/dist/interfaces/IServiceCategory.d.ts +3 -0
  188. package/dist/interfaces/IServiceCategory.js +2 -0
  189. package/dist/interfaces/validator.d.ts +5 -0
  190. package/dist/interfaces/validator.js +2 -0
  191. package/dist/interfaces/value.d.ts +3 -0
  192. package/dist/interfaces/value.js +2 -0
  193. package/dist/interfaces/valueGenerator.d.ts +4 -0
  194. package/dist/interfaces/valueGenerator.js +2 -0
  195. package/dist/random.d.ts +12 -0
  196. package/dist/random.js +29 -0
  197. package/package.json +25 -0
@@ -0,0 +1,209 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const data_converter_1 = require("./data.converter");
4
+ describe('DigitalConverter', () => {
5
+ let converter;
6
+ beforeEach(() => {
7
+ converter = new data_converter_1.DataConverter();
8
+ });
9
+ describe('Inicialização', () => {
10
+ it('deve inicializar com todas as unidades de informação digital', () => {
11
+ const units = converter.getUnits();
12
+ expect(units).toHaveLength(18);
13
+ });
14
+ it('deve ter bit como unidade base', () => {
15
+ const baseUnit = converter.getBaseUnit();
16
+ expect(baseUnit.id).toBe('bit');
17
+ expect(baseUnit.isBaseUnit).toBe(true);
18
+ expect(baseUnit.conversionFactor).toBe(1);
19
+ });
20
+ });
21
+ describe('Busca de unidades', () => {
22
+ it('deve encontrar unidade por ID', () => {
23
+ const unit = converter.getUnitById('megabyte');
24
+ expect(unit).toBeDefined();
25
+ expect(unit?.name).toBe('Megabyte');
26
+ expect(unit?.symbol).toBe('MB');
27
+ });
28
+ it('deve encontrar unidade por símbolo', () => {
29
+ const unit = converter.getUnitBySymbol('GB');
30
+ expect(unit).toBeDefined();
31
+ expect(unit?.id).toBe('gigabyte');
32
+ expect(unit?.name).toBe('Gigabyte');
33
+ });
34
+ it('deve encontrar unidade por nome', () => {
35
+ const unit = converter.getUnitByName('Kilobit');
36
+ expect(unit).toBeDefined();
37
+ expect(unit?.id).toBe('kilobit');
38
+ expect(unit?.symbol).toBe('kbit');
39
+ });
40
+ it('deve retornar undefined para unidade inexistente', () => {
41
+ expect(converter.getUnitById('inexistente')).toBeUndefined();
42
+ expect(converter.getUnitBySymbol('XX')).toBeUndefined();
43
+ expect(converter.getUnitByName('Unidade Inexistente')).toBeUndefined();
44
+ });
45
+ });
46
+ describe('Conversões básicas', () => {
47
+ it('deve converter bits para bytes', () => {
48
+ const result = converter.convert(8, 'bit', 'byte');
49
+ expect(result).toBe(1);
50
+ });
51
+ it('deve converter bytes para bits', () => {
52
+ const result = converter.convert(1, 'byte', 'bit');
53
+ expect(result).toBe(8);
54
+ });
55
+ it('deve converter da mesma unidade para ela mesma', () => {
56
+ const result = converter.convert(100, 'megabyte', 'megabyte');
57
+ expect(result).toBe(100);
58
+ });
59
+ });
60
+ describe('Conversões entre bits', () => {
61
+ it('deve converter bits para kilobits', () => {
62
+ const result = converter.convert(1000, 'bit', 'kilobit');
63
+ expect(result).toBe(1);
64
+ });
65
+ it('deve converter kilobits para megabits', () => {
66
+ const result = converter.convert(1000, 'kilobit', 'megabit');
67
+ expect(result).toBe(1);
68
+ });
69
+ it('deve converter megabits para gigabits', () => {
70
+ const result = converter.convert(1000, 'megabit', 'gigabit');
71
+ expect(result).toBe(1);
72
+ });
73
+ it('deve converter gigabits para terabits', () => {
74
+ const result = converter.convert(1000, 'gigabit', 'terabit');
75
+ expect(result).toBe(1);
76
+ });
77
+ });
78
+ describe('Conversões entre bytes', () => {
79
+ it('deve converter bytes para kilobytes', () => {
80
+ const result = converter.convert(1000, 'byte', 'kilobyte');
81
+ expect(result).toBe(1);
82
+ });
83
+ it('deve converter kilobytes para megabytes', () => {
84
+ const result = converter.convert(1000, 'kilobyte', 'megabyte');
85
+ expect(result).toBe(1);
86
+ });
87
+ it('deve converter megabytes para gigabytes', () => {
88
+ const result = converter.convert(1000, 'megabyte', 'gigabyte');
89
+ expect(result).toBe(1);
90
+ });
91
+ it('deve converter gigabytes para terabytes', () => {
92
+ const result = converter.convert(1000, 'gigabyte', 'terabyte');
93
+ expect(result).toBe(1);
94
+ });
95
+ });
96
+ describe('Conversões mistas (bits para bytes)', () => {
97
+ it('deve converter kilobits para kilobytes', () => {
98
+ const result = converter.convert(8, 'kilobit', 'kilobyte');
99
+ expect(result).toBe(1);
100
+ });
101
+ it('deve converter megabits para megabytes', () => {
102
+ const result = converter.convert(8, 'megabit', 'megabyte');
103
+ expect(result).toBe(1);
104
+ });
105
+ it('deve converter gigabits para gigabytes', () => {
106
+ const result = converter.convert(8, 'gigabit', 'gigabyte');
107
+ expect(result).toBe(1);
108
+ });
109
+ it('deve converter terabits para terabytes', () => {
110
+ const result = converter.convert(8, 'terabit', 'terabyte');
111
+ expect(result).toBe(1);
112
+ });
113
+ });
114
+ describe('Conversões mistas (bytes para bits)', () => {
115
+ it('deve converter kilobytes para kilobits', () => {
116
+ const result = converter.convert(1, 'kilobyte', 'kilobit');
117
+ expect(result).toBe(8);
118
+ });
119
+ it('deve converter megabytes para megabits', () => {
120
+ const result = converter.convert(1, 'megabyte', 'megabit');
121
+ expect(result).toBe(8);
122
+ });
123
+ it('deve converter gigabytes para gigabits', () => {
124
+ const result = converter.convert(1, 'gigabyte', 'gigabit');
125
+ expect(result).toBe(8);
126
+ });
127
+ it('deve converter terabytes para terabits', () => {
128
+ const result = converter.convert(1, 'terabyte', 'terabit');
129
+ expect(result).toBe(8);
130
+ });
131
+ });
132
+ describe('Conversões de unidades grandes', () => {
133
+ it('deve converter petabytes para terabytes', () => {
134
+ const result = converter.convert(1, 'petabyte', 'terabyte');
135
+ expect(result).toBe(1000);
136
+ });
137
+ it('deve converter exabytes para petabytes', () => {
138
+ const result = converter.convert(1, 'exabyte', 'petabyte');
139
+ expect(result).toBe(1000);
140
+ });
141
+ it('deve converter zetabytes para exabytes', () => {
142
+ const result = converter.convert(1, 'zetabyte', 'exabyte');
143
+ expect(result).toBe(1000);
144
+ });
145
+ it('deve converter yottabytes para zetabytes', () => {
146
+ const result = converter.convert(1, 'yottabyte', 'zetabyte');
147
+ expect(result).toBe(1000);
148
+ });
149
+ });
150
+ describe('Conversões extremas', () => {
151
+ it('deve converter bits para yottabytes', () => {
152
+ const result = converter.convert(8000000000000000000000000, 'bit', 'yottabyte');
153
+ expect(result).toBe(1);
154
+ });
155
+ it('deve converter yottabytes para bits', () => {
156
+ const result = converter.convert(1, 'yottabyte', 'bit');
157
+ expect(result).toBe(8000000000000000000000000);
158
+ });
159
+ it('deve converter yottabits para bits', () => {
160
+ const result = converter.convert(1, 'yottabit', 'bit');
161
+ expect(result).toBe(1000000000000000000000000);
162
+ });
163
+ });
164
+ describe('Tratamento de erros', () => {
165
+ it('deve lançar erro para unidade de origem não encontrada', () => {
166
+ expect(() => {
167
+ converter.convert(100, 'unidade_inexistente', 'byte');
168
+ }).toThrow('Unidades não encontradas');
169
+ });
170
+ it('deve lançar erro para unidade de destino não encontrada', () => {
171
+ expect(() => {
172
+ converter.convert(100, 'byte', 'unidade_inexistente');
173
+ }).toThrow('Unidades não encontradas');
174
+ });
175
+ it('deve lançar erro para ambas as unidades não encontradas', () => {
176
+ expect(() => {
177
+ converter.convert(100, 'unidade1', 'unidade2');
178
+ }).toThrow('Unidades não encontradas');
179
+ });
180
+ });
181
+ describe('Valores decimais', () => {
182
+ it('deve converter valores decimais corretamente', () => {
183
+ const result = converter.convert(0.5, 'kilobyte', 'byte');
184
+ expect(result).toBe(500);
185
+ });
186
+ it('deve converter para valores decimais corretamente', () => {
187
+ const result = converter.convert(500, 'byte', 'kilobyte');
188
+ expect(result).toBe(0.5);
189
+ });
190
+ it('deve manter precisão em conversões decimais', () => {
191
+ const result = converter.convert(1.5, 'megabyte', 'kilobyte');
192
+ expect(result).toBe(1500);
193
+ });
194
+ });
195
+ describe('Verificação de fatores de conversão', () => {
196
+ it('deve ter fatores de conversão corretos para bits', () => {
197
+ expect(converter.getUnitById('bit')?.conversionFactor).toBe(1);
198
+ expect(converter.getUnitById('kilobit')?.conversionFactor).toBe(1000);
199
+ expect(converter.getUnitById('megabit')?.conversionFactor).toBe(1000000);
200
+ expect(converter.getUnitById('gigabit')?.conversionFactor).toBe(1000000000);
201
+ });
202
+ it('deve ter fatores de conversão corretos para bytes', () => {
203
+ expect(converter.getUnitById('byte')?.conversionFactor).toBe(8);
204
+ expect(converter.getUnitById('kilobyte')?.conversionFactor).toBe(8000);
205
+ expect(converter.getUnitById('megabyte')?.conversionFactor).toBe(8000000);
206
+ expect(converter.getUnitById('gigabyte')?.conversionFactor).toBe(8000000000);
207
+ });
208
+ });
209
+ });
@@ -0,0 +1,4 @@
1
+ import { ConverterBaseService } from '../../converter-base';
2
+ export declare class LengthConverter extends ConverterBaseService {
3
+ constructor();
4
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LengthConverter = void 0;
4
+ const converter_base_1 = require("../../converter-base");
5
+ class LengthConverter extends converter_base_1.ConverterBaseService {
6
+ constructor() {
7
+ super([
8
+ // Base: Joule
9
+ { id: 'joule', name: 'Joule', symbol: 'J', conversionFactor: 1, isBaseUnit: true },
10
+ { id: 'quilojoule', name: 'Quilojoule', symbol: 'kJ', conversionFactor: 1000, isBaseUnit: false },
11
+ { id: 'eletron-volt', name: 'Elétron-volt', symbol: 'eV', conversionFactor: 1.602176634e-19, isBaseUnit: false },
12
+ { id: 'caloria-termica', name: 'Caloria térmica (cal)', symbol: 'cal', conversionFactor: 4.184, isBaseUnit: false },
13
+ { id: 'caloria-alimentar', name: 'Caloria alimentar (kcal)', symbol: 'kcal', conversionFactor: 4184, isBaseUnit: false },
14
+ { id: 'libra-pe', name: 'Libra-pé', symbol: 'lbf·ft', conversionFactor: 1.3558179483314, isBaseUnit: false },
15
+ { id: 'btu', name: 'Unidade Térmica Britânica (BTU)', symbol: 'BTU', conversionFactor: 1055.05585262, isBaseUnit: false },
16
+ // { id: 'quilowatt-hora', name: 'Quilowatt-hora', symbol: 'kWh', conversionFactor: 3.6e6, isBaseUnit: false }
17
+ ]);
18
+ }
19
+ }
20
+ exports.LengthConverter = LengthConverter;
@@ -0,0 +1,154 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const unit_converter_factory_1 = require("../../unit.converter.factory");
4
+ const factory = new unit_converter_factory_1.UnitConverterFactory();
5
+ const converter = factory.createService('energy');
6
+ describe('Conversão completa entre unidades de energia', () => {
7
+ test('1 joule → joule ≈ 1.0', () => {
8
+ expect(converter.convert(1, 'joule', 'joule')).toBeCloseTo(1.0, 10);
9
+ });
10
+ test('1 joule → quilojoule ≈ 0.001', () => {
11
+ expect(converter.convert(1, 'joule', 'quilojoule')).toBeCloseTo(0.001, 10);
12
+ });
13
+ test('1 joule → eletron-volt ≈ 6.241509074460763e+18', () => {
14
+ expect(converter.convert(1, 'joule', 'eletron-volt')).toBeCloseTo(6.241509074460763e+18, 10);
15
+ });
16
+ test('1 joule → caloria-termica ≈ 0.239005736137667', () => {
17
+ expect(converter.convert(1, 'joule', 'caloria-termica')).toBeCloseTo(0.239005736137667, 10);
18
+ });
19
+ test('1 joule → caloria-alimentar ≈ 0.000239005736138', () => {
20
+ expect(converter.convert(1, 'joule', 'caloria-alimentar')).toBeCloseTo(0.000239005736138, 10);
21
+ });
22
+ test('1 joule → libra-pe ≈ 0.737562149277266', () => {
23
+ expect(converter.convert(1, 'joule', 'libra-pe')).toBeCloseTo(0.737562149277266, 10);
24
+ });
25
+ test('1 joule → btu ≈ 0.000947817120313', () => {
26
+ expect(converter.convert(1, 'joule', 'btu')).toBeCloseTo(0.000947817120313, 10);
27
+ });
28
+ test('1 quilojoule → joule ≈ 1000.0', () => {
29
+ expect(converter.convert(1, 'quilojoule', 'joule')).toBeCloseTo(1000.0, 10);
30
+ });
31
+ test('1 quilojoule → quilojoule ≈ 1.0', () => {
32
+ expect(converter.convert(1, 'quilojoule', 'quilojoule')).toBeCloseTo(1.0, 10);
33
+ });
34
+ test('1 quilojoule → eletron-volt ≈ 6.241509074460763e+21', () => {
35
+ expect(converter.convert(1, 'quilojoule', 'eletron-volt')).toBeCloseTo(6.241509074460763e+21, 10);
36
+ });
37
+ test('1 quilojoule → caloria-termica ≈ 239.0057361376673', () => {
38
+ expect(converter.convert(1, 'quilojoule', 'caloria-termica')).toBeCloseTo(239.0057361376673, 10);
39
+ });
40
+ test('1 quilojoule → caloria-alimentar ≈ 0.239005736137667', () => {
41
+ expect(converter.convert(1, 'quilojoule', 'caloria-alimentar')).toBeCloseTo(0.239005736137667, 10);
42
+ });
43
+ test('1 quilojoule → libra-pe ≈ 737.5621492772657', () => {
44
+ expect(converter.convert(1, 'quilojoule', 'libra-pe')).toBeCloseTo(737.5621492772657, 10);
45
+ });
46
+ test('1 quilojoule → btu ≈ 0.947817120313317', () => {
47
+ expect(converter.convert(1, 'quilojoule', 'btu')).toBeCloseTo(0.947817120313317, 10);
48
+ });
49
+ test('1 eletron-volt → joule ≈ 0.0', () => {
50
+ expect(converter.convert(1, 'eletron-volt', 'joule')).toBeCloseTo(0.0, 10);
51
+ });
52
+ test('1 eletron-volt → quilojoule ≈ 0.0', () => {
53
+ expect(converter.convert(1, 'eletron-volt', 'quilojoule')).toBeCloseTo(0.0, 10);
54
+ });
55
+ test('1 eletron-volt → eletron-volt ≈ 1.0', () => {
56
+ expect(converter.convert(1, 'eletron-volt', 'eletron-volt')).toBeCloseTo(1.0, 10);
57
+ });
58
+ test('1 eletron-volt → caloria-termica ≈ 0.0', () => {
59
+ expect(converter.convert(1, 'eletron-volt', 'caloria-termica')).toBeCloseTo(0.0, 10);
60
+ });
61
+ test('1 eletron-volt → caloria-alimentar ≈ 0.0', () => {
62
+ expect(converter.convert(1, 'eletron-volt', 'caloria-alimentar')).toBeCloseTo(0.0, 10);
63
+ });
64
+ test('1 eletron-volt → libra-pe ≈ 0.0', () => {
65
+ expect(converter.convert(1, 'eletron-volt', 'libra-pe')).toBeCloseTo(0.0, 10);
66
+ });
67
+ test('1 eletron-volt → btu ≈ 0.0', () => {
68
+ expect(converter.convert(1, 'eletron-volt', 'btu')).toBeCloseTo(0.0, 10);
69
+ });
70
+ test('1 caloria-termica → joule ≈ 4.184', () => {
71
+ expect(converter.convert(1, 'caloria-termica', 'joule')).toBeCloseTo(4.184, 10);
72
+ });
73
+ test('1 caloria-termica → quilojoule ≈ 0.004184', () => {
74
+ expect(converter.convert(1, 'caloria-termica', 'quilojoule')).toBeCloseTo(0.004184, 10);
75
+ });
76
+ test('1 caloria-termica → eletron-volt ≈ 2.6114473967543833e+19', () => {
77
+ expect(converter.convert(1, 'caloria-termica', 'eletron-volt')).toBeCloseTo(2.6114473967543833e+19, 10);
78
+ });
79
+ test('1 caloria-termica → caloria-termica ≈ 1.0', () => {
80
+ expect(converter.convert(1, 'caloria-termica', 'caloria-termica')).toBeCloseTo(1.0, 10);
81
+ });
82
+ test('1 caloria-termica → caloria-alimentar ≈ 0.001', () => {
83
+ expect(converter.convert(1, 'caloria-termica', 'caloria-alimentar')).toBeCloseTo(0.001, 10);
84
+ });
85
+ test('1 caloria-termica → libra-pe ≈ 3.08596003257608', () => {
86
+ expect(converter.convert(1, 'caloria-termica', 'libra-pe')).toBeCloseTo(3.08596003257608, 10);
87
+ });
88
+ test('1 caloria-termica → btu ≈ 0.003965666831391', () => {
89
+ expect(converter.convert(1, 'caloria-termica', 'btu')).toBeCloseTo(0.003965666831391, 10);
90
+ });
91
+ test('1 caloria-alimentar → joule ≈ 4184.0', () => {
92
+ expect(converter.convert(1, 'caloria-alimentar', 'joule')).toBeCloseTo(4184.0, 10);
93
+ });
94
+ test('1 caloria-alimentar → quilojoule ≈ 4.184', () => {
95
+ expect(converter.convert(1, 'caloria-alimentar', 'quilojoule')).toBeCloseTo(4.184, 10);
96
+ });
97
+ test('1 caloria-alimentar → eletron-volt ≈ 2.6114473967543833e+22', () => {
98
+ expect(converter.convert(1, 'caloria-alimentar', 'eletron-volt')).toBeCloseTo(2.6114473967543833e+22, 10);
99
+ });
100
+ test('1 caloria-alimentar → caloria-termica ≈ 1000.0', () => {
101
+ expect(converter.convert(1, 'caloria-alimentar', 'caloria-termica')).toBeCloseTo(1000.0, 10);
102
+ });
103
+ test('1 caloria-alimentar → caloria-alimentar ≈ 1.0', () => {
104
+ expect(converter.convert(1, 'caloria-alimentar', 'caloria-alimentar')).toBeCloseTo(1.0, 10);
105
+ });
106
+ test('1 caloria-alimentar → libra-pe ≈ 3085.9600325760794', () => {
107
+ expect(converter.convert(1, 'caloria-alimentar', 'libra-pe')).toBeCloseTo(3085.9600325760794, 10);
108
+ });
109
+ test('1 caloria-alimentar → btu ≈ 3.965666831390919', () => {
110
+ expect(converter.convert(1, 'caloria-alimentar', 'btu')).toBeCloseTo(3.965666831390919, 10);
111
+ });
112
+ test('1 libra-pe → joule ≈ 1.3558179483314', () => {
113
+ expect(converter.convert(1, 'libra-pe', 'joule')).toBeCloseTo(1.3558179483314, 10);
114
+ });
115
+ test('1 libra-pe → quilojoule ≈ 0.001355817948331', () => {
116
+ expect(converter.convert(1, 'libra-pe', 'quilojoule')).toBeCloseTo(0.001355817948331, 10);
117
+ });
118
+ test('1 libra-pe → eletron-volt ≈ 8.462350027827206e+18', () => {
119
+ expect(converter.convert(1, 'libra-pe', 'eletron-volt')).toBeCloseTo(8.462350027827206e+18, 10);
120
+ });
121
+ test('1 libra-pe → caloria-termica ≈ 0.324048266809608', () => {
122
+ expect(converter.convert(1, 'libra-pe', 'caloria-termica')).toBeCloseTo(0.324048266809608, 10);
123
+ });
124
+ test('1 libra-pe → caloria-alimentar ≈ 0.00032404826681', () => {
125
+ expect(converter.convert(1, 'libra-pe', 'caloria-alimentar')).toBeCloseTo(0.00032404826681, 10);
126
+ });
127
+ test('1 libra-pe → libra-pe ≈ 1.0', () => {
128
+ expect(converter.convert(1, 'libra-pe', 'libra-pe')).toBeCloseTo(1.0, 10);
129
+ });
130
+ test('1 libra-pe → btu ≈ 0.001285067463457', () => {
131
+ expect(converter.convert(1, 'libra-pe', 'btu')).toBeCloseTo(0.001285067463457, 10);
132
+ });
133
+ test('1 btu → joule ≈ 1055.05585262', () => {
134
+ expect(converter.convert(1, 'btu', 'joule')).toBeCloseTo(1055.05585262, 10);
135
+ });
136
+ test('1 btu → quilojoule ≈ 1.05505585262', () => {
137
+ expect(converter.convert(1, 'btu', 'quilojoule')).toBeCloseTo(1.05505585262, 10);
138
+ });
139
+ test('1 btu → eletron-volt ≈ 6.585140678190667e+21', () => {
140
+ expect(converter.convert(1, 'btu', 'eletron-volt')).toBeCloseTo(6.585140678190667e+21, 10);
141
+ });
142
+ test('1 btu → caloria-termica ≈ 252.1644007217973', () => {
143
+ expect(converter.convert(1, 'btu', 'caloria-termica')).toBeCloseTo(252.1644007217973, 10);
144
+ });
145
+ test('1 btu → caloria-alimentar ≈ 0.252164400721797', () => {
146
+ expect(converter.convert(1, 'btu', 'caloria-alimentar')).toBeCloseTo(0.252164400721797, 10);
147
+ });
148
+ test('1 btu → libra-pe ≈ 778.1692622659652', () => {
149
+ expect(converter.convert(1, 'btu', 'libra-pe')).toBeCloseTo(778.1692622659652, 10);
150
+ });
151
+ test('1 btu → btu ≈ 1.0', () => {
152
+ expect(converter.convert(1, 'btu', 'btu')).toBeCloseTo(1.0, 10);
153
+ });
154
+ });
@@ -0,0 +1,4 @@
1
+ import { ConverterBaseService } from '../../converter-base';
2
+ export declare class LengthConverter extends ConverterBaseService {
3
+ constructor();
4
+ }
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.LengthConverter = void 0;
4
+ const converter_base_1 = require("../../converter-base");
5
+ class LengthConverter extends converter_base_1.ConverterBaseService {
6
+ constructor() {
7
+ super([
8
+ // Base: Metro
9
+ { id: 'angstrom', name: 'Ångström', symbol: 'Å', conversionFactor: 1e-10, isBaseUnit: false },
10
+ { id: 'micron', name: 'Mícron', symbol: 'µ', conversionFactor: 1e-6, isBaseUnit: false },
11
+ { id: 'picometro', name: 'Picômetro', symbol: 'pm', conversionFactor: 1e-12, isBaseUnit: false },
12
+ { id: 'nanometro', name: 'Nanômetro', symbol: 'nm', conversionFactor: 1e-9, isBaseUnit: false },
13
+ { id: 'micrometro', name: 'Micrômetro', symbol: 'µm', conversionFactor: 1e-6, isBaseUnit: false },
14
+ { id: 'milimetro', name: 'Milímetro', symbol: 'mm', conversionFactor: 1e-3, isBaseUnit: false },
15
+ { id: 'centimetro', name: 'Centímetro', symbol: 'cm', conversionFactor: 1e-2, isBaseUnit: false },
16
+ { id: 'decimetro', name: 'Decímetro', symbol: 'dm', conversionFactor: 1e-1, isBaseUnit: false },
17
+ { id: 'metro', name: 'Metro', symbol: 'm', conversionFactor: 1, isBaseUnit: true },
18
+ { id: 'quilometro', name: 'Quilômetro', symbol: 'km', conversionFactor: 1e3, isBaseUnit: false },
19
+ { id: 'polegada', name: 'Polegada', symbol: 'in', conversionFactor: 0.0254, isBaseUnit: false },
20
+ { id: 'pes', name: 'Pé', symbol: 'ft', conversionFactor: 0.3048, isBaseUnit: false },
21
+ { id: 'jarda', name: 'Jarda', symbol: 'yd', conversionFactor: 0.9144, isBaseUnit: false },
22
+ { id: 'milha', name: 'Milha terrestre', symbol: 'mi', conversionFactor: 1609.344, isBaseUnit: false },
23
+ { id: 'milha-nautica', name: 'Milha náutica', symbol: 'nmi', conversionFactor: 1852, isBaseUnit: false },
24
+ { id: 'parsec', name: 'Parsec', symbol: 'pc', conversionFactor: 3.085677581491367e16, isBaseUnit: false },
25
+ { id: 'distancia-lunar', name: 'Distância lunar média', symbol: 'LD', conversionFactor: 384400000, isBaseUnit: false },
26
+ { id: 'unidade-astronomica', name: 'Unidade astronômica', symbol: 'au', conversionFactor: 1.495978707e11, isBaseUnit: false },
27
+ { id: 'ano-luz', name: 'Ano-luz', symbol: 'ly', conversionFactor: 9.4607304725808e15, isBaseUnit: false },
28
+ ]);
29
+ }
30
+ }
31
+ exports.LengthConverter = LengthConverter;
@@ -0,0 +1,186 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const unit_converter_factory_1 = require("../../unit.converter.factory");
4
+ const factory = new unit_converter_factory_1.UnitConverterFactory();
5
+ const converter = factory.createService('length');
6
+ describe('Conversão completa entre unidades de comprimento', () => {
7
+ // Testes de conversão para a mesma unidade
8
+ describe('Conversões para a mesma unidade', () => {
9
+ test('1 metro → metro ≈ 1.0', () => {
10
+ expect(converter.convert(1, 'metro', 'metro')).toBeCloseTo(1.0, 10);
11
+ });
12
+ test('5 quilômetro → quilômetro ≈ 5.0', () => {
13
+ expect(converter.convert(5, 'quilometro', 'quilometro')).toBeCloseTo(5.0, 10);
14
+ });
15
+ test('100 polegada → polegada ≈ 100.0', () => {
16
+ expect(converter.convert(100, 'polegada', 'polegada')).toBeCloseTo(100.0, 10);
17
+ });
18
+ });
19
+ // Testes de conversão métrica básica
20
+ describe('Conversões métricas básicas', () => {
21
+ test('1000 milímetro → metro ≈ 1.0', () => {
22
+ expect(converter.convert(1000, 'milimetro', 'metro')).toBeCloseTo(1.0, 10);
23
+ });
24
+ test('100 centímetro → metro ≈ 1.0', () => {
25
+ expect(converter.convert(100, 'centimetro', 'metro')).toBeCloseTo(1.0, 10);
26
+ });
27
+ test('10 decímetro → metro ≈ 1.0', () => {
28
+ expect(converter.convert(10, 'decimetro', 'metro')).toBeCloseTo(1.0, 10);
29
+ });
30
+ test('1 quilômetro → metro ≈ 1000.0', () => {
31
+ expect(converter.convert(1, 'quilometro', 'metro')).toBeCloseTo(1000.0, 10);
32
+ });
33
+ test('1 metro → milímetro ≈ 1000.0', () => {
34
+ expect(converter.convert(1, 'metro', 'milimetro')).toBeCloseTo(1000.0, 10);
35
+ });
36
+ test('1 metro → centímetro ≈ 100.0', () => {
37
+ expect(converter.convert(1, 'metro', 'centimetro')).toBeCloseTo(100.0, 10);
38
+ });
39
+ test('1 metro → quilômetro ≈ 0.001', () => {
40
+ expect(converter.convert(1, 'metro', 'quilometro')).toBeCloseTo(0.001, 10);
41
+ });
42
+ });
43
+ // Testes de unidades muito pequenas
44
+ describe('Conversões de unidades muito pequenas', () => {
45
+ test('1 metro → angstrom ≈ 1e10', () => {
46
+ expect(converter.convert(1, 'metro', 'angstrom')).toBeCloseTo(1e10, 5);
47
+ });
48
+ test('1 metro → picometro ≈ 1e12', () => {
49
+ expect(converter.convert(1, 'metro', 'picometro')).toBeCloseTo(1e12, 5);
50
+ });
51
+ test('1 metro → nanometro ≈ 1e9', () => {
52
+ expect(converter.convert(1, 'metro', 'nanometro')).toBeCloseTo(1e9, 5);
53
+ });
54
+ test('1 metro → micrometro ≈ 1e6', () => {
55
+ expect(converter.convert(1, 'metro', 'micrometro')).toBeCloseTo(1e6, 5);
56
+ });
57
+ test('1 metro → micron ≈ 1e6', () => {
58
+ expect(converter.convert(1, 'metro', 'micron')).toBeCloseTo(1e6, 5);
59
+ });
60
+ test('1000 nanometro → micrometro ≈ 1.0', () => {
61
+ expect(converter.convert(1000, 'nanometro', 'micrometro')).toBeCloseTo(1.0, 10);
62
+ });
63
+ });
64
+ // Testes de unidades imperiais
65
+ describe('Conversões de unidades imperiais', () => {
66
+ test('1 polegada → centímetro ≈ 2.54', () => {
67
+ expect(converter.convert(1, 'polegada', 'centimetro')).toBeCloseTo(2.54, 10);
68
+ });
69
+ test('1 pé → metro ≈ 0.3048', () => {
70
+ expect(converter.convert(1, 'pes', 'metro')).toBeCloseTo(0.3048, 10);
71
+ });
72
+ test('1 jarda → metro ≈ 0.9144', () => {
73
+ expect(converter.convert(1, 'jarda', 'metro')).toBeCloseTo(0.9144, 10);
74
+ });
75
+ test('1 milha → quilômetro ≈ 1.609344', () => {
76
+ expect(converter.convert(1, 'milha', 'quilometro')).toBeCloseTo(1.609344, 6);
77
+ });
78
+ test('12 polegada → pé ≈ 1.0', () => {
79
+ expect(converter.convert(12, 'polegada', 'pes')).toBeCloseTo(1.0, 10);
80
+ });
81
+ test('3 pé → jarda ≈ 1.0', () => {
82
+ expect(converter.convert(3, 'pes', 'jarda')).toBeCloseTo(1.0, 10);
83
+ });
84
+ test('1760 jarda → milha ≈ 1.0', () => {
85
+ expect(converter.convert(1760, 'jarda', 'milha')).toBeCloseTo(1.0, 8);
86
+ });
87
+ });
88
+ // Testes de unidades náuticas e astronômicas
89
+ describe('Conversões de unidades especiais', () => {
90
+ test('1 milha-nautica → metro ≈ 1852.0', () => {
91
+ expect(converter.convert(1, 'milha-nautica', 'metro')).toBeCloseTo(1852.0, 10);
92
+ });
93
+ test('1 unidade-astronomica → quilômetro ≈ 149597870.7', () => {
94
+ expect(converter.convert(1, 'unidade-astronomica', 'quilometro')).toBeCloseTo(149597870.7, 1);
95
+ });
96
+ test('1 ano-luz → unidade-astronomica ≈ 63241.08', () => {
97
+ expect(converter.convert(1, 'ano-luz', 'unidade-astronomica')).toBeCloseTo(63241.08, 0);
98
+ });
99
+ test('1 parsec → ano-luz ≈ 3.2616', () => {
100
+ expect(converter.convert(1, 'parsec', 'ano-luz')).toBeCloseTo(3.2616, 3);
101
+ });
102
+ test('1 distancia-lunar → quilômetro ≈ 384400.0', () => {
103
+ expect(converter.convert(1, 'distancia-lunar', 'quilometro')).toBeCloseTo(384400.0, 1);
104
+ });
105
+ });
106
+ // Testes com valores decimais
107
+ describe('Conversões com valores decimais', () => {
108
+ test('0.5 metro → centímetro ≈ 50.0', () => {
109
+ expect(converter.convert(0.5, 'metro', 'centimetro')).toBeCloseTo(50.0, 10);
110
+ });
111
+ test('2.5 quilômetro → metro ≈ 2500.0', () => {
112
+ expect(converter.convert(2.5, 'quilometro', 'metro')).toBeCloseTo(2500.0, 10);
113
+ });
114
+ test('0.1 polegada → milímetro ≈ 2.54', () => {
115
+ expect(converter.convert(0.1, 'polegada', 'milimetro')).toBeCloseTo(2.54, 10);
116
+ });
117
+ });
118
+ // Testes com valores grandes
119
+ describe('Conversões com valores grandes', () => {
120
+ test('1000000 metro → quilômetro ≈ 1000.0', () => {
121
+ expect(converter.convert(1000000, 'metro', 'quilometro')).toBeCloseTo(1000.0, 10);
122
+ });
123
+ test('100 quilômetro → milha ≈ 62.137', () => {
124
+ expect(converter.convert(100, 'quilometro', 'milha')).toBeCloseTo(62.137, 2);
125
+ });
126
+ });
127
+ // Testes de casos extremos
128
+ describe('Casos extremos', () => {
129
+ test('0 metro → qualquer unidade ≈ 0.0', () => {
130
+ expect(converter.convert(0, 'metro', 'quilometro')).toBeCloseTo(0.0, 10);
131
+ expect(converter.convert(0, 'metro', 'centimetro')).toBeCloseTo(0.0, 10);
132
+ expect(converter.convert(0, 'metro', 'polegada')).toBeCloseTo(0.0, 10);
133
+ });
134
+ test('Conversões muito pequenas', () => {
135
+ expect(converter.convert(1, 'angstrom', 'metro')).toBeCloseTo(1e-10, 15);
136
+ expect(converter.convert(1, 'picometro', 'metro')).toBeCloseTo(1e-12, 15);
137
+ });
138
+ test('Conversões astronômicas grandes', () => {
139
+ expect(converter.convert(1, 'parsec', 'metro')).toBeCloseTo(3.085677581491367e16, 10);
140
+ expect(converter.convert(1, 'ano-luz', 'metro')).toBeCloseTo(9.4607304725808e15, 10);
141
+ });
142
+ });
143
+ // Testes de conversões bidirecionais
144
+ describe('Conversões bidirecionais', () => {
145
+ test('Conversão bidirecional: metro ↔ polegada', () => {
146
+ const metros = 1;
147
+ const polegadas = converter.convert(metros, 'metro', 'polegada');
148
+ const metrosNovamente = converter.convert(polegadas, 'polegada', 'metro');
149
+ expect(metrosNovamente).toBeCloseTo(metros, 10);
150
+ });
151
+ test('Conversão bidirecional: quilômetro ↔ milha', () => {
152
+ const quilometros = 10;
153
+ const milhas = converter.convert(quilometros, 'quilometro', 'milha');
154
+ const quilometrosNovamente = converter.convert(milhas, 'milha', 'quilometro');
155
+ expect(quilometrosNovamente).toBeCloseTo(quilometros, 8);
156
+ });
157
+ test('Conversão bidirecional: nanometro ↔ micrometro', () => {
158
+ const nanometros = 5000;
159
+ const micrometros = converter.convert(nanometros, 'nanometro', 'micrometro');
160
+ const nanometrosNovamente = converter.convert(micrometros, 'micrometro', 'nanometro');
161
+ expect(nanometrosNovamente).toBeCloseTo(nanometros, 10);
162
+ });
163
+ });
164
+ // Testes de precisão para conversões complexas
165
+ describe('Testes de precisão', () => {
166
+ test('Conversão de alta precisão: angstrom → parsec', () => {
167
+ const angstroms = 1e20;
168
+ const parsecs = converter.convert(angstroms, 'angstrom', 'parsec');
169
+ expect(parsecs).toBeCloseTo(3.2408e-7, 10);
170
+ });
171
+ test('Múltiplas conversões em cadeia mantêm precisão', () => {
172
+ const valorInicial = 100;
173
+ let resultado = valorInicial;
174
+ // metro → km → milha → jarda → pé → polegada → cm → mm → metro
175
+ resultado = converter.convert(resultado, 'metro', 'quilometro');
176
+ resultado = converter.convert(resultado, 'quilometro', 'milha');
177
+ resultado = converter.convert(resultado, 'milha', 'jarda');
178
+ resultado = converter.convert(resultado, 'jarda', 'pes');
179
+ resultado = converter.convert(resultado, 'pes', 'polegada');
180
+ resultado = converter.convert(resultado, 'polegada', 'centimetro');
181
+ resultado = converter.convert(resultado, 'centimetro', 'milimetro');
182
+ resultado = converter.convert(resultado, 'milimetro', 'metro');
183
+ expect(resultado).toBeCloseTo(valorInicial, 6);
184
+ });
185
+ });
186
+ });
@@ -0,0 +1,4 @@
1
+ import { ConverterBaseService } from '../../converter-base';
2
+ export declare class PowerConverter extends ConverterBaseService {
3
+ constructor();
4
+ }
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.PowerConverter = void 0;
4
+ const converter_base_1 = require("../../converter-base");
5
+ class PowerConverter extends converter_base_1.ConverterBaseService {
6
+ constructor() {
7
+ super([
8
+ // Base: Watt
9
+ { id: 'watt', name: 'Watt', symbol: 'W', conversionFactor: 1, isBaseUnit: true },
10
+ { id: 'quilowatt', name: 'Quilowatt', symbol: 'kW', conversionFactor: 1000, isBaseUnit: false },
11
+ { id: 'cavalo-vapor-eua', name: 'Cavalo-vapor (EUA)', symbol: 'hp (EUA)', conversionFactor: 745.69987158227022, isBaseUnit: false },
12
+ { id: 'libra-pe-por-minuto', name: 'Libra-pé por minuto', symbol: 'lbf·ft/min', conversionFactor: 0.0225969658, isBaseUnit: false },
13
+ { id: 'btu-por-minuto', name: 'BTU por minuto', symbol: 'BTU/min', conversionFactor: 17.5842666667, isBaseUnit: false },
14
+ ]);
15
+ }
16
+ }
17
+ exports.PowerConverter = PowerConverter;