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,295 @@
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('volume');
6
+ describe('Conversão completa entre unidades de volume', () => {
7
+ // Testes de conversão para a mesma unidade
8
+ describe('Conversões para a mesma unidade', () => {
9
+ test('1000 mililitro → mililitro ≈ 1000.0', () => {
10
+ expect(converter.convert(1000, 'mililitro', 'mililitro')).toBeCloseTo(1000.0, 10);
11
+ });
12
+ test('5 litro → litro ≈ 5.0', () => {
13
+ expect(converter.convert(5, 'litro', 'litro')).toBeCloseTo(5.0, 10);
14
+ });
15
+ test('2.5 metro-cubico → metro-cubico ≈ 2.5', () => {
16
+ expect(converter.convert(2.5, 'metro-cubico', 'metro-cubico')).toBeCloseTo(2.5, 10);
17
+ });
18
+ });
19
+ // Testes de conversão métrica básica
20
+ describe('Conversões métricas básicas', () => {
21
+ test('1000 mililitro → litro ≈ 1.0', () => {
22
+ expect(converter.convert(1000, 'mililitro', 'litro')).toBeCloseTo(1.0, 10);
23
+ });
24
+ test('1 litro → mililitro ≈ 1000.0', () => {
25
+ expect(converter.convert(1, 'litro', 'mililitro')).toBeCloseTo(1000.0, 10);
26
+ });
27
+ test('10 centilitro → mililitro ≈ 100.0', () => {
28
+ expect(converter.convert(10, 'centilitro', 'mililitro')).toBeCloseTo(100.0, 10);
29
+ });
30
+ test('100 mililitro → decilitro ≈ 1.0', () => {
31
+ expect(converter.convert(100, 'mililitro', 'decilitro')).toBeCloseTo(1.0, 10);
32
+ });
33
+ test('1000 litro → hectolitro ≈ 10.0', () => {
34
+ expect(converter.convert(1000, 'litro', 'hectolitro')).toBeCloseTo(10.0, 10);
35
+ });
36
+ test('1 hectolitro → litro ≈ 100.0', () => {
37
+ expect(converter.convert(1, 'hectolitro', 'litro')).toBeCloseTo(100.0, 10);
38
+ });
39
+ test('100 centilitro → litro ≈ 1.0', () => {
40
+ expect(converter.convert(100, 'centilitro', 'litro')).toBeCloseTo(1.0, 10);
41
+ });
42
+ test('10 decilitro → litro ≈ 1.0', () => {
43
+ expect(converter.convert(10, 'decilitro', 'litro')).toBeCloseTo(1.0, 10);
44
+ });
45
+ });
46
+ // Testes de conversão cúbicas métricas
47
+ describe('Conversões de unidades cúbicas métricas', () => {
48
+ test('1 mililitro → milimetro-cubico ≈ 1000.0', () => {
49
+ expect(converter.convert(1, 'mililitro', 'milimetro-cubico')).toBeCloseTo(1000.0, 10);
50
+ });
51
+ test('1 mililitro → centimetro-cubico ≈ 1.0', () => {
52
+ expect(converter.convert(1, 'mililitro', 'centimetro-cubico')).toBeCloseTo(1.0, 10);
53
+ });
54
+ test('1 litro → decimetro-cubico ≈ 1.0', () => {
55
+ expect(converter.convert(1, 'litro', 'decimetro-cubico')).toBeCloseTo(1.0, 10);
56
+ });
57
+ test('1 metro-cubico → litro ≈ 1000.0', () => {
58
+ expect(converter.convert(1, 'metro-cubico', 'litro')).toBeCloseTo(1000.0, 10);
59
+ });
60
+ test('1000 centimetro-cubico → litro ≈ 1.0', () => {
61
+ expect(converter.convert(1000, 'centimetro-cubico', 'litro')).toBeCloseTo(1.0, 10);
62
+ });
63
+ test('1 decimetro-cubico → mililitro ≈ 1000.0', () => {
64
+ expect(converter.convert(1, 'decimetro-cubico', 'mililitro')).toBeCloseTo(1000.0, 10);
65
+ });
66
+ });
67
+ // Testes de conversão de medidas culinárias americanas
68
+ describe('Conversões de medidas culinárias americanas', () => {
69
+ test('3 colher-cha-eua → colher-sopa-eua ≈ 1.0', () => {
70
+ expect(converter.convert(3, 'colher-cha-eua', 'colher-sopa-eua')).toBeCloseTo(1.0, 8);
71
+ });
72
+ test('2 colher-sopa-eua → onca-fluida-eua ≈ 1.0', () => {
73
+ expect(converter.convert(2, 'colher-sopa-eua', 'onca-fluida-eua')).toBeCloseTo(1.0, 8);
74
+ });
75
+ test('8 onca-fluida-eua → xicara-eua ≈ 1.0', () => {
76
+ expect(converter.convert(8, 'onca-fluida-eua', 'xicara-eua')).toBeCloseTo(1.0, 8);
77
+ });
78
+ test('2 xicara-eua → pinta-eua ≈ 1.0', () => {
79
+ expect(converter.convert(2, 'xicara-eua', 'pinta-eua')).toBeCloseTo(1.0, 8);
80
+ });
81
+ test('2 pinta-eua → quarto-eua ≈ 1.0', () => {
82
+ expect(converter.convert(2, 'pinta-eua', 'quarto-eua')).toBeCloseTo(1.0, 8);
83
+ });
84
+ test('4 quarto-eua → galao-liquido-eua ≈ 1.0', () => {
85
+ expect(converter.convert(4, 'quarto-eua', 'galao-liquido-eua')).toBeCloseTo(1.0, 8);
86
+ });
87
+ test('1 colher-cha-eua → mililitro ≈ 4.929', () => {
88
+ expect(converter.convert(1, 'colher-cha-eua', 'mililitro')).toBeCloseTo(4.92892159375, 8);
89
+ });
90
+ test('1 colher-sopa-eua → mililitro ≈ 14.787', () => {
91
+ expect(converter.convert(1, 'colher-sopa-eua', 'mililitro')).toBeCloseTo(14.78676478125, 8);
92
+ });
93
+ test('1 xicara-eua → mililitro ≈ 236.588', () => {
94
+ expect(converter.convert(1, 'xicara-eua', 'mililitro')).toBeCloseTo(236.5882365, 6);
95
+ });
96
+ test('1 galao-liquido-eua → litro ≈ 3.785', () => {
97
+ expect(converter.convert(1, 'galao-liquido-eua', 'litro')).toBeCloseTo(3.785411784, 8);
98
+ });
99
+ });
100
+ // Testes de conversão de medidas culinárias imperiais
101
+ describe('Conversões de medidas culinárias imperiais', () => {
102
+ test('3 colher-cha-imperial → colher-sopa-imperial ≈ 1.0', () => {
103
+ expect(converter.convert(3, 'colher-cha-imperial', 'colher-sopa-imperial')).toBeCloseTo(0.9999983106395919, 8);
104
+ });
105
+ test('20 onca-fluida-imperial → pinta-imperial ≈ 1.0', () => {
106
+ expect(converter.convert(20, 'onca-fluida-imperial', 'pinta-imperial')).toBeCloseTo(1.0, 8);
107
+ });
108
+ test('2 pinta-imperial → quarto-imperial ≈ 1.0', () => {
109
+ expect(converter.convert(2, 'pinta-imperial', 'quarto-imperial')).toBeCloseTo(1.0, 8);
110
+ });
111
+ test('4 quarto-imperial → galao-imperial ≈ 1.0', () => {
112
+ expect(converter.convert(4, 'quarto-imperial', 'galao-imperial')).toBeCloseTo(1.0, 8);
113
+ });
114
+ test('1 colher-cha-imperial → mililitro ≈ 5.919', () => {
115
+ expect(converter.convert(1, 'colher-cha-imperial', 'mililitro')).toBeCloseTo(5.91939, 5);
116
+ });
117
+ test('1 onca-fluida-imperial → mililitro ≈ 28.413', () => {
118
+ expect(converter.convert(1, 'onca-fluida-imperial', 'mililitro')).toBeCloseTo(28.4130625, 7);
119
+ });
120
+ test('1 galao-imperial → litro ≈ 4.546', () => {
121
+ expect(converter.convert(1, 'galao-imperial', 'litro')).toBeCloseTo(4.54609, 5);
122
+ });
123
+ });
124
+ // Testes de conversão de unidades cúbicas imperiais
125
+ describe('Conversões de unidades cúbicas imperiais', () => {
126
+ test('1 polegada-cubica → mililitro ≈ 16.387', () => {
127
+ expect(converter.convert(1, 'polegada-cubica', 'mililitro')).toBeCloseTo(16.387064, 6);
128
+ });
129
+ test('1728 polegada-cubica → pe-cubico ≈ 1.0', () => {
130
+ expect(converter.convert(1728, 'polegada-cubica', 'pe-cubico')).toBeCloseTo(1.0, 6);
131
+ });
132
+ test('27 pe-cubico → jarda-cubica ≈ 1.0', () => {
133
+ expect(converter.convert(27, 'pe-cubico', 'jarda-cubica')).toBeCloseTo(1.0, 6);
134
+ });
135
+ test('1 pe-cubico → litro ≈ 28.317', () => {
136
+ expect(converter.convert(1, 'pe-cubico', 'litro')).toBeCloseTo(28.316846592, 6);
137
+ });
138
+ test('1 jarda-cubica → metro-cubico ≈ 0.765', () => {
139
+ expect(converter.convert(1, 'jarda-cubica', 'metro-cubico')).toBeCloseTo(0.764554857984, 6);
140
+ });
141
+ });
142
+ // Testes de comparação entre sistemas americano e imperial
143
+ describe('Comparações entre sistemas americano e imperial', () => {
144
+ test('1 galao-liquido-eua vs 1 galao-imperial', () => {
145
+ const galEUA = converter.convert(1, 'galao-liquido-eua', 'litro');
146
+ const galImperial = converter.convert(1, 'galao-imperial', 'litro');
147
+ expect(galImperial).toBeGreaterThan(galEUA);
148
+ expect(galImperial / galEUA).toBeCloseTo(1.201, 2); // Imperial é ~20% maior
149
+ });
150
+ test('1 pinta-eua vs 1 pinta-imperial', () => {
151
+ const pintaEUA = converter.convert(1, 'pinta-eua', 'mililitro');
152
+ const pintaImperial = converter.convert(1, 'pinta-imperial', 'mililitro');
153
+ expect(pintaImperial).toBeGreaterThan(pintaEUA);
154
+ expect(pintaImperial / pintaEUA).toBeCloseTo(1.201, 2);
155
+ });
156
+ test('1 onca-fluida-eua vs 1 onca-fluida-imperial', () => {
157
+ const oncaEUA = converter.convert(1, 'onca-fluida-eua', 'mililitro');
158
+ const oncaImperial = converter.convert(1, 'onca-fluida-imperial', 'mililitro');
159
+ expect(oncaEUA).toBeGreaterThan(oncaImperial);
160
+ expect(oncaEUA / oncaImperial).toBeCloseTo(1.04, 2);
161
+ });
162
+ });
163
+ // Testes de conversões para culinária
164
+ describe('Conversões práticas para culinária', () => {
165
+ test('1 xicara-eua → centilitro ≈ 23.659', () => {
166
+ expect(converter.convert(1, 'xicara-eua', 'centilitro')).toBeCloseTo(23.659, 2);
167
+ });
168
+ test('250 mililitro → xicara-eua ≈ 1.057', () => {
169
+ expect(converter.convert(250, 'mililitro', 'xicara-eua')).toBeCloseTo(1.057, 2);
170
+ });
171
+ test('1 colher-sopa-eua → colher-cha-eua ≈ 3.0', () => {
172
+ expect(converter.convert(1, 'colher-sopa-eua', 'colher-cha-eua')).toBeCloseTo(3.0, 8);
173
+ });
174
+ test('15 mililitro → colher-sopa-eua ≈ 1.014', () => {
175
+ expect(converter.convert(15, 'mililitro', 'colher-sopa-eua')).toBeCloseTo(1.014, 2);
176
+ });
177
+ test('5 mililitro → colher-cha-eua ≈ 1.014', () => {
178
+ expect(converter.convert(5, 'mililitro', 'colher-cha-eua')).toBeCloseTo(1.014, 2);
179
+ });
180
+ });
181
+ // Testes de volumes grandes
182
+ describe('Conversões de volumes grandes', () => {
183
+ test('1 metro-cubico → galao-liquido-eua ≈ 264.172', () => {
184
+ expect(converter.convert(1, 'metro-cubico', 'galao-liquido-eua')).toBeCloseTo(264.172, 2);
185
+ });
186
+ test('1 metro-cubico → galao-imperial ≈ 219.969', () => {
187
+ expect(converter.convert(1, 'metro-cubico', 'galao-imperial')).toBeCloseTo(219.969, 2);
188
+ });
189
+ test('1 acre-pe-cubico → metro-cubico ≈ 1233481.837', () => {
190
+ expect(converter.convert(1, 'acre-pe-cubico', 'metro-cubico')).toBeCloseTo(1233.4818365478402, 0);
191
+ });
192
+ test('1 hectolitro → metro-cubico ≈ 0.1', () => {
193
+ expect(converter.convert(1, 'hectolitro', 'metro-cubico')).toBeCloseTo(0.1, 10);
194
+ });
195
+ });
196
+ // Testes de conversões bidirecionais
197
+ describe('Conversões bidirecionais', () => {
198
+ test('Conversão bidirecional: litro ↔ galao-liquido-eua', () => {
199
+ const litros = 10;
200
+ const galoesEUA = converter.convert(litros, 'litro', 'galao-liquido-eua');
201
+ const litrosNovamente = converter.convert(galoesEUA, 'galao-liquido-eua', 'litro');
202
+ expect(litrosNovamente).toBeCloseTo(litros, 8);
203
+ });
204
+ test('Conversão bidirecional: mililitro ↔ onca-fluida-eua', () => {
205
+ const mililitros = 100;
206
+ const oncasEUA = converter.convert(mililitros, 'mililitro', 'onca-fluida-eua');
207
+ const mililitrosNovamente = converter.convert(oncasEUA, 'onca-fluida-eua', 'mililitro');
208
+ expect(mililitrosNovamente).toBeCloseTo(mililitros, 8);
209
+ });
210
+ test('Conversão bidirecional: metro-cubico ↔ pe-cubico', () => {
211
+ const metrosCubicos = 2;
212
+ const pesCubicos = converter.convert(metrosCubicos, 'metro-cubico', 'pe-cubico');
213
+ const metrosCubicosNovamente = converter.convert(pesCubicos, 'pe-cubico', 'metro-cubico');
214
+ expect(metrosCubicosNovamente).toBeCloseTo(metrosCubicos, 6);
215
+ });
216
+ });
217
+ // Testes com valores decimais
218
+ describe('Conversões com valores decimais', () => {
219
+ test('0.5 litro → mililitro ≈ 500.0', () => {
220
+ expect(converter.convert(0.5, 'litro', 'mililitro')).toBeCloseTo(500.0, 10);
221
+ });
222
+ test('2.5 xicara-eua → mililitro ≈ 591.471', () => {
223
+ expect(converter.convert(2.5, 'xicara-eua', 'mililitro')).toBeCloseTo(591.471, 2);
224
+ });
225
+ test('0.25 galao-liquido-eua → litro ≈ 0.946', () => {
226
+ expect(converter.convert(0.25, 'galao-liquido-eua', 'litro')).toBeCloseTo(0.946, 2);
227
+ });
228
+ test('1.5 colher-sopa-eua → mililitro ≈ 22.180', () => {
229
+ expect(converter.convert(1.5, 'colher-sopa-eua', 'mililitro')).toBeCloseTo(22.180, 2);
230
+ });
231
+ });
232
+ // Testes de casos extremos
233
+ describe('Casos extremos', () => {
234
+ test('0 volume → qualquer unidade ≈ 0.0', () => {
235
+ expect(converter.convert(0, 'litro', 'mililitro')).toBeCloseTo(0.0, 10);
236
+ expect(converter.convert(0, 'galao-liquido-eua', 'litro')).toBeCloseTo(0.0, 10);
237
+ expect(converter.convert(0, 'metro-cubico', 'pe-cubico')).toBeCloseTo(0.0, 10);
238
+ });
239
+ test('Conversões muito pequenas', () => {
240
+ expect(converter.convert(0.001, 'mililitro', 'milimetro-cubico')).toBeCloseTo(1, 10);
241
+ expect(converter.convert(1, 'mililitro', 'centimetro-cubico')).toBeCloseTo(1, 10);
242
+ });
243
+ test('Conversões muito grandes', () => {
244
+ expect(converter.convert(1000000, 'litro', 'metro-cubico')).toBeCloseTo(1000.0, 5);
245
+ expect(converter.convert(1000000, 'mililitro', 'hectolitro')).toBeCloseTo(10.0, 5);
246
+ });
247
+ });
248
+ // Testes de conversões em cadeia
249
+ describe('Conversões em cadeia', () => {
250
+ test('Múltiplas conversões mantêm precisão', () => {
251
+ const valorInicial = 100;
252
+ let resultado = valorInicial;
253
+ // mililitro → litro → galao-eua → xicara-eua → onca-eua → colher-sopa-eua → mililitro
254
+ resultado = converter.convert(resultado, 'mililitro', 'litro');
255
+ resultado = converter.convert(resultado, 'litro', 'galao-liquido-eua');
256
+ resultado = converter.convert(resultado, 'galao-liquido-eua', 'xicara-eua');
257
+ resultado = converter.convert(resultado, 'xicara-eua', 'onca-fluida-eua');
258
+ resultado = converter.convert(resultado, 'onca-fluida-eua', 'colher-sopa-eua');
259
+ resultado = converter.convert(resultado, 'colher-sopa-eua', 'mililitro');
260
+ expect(resultado).toBeCloseTo(valorInicial, 6);
261
+ });
262
+ test('Conversão métrica em cadeia', () => {
263
+ const valorInicial = 1;
264
+ let resultado = valorInicial;
265
+ // metro-cubico → litro → mililitro → centimetro-cubico → decimetro-cubico → metro-cubico
266
+ resultado = converter.convert(resultado, 'metro-cubico', 'litro');
267
+ resultado = converter.convert(resultado, 'litro', 'mililitro');
268
+ resultado = converter.convert(resultado, 'mililitro', 'centimetro-cubico');
269
+ resultado = converter.convert(resultado, 'centimetro-cubico', 'decimetro-cubico');
270
+ resultado = converter.convert(resultado, 'decimetro-cubico', 'metro-cubico');
271
+ expect(resultado).toBeCloseTo(valorInicial, 8);
272
+ });
273
+ });
274
+ // Testes de precisão específica
275
+ describe('Testes de precisão específica', () => {
276
+ test('Galão seco vs líquido (EUA)', () => {
277
+ const galaoLiquido = converter.convert(1, 'galao-liquido-eua', 'litro');
278
+ const galaoSeco = converter.convert(1, 'galao-seco-eua', 'litro');
279
+ expect(galaoSeco).toBeGreaterThan(galaoLiquido);
280
+ expect(galaoSeco / galaoLiquido).toBeCloseTo(1.164, 2);
281
+ });
282
+ test('Relação exata entre unidades cúbicas', () => {
283
+ // 1 m³ = 1000 L = 1000000 mL = 1000000 cm³
284
+ expect(converter.convert(1, 'metro-cubico', 'litro')).toBeCloseTo(1000.0, 10);
285
+ expect(converter.convert(1, 'metro-cubico', 'mililitro')).toBeCloseTo(1000000.0, 5);
286
+ expect(converter.convert(1, 'metro-cubico', 'centimetro-cubico')).toBeCloseTo(1000000.0, 5);
287
+ });
288
+ test('Relação entre colheres (EUA)', () => {
289
+ // 1 Tbsp = 3 tsp exatamente
290
+ const colherSopa = converter.convert(1, 'colher-sopa-eua', 'mililitro');
291
+ const colherCha = converter.convert(3, 'colher-cha-eua', 'mililitro');
292
+ expect(colherSopa).toBeCloseTo(colherCha, 10);
293
+ });
294
+ });
295
+ });
@@ -0,0 +1,4 @@
1
+ import { ConverterBaseService } from '../../converter-base';
2
+ export declare class WeightMassConverter extends ConverterBaseService {
3
+ constructor();
4
+ }
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.WeightMassConverter = void 0;
4
+ const converter_base_1 = require("../../converter-base");
5
+ class WeightMassConverter extends converter_base_1.ConverterBaseService {
6
+ constructor() {
7
+ super([
8
+ // Base: grama
9
+ { id: 'micrograma', name: 'Micrograma', symbol: 'µg', conversionFactor: 0.000001, isBaseUnit: false },
10
+ { id: 'miligrama', name: 'Miligrama', symbol: 'mg', conversionFactor: 0.001, isBaseUnit: false },
11
+ { id: 'centigrama', name: 'Centigrama', symbol: 'cg', conversionFactor: 0.01, isBaseUnit: false },
12
+ { id: 'decigrama', name: 'Decigrama', symbol: 'dg', conversionFactor: 0.1, isBaseUnit: false },
13
+ { id: 'grama', name: 'Grama', symbol: 'g', conversionFactor: 1, isBaseUnit: true },
14
+ { id: 'decagrama', name: 'Decagrama', symbol: 'dag', conversionFactor: 10, isBaseUnit: false },
15
+ { id: 'hectograma', name: 'Hectograma', symbol: 'hg', conversionFactor: 100, isBaseUnit: false },
16
+ { id: 'quilograma', name: 'Quilograma', symbol: 'kg', conversionFactor: 1000, isBaseUnit: false },
17
+ { id: 'tonelada-metrica', name: 'Tonelada Métrica', symbol: 't', conversionFactor: 1000000, isBaseUnit: false },
18
+ { id: 'grao', name: 'Grão', symbol: 'gr', conversionFactor: 0.06479891, isBaseUnit: false },
19
+ { id: 'quilate', name: 'Quilate (métrico)', symbol: 'ct', conversionFactor: 0.2, isBaseUnit: false },
20
+ { id: 'onca', name: 'Onça (avoirdupois)', symbol: 'oz', conversionFactor: 28.349523125, isBaseUnit: false },
21
+ { id: 'libra', name: 'Libra (avoirdupois)', symbol: 'lb', conversionFactor: 453.59237, isBaseUnit: false },
22
+ { id: 'pedra', name: 'Pedra', symbol: 'st', conversionFactor: 6350.29318, isBaseUnit: false },
23
+ { id: 'tonelada-curta', name: 'Tonelada Curta (EUA)', symbol: 'sh.t', conversionFactor: 907184.74, isBaseUnit: false },
24
+ { id: 'tonelada-longa', name: 'Tonelada Longa (Reino Unido)', symbol: 'l.t', conversionFactor: 1016046.9088, isBaseUnit: false },
25
+ { id: 'quintal', name: 'Quintal (métrico)', symbol: 'q', conversionFactor: 100000, isBaseUnit: false },
26
+ ]);
27
+ }
28
+ }
29
+ exports.WeightMassConverter = WeightMassConverter;
@@ -0,0 +1,218 @@
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('weight-mass');
6
+ describe('Conversão completa entre unidades de massa', () => {
7
+ // Testes de conversão para a mesma unidade
8
+ describe('Conversões para a mesma unidade', () => {
9
+ test('1 grama → grama ≈ 1.0', () => {
10
+ expect(converter.convert(1, 'grama', 'grama')).toBeCloseTo(1.0, 10);
11
+ });
12
+ test('1 quilograma → quilograma ≈ 1.0', () => {
13
+ expect(converter.convert(1, 'quilograma', 'quilograma')).toBeCloseTo(1.0, 10);
14
+ });
15
+ test('1 miligrama → miligrama ≈ 1.0', () => {
16
+ expect(converter.convert(1, 'miligrama', 'miligrama')).toBeCloseTo(1.0, 10);
17
+ });
18
+ test('1 tonelada-metrica → tonelada-metrica ≈ 1.0', () => {
19
+ expect(converter.convert(1, 'tonelada-metrica', 'tonelada-metrica')).toBeCloseTo(1.0, 10);
20
+ });
21
+ });
22
+ // Conversões básicas do sistema métrico
23
+ describe('Conversões do sistema métrico - unidade base: grama', () => {
24
+ test('1 micrograma → grama = 0.000001', () => {
25
+ expect(converter.convert(1, 'micrograma', 'grama')).toBeCloseTo(0.000001, 10);
26
+ });
27
+ test('1 miligrama → grama = 0.001', () => {
28
+ expect(converter.convert(1, 'miligrama', 'grama')).toBeCloseTo(0.001, 10);
29
+ });
30
+ test('1 centigrama → grama = 0.01', () => {
31
+ expect(converter.convert(1, 'centigrama', 'grama')).toBeCloseTo(0.01, 10);
32
+ });
33
+ test('1 decigrama → grama = 0.1', () => {
34
+ expect(converter.convert(1, 'decigrama', 'grama')).toBeCloseTo(0.1, 10);
35
+ });
36
+ test('1 decagrama → grama = 10', () => {
37
+ expect(converter.convert(1, 'decagrama', 'grama')).toBeCloseTo(10, 10);
38
+ });
39
+ test('1 hectograma → grama = 100', () => {
40
+ expect(converter.convert(1, 'hectograma', 'grama')).toBeCloseTo(100, 10);
41
+ });
42
+ test('1 quilograma → grama = 1000', () => {
43
+ expect(converter.convert(1, 'quilograma', 'grama')).toBeCloseTo(1000, 10);
44
+ });
45
+ test('1 tonelada-metrica → grama = 1000000', () => {
46
+ expect(converter.convert(1, 'tonelada-metrica', 'grama')).toBeCloseTo(1000000, 10);
47
+ });
48
+ test('1 quintal → grama = 100000', () => {
49
+ expect(converter.convert(1, 'quintal', 'grama')).toBeCloseTo(100000, 10);
50
+ });
51
+ });
52
+ // Conversões inversas do sistema métrico
53
+ describe('Conversões inversas do sistema métrico', () => {
54
+ test('1 grama → micrograma = 1000000', () => {
55
+ expect(converter.convert(1, 'grama', 'micrograma')).toBeCloseTo(1000000, 10);
56
+ });
57
+ test('1 grama → miligrama = 1000', () => {
58
+ expect(converter.convert(1, 'grama', 'miligrama')).toBeCloseTo(1000, 10);
59
+ });
60
+ test('1 grama → quilograma = 0.001', () => {
61
+ expect(converter.convert(1, 'grama', 'quilograma')).toBeCloseTo(0.001, 10);
62
+ });
63
+ test('1 quilograma → tonelada-metrica = 0.001', () => {
64
+ expect(converter.convert(1, 'quilograma', 'tonelada-metrica')).toBeCloseTo(0.001, 10);
65
+ });
66
+ });
67
+ // Conversões do sistema imperial/americano
68
+ describe('Conversões do sistema imperial/americano', () => {
69
+ test('1 grao → grama ≈ 0.06479891', () => {
70
+ expect(converter.convert(1, 'grao', 'grama')).toBeCloseTo(0.06479891, 8);
71
+ });
72
+ test('1 quilate → grama = 0.2', () => {
73
+ expect(converter.convert(1, 'quilate', 'grama')).toBeCloseTo(0.2, 10);
74
+ });
75
+ test('1 onca → grama ≈ 28.349523125', () => {
76
+ expect(converter.convert(1, 'onca', 'grama')).toBeCloseTo(28.349523125, 8);
77
+ });
78
+ test('1 libra → grama ≈ 453.59237', () => {
79
+ expect(converter.convert(1, 'libra', 'grama')).toBeCloseTo(453.59237, 8);
80
+ });
81
+ test('1 pedra → grama ≈ 6350.29318', () => {
82
+ expect(converter.convert(1, 'pedra', 'grama')).toBeCloseTo(6350.29318, 8);
83
+ });
84
+ test('1 tonelada-curta → grama ≈ 907184.74', () => {
85
+ expect(converter.convert(1, 'tonelada-curta', 'grama')).toBeCloseTo(907184.74, 6);
86
+ });
87
+ test('1 tonelada-longa → grama ≈ 1016046.9088', () => {
88
+ expect(converter.convert(1, 'tonelada-longa', 'grama')).toBeCloseTo(1016046.9088, 6);
89
+ });
90
+ });
91
+ // Conversões entre unidades imperiais
92
+ describe('Conversões entre sistemas imperial/americano', () => {
93
+ test('1 libra → onca = 16', () => {
94
+ expect(converter.convert(1, 'libra', 'onca')).toBeCloseTo(16, 8);
95
+ });
96
+ test('1 pedra → libra = 14', () => {
97
+ expect(converter.convert(1, 'pedra', 'libra')).toBeCloseTo(14, 8);
98
+ });
99
+ test('1 tonelada-curta → libra = 2000', () => {
100
+ expect(converter.convert(1, 'tonelada-curta', 'libra')).toBeCloseTo(2000, 6);
101
+ });
102
+ test('1 tonelada-longa → libra ≈ 2240', () => {
103
+ expect(converter.convert(1, 'tonelada-longa', 'libra')).toBeCloseTo(2240, 6);
104
+ });
105
+ });
106
+ // Conversões comuns do dia a dia
107
+ describe('Conversões comuns do cotidiano', () => {
108
+ test('500 gramas → quilograma = 0.5', () => {
109
+ expect(converter.convert(500, 'grama', 'quilograma')).toBeCloseTo(0.5, 10);
110
+ });
111
+ test('2.5 quilogramas → gramas = 2500', () => {
112
+ expect(converter.convert(2.5, 'quilograma', 'grama')).toBeCloseTo(2500, 10);
113
+ });
114
+ test('100 miligramas → gramas = 0.1', () => {
115
+ expect(converter.convert(100, 'miligrama', 'grama')).toBeCloseTo(0.1, 10);
116
+ });
117
+ test('5 quilates → gramas = 1', () => {
118
+ expect(converter.convert(5, 'quilate', 'grama')).toBeCloseTo(1, 10);
119
+ });
120
+ test('1 libra → quilograma ≈ 0.45359237', () => {
121
+ expect(converter.convert(1, 'libra', 'quilograma')).toBeCloseTo(0.45359237, 8);
122
+ });
123
+ test('10 toneladas métricas → quilogramas = 10000', () => {
124
+ expect(converter.convert(10, 'tonelada-metrica', 'quilograma')).toBeCloseTo(10000, 10);
125
+ });
126
+ });
127
+ // Testes com valores decimais
128
+ describe('Conversões com valores decimais', () => {
129
+ test('0.5 quilograma → grama = 500', () => {
130
+ expect(converter.convert(0.5, 'quilograma', 'grama')).toBeCloseTo(500, 10);
131
+ });
132
+ test('1.25 libras → onças = 20', () => {
133
+ expect(converter.convert(1.25, 'libra', 'onca')).toBeCloseTo(20, 8);
134
+ });
135
+ test('0.001 tonelada-metrica → grama = 1000', () => {
136
+ expect(converter.convert(0.001, 'tonelada-metrica', 'grama')).toBeCloseTo(1000, 10);
137
+ });
138
+ test('2.5 hectogramas → quilograma = 0.25', () => {
139
+ expect(converter.convert(2.5, 'hectograma', 'quilograma')).toBeCloseTo(0.25, 10);
140
+ });
141
+ });
142
+ // Testes com valores grandes
143
+ describe('Conversões com valores grandes', () => {
144
+ test('1000000 miligramas → quilograma = 1', () => {
145
+ expect(converter.convert(1000000, 'miligrama', 'quilograma')).toBeCloseTo(1, 10);
146
+ });
147
+ test('1000 toneladas métricas → quilogramas = 1000000', () => {
148
+ expect(converter.convert(1000, 'tonelada-metrica', 'quilograma')).toBeCloseTo(1000000, 10);
149
+ });
150
+ test('50000 grãos → quilograma ≈ 3.239945', () => {
151
+ expect(converter.convert(50000, 'grao', 'quilograma')).toBeCloseTo(3.2399455, 6);
152
+ });
153
+ });
154
+ // Testes com valores pequenos
155
+ describe('Conversões com valores pequenos', () => {
156
+ test('0.001 grama → miligrama = 1', () => {
157
+ expect(converter.convert(0.001, 'grama', 'miligrama')).toBeCloseTo(1, 10);
158
+ });
159
+ test('0.0001 onça → miligrama ≈ 2.8349523', () => {
160
+ expect(converter.convert(0.0001, 'onca', 'miligrama')).toBeCloseTo(2.8349523, 7);
161
+ });
162
+ test('0.5 micrograma → nanograma = 500', () => {
163
+ // Assumindo que nanograma seria 0.000000001 se existisse
164
+ expect(converter.convert(0.5, 'micrograma', 'grama')).toBeCloseTo(0.0000005, 10);
165
+ });
166
+ });
167
+ // Testes de casos extremos
168
+ describe('Casos extremos', () => {
169
+ test('0 grama → quilograma = 0', () => {
170
+ expect(converter.convert(0, 'grama', 'quilograma')).toBe(0);
171
+ });
172
+ test('Número muito grande: 999999 quilogramas → tonelada-metrica ≈ 999.999', () => {
173
+ expect(converter.convert(999999, 'quilograma', 'tonelada-metrica')).toBeCloseTo(999.999, 3);
174
+ });
175
+ test('Número muito pequeno: 0.000001 quilograma → micrograma = 1000', () => {
176
+ expect(converter.convert(0.000001, 'quilograma', 'micrograma')).toBeCloseTo(1000, 10);
177
+ });
178
+ });
179
+ // Testes de precisão
180
+ describe('Testes de precisão', () => {
181
+ test('Conversão ida e volta: grama → quilograma → grama', () => {
182
+ const original = 1500;
183
+ const converted = converter.convert(original, 'grama', 'quilograma');
184
+ const backConverted = converter.convert(converted, 'quilograma', 'grama');
185
+ expect(backConverted).toBeCloseTo(original, 8);
186
+ });
187
+ test('Conversão ida e volta: libra → grama → libra', () => {
188
+ const original = 2.5;
189
+ const converted = converter.convert(original, 'libra', 'grama');
190
+ const backConverted = converter.convert(converted, 'grama', 'libra');
191
+ expect(backConverted).toBeCloseTo(original, 8);
192
+ });
193
+ test('Conversão ida e volta: micrograma → tonelada-metrica → micrograma', () => {
194
+ const original = 5000000000; // 5 bilhões de microgramas
195
+ const converted = converter.convert(original, 'micrograma', 'tonelada-metrica');
196
+ const backConverted = converter.convert(converted, 'tonelada-metrica', 'micrograma');
197
+ expect(backConverted).toBeCloseTo(original, 6);
198
+ });
199
+ });
200
+ // Testes de equivalências conhecidas
201
+ describe('Equivalências conhecidas', () => {
202
+ test('1 quilograma = 2.20462 libras (aproximadamente)', () => {
203
+ expect(converter.convert(1, 'quilograma', 'libra')).toBeCloseTo(2.20462, 5);
204
+ });
205
+ test('1 onça = 28.35 gramas (aproximadamente)', () => {
206
+ expect(converter.convert(1, 'onca', 'grama')).toBeCloseTo(28.35, 2);
207
+ });
208
+ test('1 tonelada métrica = 1.10231 tonelada curta (aproximadamente)', () => {
209
+ expect(converter.convert(1, 'tonelada-metrica', 'tonelada-curta')).toBeCloseTo(1.10231, 5);
210
+ });
211
+ test('1 pedra = 6.35 quilogramas (aproximadamente)', () => {
212
+ expect(converter.convert(1, 'pedra', 'quilograma')).toBeCloseTo(6.35, 2);
213
+ });
214
+ test('5 quilates = 1 grama', () => {
215
+ expect(converter.convert(5, 'quilate', 'grama')).toBeCloseTo(1, 10);
216
+ });
217
+ });
218
+ });
@@ -0,0 +1,9 @@
1
+ import { BaseFactory } from "../../baseFactory";
2
+ import { IServiceCategory } from "../../interfaces/IServiceCategory";
3
+ import { IUnitConverter } from "./interfaces/IUnitConverter";
4
+ import { IUnitConverterFactory } from "./interfaces/IUnitConverterFactory";
5
+ export declare class UnitConverterFactory extends BaseFactory<IUnitConverter> implements IUnitConverterFactory {
6
+ constructor();
7
+ protected throwServiceNotFoundError(serviceId: string): never;
8
+ protected registerService(service: IServiceCategory): void;
9
+ }
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.UnitConverterFactory = void 0;
4
+ const baseFactory_1 = require("../../baseFactory");
5
+ const provider_1 = require("./provider");
6
+ class UnitConverterFactory extends baseFactory_1.BaseFactory {
7
+ constructor() {
8
+ super(provider_1.categories);
9
+ }
10
+ throwServiceNotFoundError(serviceId) {
11
+ throw new Error(`O conversor solicitado não está implementado: ${serviceId}`);
12
+ }
13
+ registerService(service) {
14
+ const module = require("./services/" + service.id + "/" + service.id + ".converter");
15
+ // Atribui o construtor: preferencialmente `default`, ou a primeira propriedade exportada
16
+ const implementation = module.default || Object.values(module)[0];
17
+ this.map.set(service.id, new implementation());
18
+ }
19
+ }
20
+ exports.UnitConverterFactory = UnitConverterFactory;
File without changes