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.
- package/dist/baseFactory.d.ts +12 -0
- package/dist/baseFactory.js +33 -0
- package/dist/constants/regexPatterns.d.ts +2 -0
- package/dist/constants/regexPatterns.js +9 -0
- package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.d.ts +4 -0
- package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.factory.d.ts +4 -0
- package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.factory.js +2 -0
- package/dist/converters/numeric-systems/interfaces/INumericSystem.converter.js +2 -0
- package/dist/converters/numeric-systems/numericSystem.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/numericSystem.converter.factory.d.ts +8 -0
- package/dist/converters/numeric-systems/numericSystem.converter.factory.js +17 -0
- package/dist/converters/numeric-systems/numericSystem.converter.js +17 -0
- package/dist/converters/numeric-systems/provider.d.ts +2 -0
- package/dist/converters/numeric-systems/provider.js +11 -0
- package/dist/converters/numeric-systems/services/binary/binary.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/services/binary/binary.converter.js +16 -0
- package/dist/converters/numeric-systems/services/binary/binary.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/binary/binary.converter.test.js +252 -0
- package/dist/converters/numeric-systems/services/decimal/decimal.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/services/decimal/decimal.converter.js +16 -0
- package/dist/converters/numeric-systems/services/decimal/decimal.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/decimal/decimal.converter.test.js +199 -0
- package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.js +18 -0
- package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/hexadecimal/hexadecimal.converter.test.js +130 -0
- package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.d.ts +5 -0
- package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.js +15 -0
- package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/octadecimal/octadecimal.converter.test.js +151 -0
- package/dist/converters/numeric-systems/services/roman/roman.converter.d.ts +7 -0
- package/dist/converters/numeric-systems/services/roman/roman.converter.js +77 -0
- package/dist/converters/numeric-systems/services/roman/roman.converter.test.d.ts +1 -0
- package/dist/converters/numeric-systems/services/roman/roman.converter.test.js +105 -0
- package/dist/converters/serialization/interfaces/ISerialization.converter.d.ts +5 -0
- package/dist/converters/serialization/interfaces/ISerialization.converter.factory.d.ts +4 -0
- package/dist/converters/serialization/interfaces/ISerialization.converter.factory.js +2 -0
- package/dist/converters/serialization/interfaces/ISerialization.converter.js +2 -0
- package/dist/converters/serialization/interfaces/ISerializationOptions.d.ts +4 -0
- package/dist/converters/serialization/interfaces/ISerializationOptions.js +2 -0
- package/dist/converters/serialization/provider.d.ts +2 -0
- package/dist/converters/serialization/provider.js +7 -0
- package/dist/converters/serialization/serialization.converter.d.ts +6 -0
- package/dist/converters/serialization/serialization.converter.factory.d.ts +9 -0
- package/dist/converters/serialization/serialization.converter.factory.js +20 -0
- package/dist/converters/serialization/serialization.converter.js +17 -0
- package/dist/converters/serialization/services/csv/csv.converter.d.ts +6 -0
- package/dist/converters/serialization/services/csv/csv.converter.js +68 -0
- package/dist/converters/serialization/services/csv/csv.converter.test.d.ts +1 -0
- package/dist/converters/serialization/services/csv/csv.converter.test.js +295 -0
- package/dist/converters/serialization/services/json/json.converter.d.ts +5 -0
- package/dist/converters/serialization/services/json/json.converter.js +12 -0
- package/dist/converters/text-format/inteface/ITextFormatConverter.converter.d.ts +4 -0
- package/dist/converters/text-format/inteface/ITextFormatConverter.converter.factory.d.ts +4 -0
- package/dist/converters/text-format/inteface/ITextFormatConverter.converter.factory.js +2 -0
- package/dist/converters/text-format/inteface/ITextFormatConverter.converter.js +2 -0
- package/dist/converters/text-format/provider.d.ts +2 -0
- package/dist/converters/text-format/provider.js +8 -0
- package/dist/converters/text-format/services/binary/binary-format.converter.d.ts +5 -0
- package/dist/converters/text-format/services/binary/binary-format.converter.js +40 -0
- package/dist/converters/text-format/services/binary/binary-format.converter.test.d.ts +1 -0
- package/dist/converters/text-format/services/binary/binary-format.converter.test.js +174 -0
- package/dist/converters/text-format/services/morse/morse-format.converter.d.ts +6 -0
- package/dist/converters/text-format/services/morse/morse-format.converter.js +85 -0
- package/dist/converters/text-format/services/morse/morse-format.converter.test.d.ts +1 -0
- package/dist/converters/text-format/services/morse/morse-format.converter.test.js +518 -0
- package/dist/converters/text-format/services/text/text-format.converter.d.ts +5 -0
- package/dist/converters/text-format/services/text/text-format.converter.js +12 -0
- package/dist/converters/text-format/textFormatConverter.converter.d.ts +5 -0
- package/dist/converters/text-format/textFormatConverter.converter.factory.d.ts +8 -0
- package/dist/converters/text-format/textFormatConverter.converter.factory.js +17 -0
- package/dist/converters/text-format/textFormatConverter.converter.js +17 -0
- package/dist/converters/unit-converter/converter-base.d.ts +19 -0
- package/dist/converters/unit-converter/converter-base.js +56 -0
- package/dist/converters/unit-converter/interfaces/IUnitConverter.d.ts +9 -0
- package/dist/converters/unit-converter/interfaces/IUnitConverter.js +2 -0
- package/dist/converters/unit-converter/interfaces/IUnitConverterFactory.d.ts +4 -0
- package/dist/converters/unit-converter/interfaces/IUnitConverterFactory.js +2 -0
- package/dist/converters/unit-converter/models/unit.d.ts +7 -0
- package/dist/converters/unit-converter/models/unit.js +2 -0
- package/dist/converters/unit-converter/provider.d.ts +2 -0
- package/dist/converters/unit-converter/provider.js +16 -0
- package/dist/converters/unit-converter/services/angle/angle.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/angle/angle.converter.js +15 -0
- package/dist/converters/unit-converter/services/angle/angle.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/angle/angle.converter.test.js +112 -0
- package/dist/converters/unit-converter/services/area/area.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/area/area.converter.js +24 -0
- package/dist/converters/unit-converter/services/area/area.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/area/area.converter.test.js +439 -0
- package/dist/converters/unit-converter/services/data/data.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/data/data.converter.js +30 -0
- package/dist/converters/unit-converter/services/data/data.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/data/data.converter.test.js +209 -0
- package/dist/converters/unit-converter/services/energy/energy.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/energy/energy.converter.js +20 -0
- package/dist/converters/unit-converter/services/energy/energy.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/energy/energy.converter.test.js +154 -0
- package/dist/converters/unit-converter/services/length/length.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/length/length.converter.js +31 -0
- package/dist/converters/unit-converter/services/length/length.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/length/length.converter.test.js +186 -0
- package/dist/converters/unit-converter/services/power/power.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/power/power.converter.js +17 -0
- package/dist/converters/unit-converter/services/power/power.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/power/power.converter.test.js +223 -0
- package/dist/converters/unit-converter/services/pressure/pressure.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/pressure/pressure.converter.js +18 -0
- package/dist/converters/unit-converter/services/pressure/pressure.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/pressure/pressure.converter.test.js +107 -0
- package/dist/converters/unit-converter/services/speed/speed.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/speed/speed.converter.js +22 -0
- package/dist/converters/unit-converter/services/speed/speed.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/speed/speed.converter.test.js +257 -0
- package/dist/converters/unit-converter/services/temperature/temperature.converter.d.ts +7 -0
- package/dist/converters/unit-converter/services/temperature/temperature.converter.js +46 -0
- package/dist/converters/unit-converter/services/temperature/temperature.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/temperature/temperature.converter.test.js +279 -0
- package/dist/converters/unit-converter/services/time/time.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/time/time.converter.js +26 -0
- package/dist/converters/unit-converter/services/volume/volume.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/volume/volume.converter.js +39 -0
- package/dist/converters/unit-converter/services/volume/volume.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/volume/volume.converter.test.js +295 -0
- package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.d.ts +4 -0
- package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.js +29 -0
- package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.test.d.ts +1 -0
- package/dist/converters/unit-converter/services/weight-mass/weight-mass.converter.test.js +218 -0
- package/dist/converters/unit-converter/unit.converter.factory.d.ts +9 -0
- package/dist/converters/unit-converter/unit.converter.factory.js +20 -0
- package/dist/crypt.d.ts +0 -0
- package/dist/crypt.js +77 -0
- package/dist/documents/cnpj/cnpj.d.ts +14 -0
- package/dist/documents/cnpj/cnpj.formatter.d.ts +5 -0
- package/dist/documents/cnpj/cnpj.formatter.js +12 -0
- package/dist/documents/cnpj/cnpj.generator.d.ts +9 -0
- package/dist/documents/cnpj/cnpj.generator.js +43 -0
- package/dist/documents/cnpj/cnpj.js +47 -0
- package/dist/documents/cnpj/cnpj.validator.d.ts +11 -0
- package/dist/documents/cnpj/cnpj.validator.js +49 -0
- package/dist/documents/cnpj/tests/cnpj.formatter.test.d.ts +1 -0
- package/dist/documents/cnpj/tests/cnpj.formatter.test.js +62 -0
- package/dist/documents/cnpj/tests/cnpj.generator.test.d.ts +1 -0
- package/dist/documents/cnpj/tests/cnpj.generator.test.js +51 -0
- package/dist/documents/cnpj/tests/cnpj.test.d.ts +1 -0
- package/dist/documents/cnpj/tests/cnpj.test.js +162 -0
- package/dist/documents/cnpj/tests/cnpj.validator.test.d.ts +1 -0
- package/dist/documents/cnpj/tests/cnpj.validator.test.js +104 -0
- package/dist/documents/cpf/cpf.d.ts +14 -0
- package/dist/documents/cpf/cpf.formatter.d.ts +5 -0
- package/dist/documents/cpf/cpf.formatter.js +12 -0
- package/dist/documents/cpf/cpf.generator.d.ts +9 -0
- package/dist/documents/cpf/cpf.generator.js +40 -0
- package/dist/documents/cpf/cpf.js +50 -0
- package/dist/documents/cpf/cpf.validator.d.ts +11 -0
- package/dist/documents/cpf/cpf.validator.js +46 -0
- package/dist/documents/cpf/tests/cpf.formatter.test.d.ts +1 -0
- package/dist/documents/cpf/tests/cpf.formatter.test.js +71 -0
- package/dist/documents/cpf/tests/cpf.generator.test.d.ts +1 -0
- package/dist/documents/cpf/tests/cpf.generator.test.js +71 -0
- package/dist/documents/cpf/tests/cpf.test.d.ts +1 -0
- package/dist/documents/cpf/tests/cpf.test.js +151 -0
- package/dist/documents/cpf/tests/cpf.validator.test.d.ts +1 -0
- package/dist/documents/cpf/tests/cpf.validator.test.js +113 -0
- package/dist/documents/interfaces/formatter.interface.d.ts +4 -0
- package/dist/documents/interfaces/formatter.interface.js +2 -0
- package/dist/documents/interfaces/generator.interface.d.ts +3 -0
- package/dist/documents/interfaces/generator.interface.js +2 -0
- package/dist/documents/interfaces/validator.interface.d.ts +4 -0
- package/dist/documents/interfaces/validator.interface.js +2 -0
- package/dist/documents/models/validation-result.model.d.ts +4 -0
- package/dist/documents/models/validation-result.model.js +2 -0
- package/dist/enums/cryptProvider.d.ts +6 -0
- package/dist/enums/cryptProvider.js +10 -0
- package/dist/extensions/array.extensions.d.ts +6 -0
- package/dist/extensions/array.extensions.js +7 -0
- package/dist/extensions/boolean.extensions.d.ts +6 -0
- package/dist/extensions/boolean.extensions.js +5 -0
- package/dist/extensions/number.extensions.d.ts +11 -0
- package/dist/extensions/number.extensions.js +24 -0
- package/dist/extensions/string.extensions.d.ts +13 -0
- package/dist/extensions/string.extensions.js +28 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.js +39 -0
- package/dist/interfaces/IFactory.d.ts +3 -0
- package/dist/interfaces/IFactory.js +2 -0
- package/dist/interfaces/IServiceCategory.d.ts +3 -0
- package/dist/interfaces/IServiceCategory.js +2 -0
- package/dist/interfaces/validator.d.ts +5 -0
- package/dist/interfaces/validator.js +2 -0
- package/dist/interfaces/value.d.ts +3 -0
- package/dist/interfaces/value.js +2 -0
- package/dist/interfaces/valueGenerator.d.ts +4 -0
- package/dist/interfaces/valueGenerator.js +2 -0
- package/dist/random.d.ts +12 -0
- package/dist/random.js +29 -0
- package/package.json +25 -0
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { IFactory } from "./interfaces/IFactory";
|
|
2
|
+
import { IServiceCategory } from "./interfaces/IServiceCategory";
|
|
3
|
+
export declare abstract class BaseFactory<TService> implements IFactory<TService> {
|
|
4
|
+
protected services: IServiceCategory[];
|
|
5
|
+
protected map: Map<string, TService>;
|
|
6
|
+
constructor(services: IServiceCategory[]);
|
|
7
|
+
private set _setServices(value);
|
|
8
|
+
private _registerServices;
|
|
9
|
+
protected abstract registerService(service: IServiceCategory): void;
|
|
10
|
+
protected throwServiceNotFoundError(serviceId: string): never;
|
|
11
|
+
createService(serviceId: string): TService;
|
|
12
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BaseFactory = void 0;
|
|
4
|
+
class BaseFactory {
|
|
5
|
+
constructor(services) {
|
|
6
|
+
this.services = [];
|
|
7
|
+
this.map = new Map();
|
|
8
|
+
this._setServices = services;
|
|
9
|
+
this._registerServices();
|
|
10
|
+
}
|
|
11
|
+
set _setServices(services) {
|
|
12
|
+
if (services.length === 0) {
|
|
13
|
+
throw new Error("Nenhuma categoria de serviço foi fornecida.");
|
|
14
|
+
}
|
|
15
|
+
this.services = services;
|
|
16
|
+
}
|
|
17
|
+
_registerServices() {
|
|
18
|
+
this.services.forEach(category => {
|
|
19
|
+
this.registerService(category);
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
throwServiceNotFoundError(serviceId) {
|
|
23
|
+
throw new Error(`O serviço solicitado não está implementado: ${serviceId}`);
|
|
24
|
+
}
|
|
25
|
+
createService(serviceId) {
|
|
26
|
+
const service = this.map.get(serviceId);
|
|
27
|
+
if (!service) {
|
|
28
|
+
this.throwServiceNotFoundError(serviceId);
|
|
29
|
+
}
|
|
30
|
+
return service;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
exports.BaseFactory = BaseFactory;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.cpfPattern = exports.cnpjPattern = void 0;
|
|
4
|
+
// export const decimalNumber = "^(\d+(\.)?)+(\,{1}\d{2}){1}$";
|
|
5
|
+
// export const decimalNumberWithSign = "(^R\$ )?(\d+(\.)?)+(\,{1}\d{2}){1}$";
|
|
6
|
+
// export const emailDomain = "@[a-z0-9]+\.?-?[a-z0-9]+?(\.[a-z0-9]{2,3})+$";
|
|
7
|
+
// export const email = "^(\w+\.?|-?\w+?)+@[a-z0-9]+\.?-?[a-z0-9]+?(\.[a-z0-9]{2,3})+$";
|
|
8
|
+
exports.cnpjPattern = /^(\d{2})\.?(\d{3})\.?(\d{3})\/?([0-9]{4})\-?(\d{2})$/;
|
|
9
|
+
exports.cpfPattern = /^(\d{3})\.?(\d{3})\.?(\d{3})\-?(\d{2}$)$/;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { BaseFactory } from "../../baseFactory";
|
|
2
|
+
import { IServiceCategory } from "../../interfaces/IServiceCategory";
|
|
3
|
+
import { INumericSystemConverter } from "./interfaces/INumericSystem.converter";
|
|
4
|
+
import { INumericSystemConverterFactory } from "./interfaces/INumericSystem.converter.factory";
|
|
5
|
+
export declare class NumericSystemConverterFactory extends BaseFactory<INumericSystemConverter> implements INumericSystemConverterFactory {
|
|
6
|
+
constructor();
|
|
7
|
+
protected registerService(service: IServiceCategory): void;
|
|
8
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NumericSystemConverterFactory = void 0;
|
|
4
|
+
const baseFactory_1 = require("../../baseFactory");
|
|
5
|
+
const provider_1 = require("./provider");
|
|
6
|
+
class NumericSystemConverterFactory extends baseFactory_1.BaseFactory {
|
|
7
|
+
constructor() {
|
|
8
|
+
super(provider_1.systems);
|
|
9
|
+
}
|
|
10
|
+
registerService(service) {
|
|
11
|
+
const module = require("./services/" + service.id + "/" + service.id + ".converter");
|
|
12
|
+
// Atribui o construtor: preferencialmente `default`, ou a primeira propriedade exportada
|
|
13
|
+
const implementation = module.default || Object.values(module)[0];
|
|
14
|
+
this.map.set(service.id, new implementation());
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.NumericSystemConverterFactory = NumericSystemConverterFactory;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NumericSystemConverter = void 0;
|
|
4
|
+
const numericSystem_converter_factory_1 = require("./numericSystem.converter.factory");
|
|
5
|
+
class NumericSystemConverter {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.factory = new numericSystem_converter_factory_1.NumericSystemConverterFactory();
|
|
8
|
+
}
|
|
9
|
+
convert(content, from, to) {
|
|
10
|
+
const source = this.factory.createService(from);
|
|
11
|
+
const target = this.factory.createService(to);
|
|
12
|
+
const decimal = source.toDecimal(content);
|
|
13
|
+
const result = target.fromDecimal(decimal);
|
|
14
|
+
return result;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.NumericSystemConverter = NumericSystemConverter;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.systems = void 0;
|
|
4
|
+
exports.systems = [
|
|
5
|
+
{ id: "binary" },
|
|
6
|
+
{ id: "octadecimal" },
|
|
7
|
+
{ id: "decimal" },
|
|
8
|
+
{ id: "hexadecimal" },
|
|
9
|
+
// { id: "sexagesimal" },
|
|
10
|
+
{ id: "roman" },
|
|
11
|
+
];
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BinarySystemConverter = void 0;
|
|
4
|
+
class BinarySystemConverter {
|
|
5
|
+
fromDecimal(value) {
|
|
6
|
+
return value.toString(2);
|
|
7
|
+
}
|
|
8
|
+
toDecimal(value) {
|
|
9
|
+
if (value === '')
|
|
10
|
+
return 0;
|
|
11
|
+
if (value === 'NaN')
|
|
12
|
+
return 0;
|
|
13
|
+
return parseInt(value, 2);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.BinarySystemConverter = BinarySystemConverter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const binary_converter_1 = require("./binary.converter");
|
|
4
|
+
describe('BinarySystemConverter', () => {
|
|
5
|
+
let converter;
|
|
6
|
+
beforeEach(() => {
|
|
7
|
+
converter = new binary_converter_1.BinarySystemConverter();
|
|
8
|
+
});
|
|
9
|
+
describe('fromDecimal', () => {
|
|
10
|
+
it('deve converter zero para binário', () => {
|
|
11
|
+
expect(converter.fromDecimal(0)).toBe('0');
|
|
12
|
+
});
|
|
13
|
+
it('deve converter números positivos básicos para binário', () => {
|
|
14
|
+
expect(converter.fromDecimal(1)).toBe('1');
|
|
15
|
+
expect(converter.fromDecimal(2)).toBe('10');
|
|
16
|
+
expect(converter.fromDecimal(3)).toBe('11');
|
|
17
|
+
expect(converter.fromDecimal(4)).toBe('100');
|
|
18
|
+
expect(converter.fromDecimal(5)).toBe('101');
|
|
19
|
+
expect(converter.fromDecimal(8)).toBe('1000');
|
|
20
|
+
});
|
|
21
|
+
it('deve converter potências de 2 para binário', () => {
|
|
22
|
+
expect(converter.fromDecimal(1)).toBe('1'); // 2^0
|
|
23
|
+
expect(converter.fromDecimal(2)).toBe('10'); // 2^1
|
|
24
|
+
expect(converter.fromDecimal(4)).toBe('100'); // 2^2
|
|
25
|
+
expect(converter.fromDecimal(8)).toBe('1000'); // 2^3
|
|
26
|
+
expect(converter.fromDecimal(16)).toBe('10000'); // 2^4
|
|
27
|
+
expect(converter.fromDecimal(32)).toBe('100000'); // 2^5
|
|
28
|
+
expect(converter.fromDecimal(64)).toBe('1000000'); // 2^6
|
|
29
|
+
});
|
|
30
|
+
it('deve converter números comuns para binário', () => {
|
|
31
|
+
expect(converter.fromDecimal(7)).toBe('111');
|
|
32
|
+
expect(converter.fromDecimal(15)).toBe('1111');
|
|
33
|
+
expect(converter.fromDecimal(31)).toBe('11111');
|
|
34
|
+
expect(converter.fromDecimal(63)).toBe('111111');
|
|
35
|
+
expect(converter.fromDecimal(127)).toBe('1111111');
|
|
36
|
+
expect(converter.fromDecimal(255)).toBe('11111111');
|
|
37
|
+
});
|
|
38
|
+
it('deve converter números maiores para binário', () => {
|
|
39
|
+
expect(converter.fromDecimal(256)).toBe('100000000');
|
|
40
|
+
expect(converter.fromDecimal(512)).toBe('1000000000');
|
|
41
|
+
expect(converter.fromDecimal(1024)).toBe('10000000000');
|
|
42
|
+
expect(converter.fromDecimal(65535)).toBe('1111111111111111');
|
|
43
|
+
});
|
|
44
|
+
it('deve converter números negativos para binário', () => {
|
|
45
|
+
expect(converter.fromDecimal(-1)).toBe('-1');
|
|
46
|
+
expect(converter.fromDecimal(-2)).toBe('-10');
|
|
47
|
+
expect(converter.fromDecimal(-8)).toBe('-1000');
|
|
48
|
+
expect(converter.fromDecimal(-255)).toBe('-11111111');
|
|
49
|
+
});
|
|
50
|
+
it('deve converter números decimais truncando a parte fracionária', () => {
|
|
51
|
+
expect(converter.fromDecimal(5.1)).toBe('101.0001100110011001100110011001100110011001100110011');
|
|
52
|
+
expect(converter.fromDecimal(5.9)).toBe('101.1110011001100110011001100110011001100110011001101');
|
|
53
|
+
expect(converter.fromDecimal(7.5)).toBe('111.1');
|
|
54
|
+
expect(converter.fromDecimal(15.99)).toBe('1111.1111110101110000101000111101011100001010001111011');
|
|
55
|
+
});
|
|
56
|
+
it('deve lidar com números muito grandes', () => {
|
|
57
|
+
expect(converter.fromDecimal(1048576)).toBe('100000000000000000000');
|
|
58
|
+
expect(converter.fromDecimal(Number.MAX_SAFE_INTEGER)).toBe('11111111111111111111111111111111111111111111111111111');
|
|
59
|
+
});
|
|
60
|
+
it('deve lidar com valores especiais', () => {
|
|
61
|
+
expect(converter.fromDecimal(Infinity)).toBe('Infinity');
|
|
62
|
+
expect(converter.fromDecimal(-Infinity)).toBe('-Infinity');
|
|
63
|
+
expect(converter.fromDecimal(NaN)).toBe('NaN');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('toDecimal', () => {
|
|
67
|
+
it('deve converter zero binário para decimal', () => {
|
|
68
|
+
expect(converter.toDecimal('0')).toBe(0);
|
|
69
|
+
});
|
|
70
|
+
it('deve converter números binários básicos para decimal', () => {
|
|
71
|
+
expect(converter.toDecimal('1')).toBe(1);
|
|
72
|
+
expect(converter.toDecimal('10')).toBe(2);
|
|
73
|
+
expect(converter.toDecimal('11')).toBe(3);
|
|
74
|
+
expect(converter.toDecimal('100')).toBe(4);
|
|
75
|
+
expect(converter.toDecimal('101')).toBe(5);
|
|
76
|
+
expect(converter.toDecimal('1000')).toBe(8);
|
|
77
|
+
});
|
|
78
|
+
it('deve converter potências de 2 binário para decimal', () => {
|
|
79
|
+
expect(converter.toDecimal('1')).toBe(1); // 2^0
|
|
80
|
+
expect(converter.toDecimal('10')).toBe(2); // 2^1
|
|
81
|
+
expect(converter.toDecimal('100')).toBe(4); // 2^2
|
|
82
|
+
expect(converter.toDecimal('1000')).toBe(8); // 2^3
|
|
83
|
+
expect(converter.toDecimal('10000')).toBe(16); // 2^4
|
|
84
|
+
expect(converter.toDecimal('100000')).toBe(32); // 2^5
|
|
85
|
+
expect(converter.toDecimal('1000000')).toBe(64); // 2^6
|
|
86
|
+
});
|
|
87
|
+
it('deve converter padrões binários comuns para decimal', () => {
|
|
88
|
+
expect(converter.toDecimal('111')).toBe(7);
|
|
89
|
+
expect(converter.toDecimal('1111')).toBe(15);
|
|
90
|
+
expect(converter.toDecimal('11111')).toBe(31);
|
|
91
|
+
expect(converter.toDecimal('111111')).toBe(63);
|
|
92
|
+
expect(converter.toDecimal('1111111')).toBe(127);
|
|
93
|
+
expect(converter.toDecimal('11111111')).toBe(255);
|
|
94
|
+
});
|
|
95
|
+
it('deve converter números binários maiores para decimal', () => {
|
|
96
|
+
expect(converter.toDecimal('100000000')).toBe(256);
|
|
97
|
+
expect(converter.toDecimal('1000000000')).toBe(512);
|
|
98
|
+
expect(converter.toDecimal('10000000000')).toBe(1024);
|
|
99
|
+
expect(converter.toDecimal('1111111111111111')).toBe(65535);
|
|
100
|
+
});
|
|
101
|
+
it('deve lidar com espaços em branco', () => {
|
|
102
|
+
expect(converter.toDecimal(' 101 ')).toBe(5);
|
|
103
|
+
expect(converter.toDecimal('\t1000\n')).toBe(8);
|
|
104
|
+
expect(converter.toDecimal(' 1111 ')).toBe(15);
|
|
105
|
+
});
|
|
106
|
+
it('deve lidar com zeros à esquerda', () => {
|
|
107
|
+
expect(converter.toDecimal('0001')).toBe(1);
|
|
108
|
+
expect(converter.toDecimal('000101')).toBe(5);
|
|
109
|
+
expect(converter.toDecimal('0001000')).toBe(8);
|
|
110
|
+
});
|
|
111
|
+
it('deve retornar NaN para strings inválidas', () => {
|
|
112
|
+
expect(converter.toDecimal('')).toBe(0);
|
|
113
|
+
expect(converter.toDecimal('abc')).toBeNaN();
|
|
114
|
+
expect(converter.toDecimal('xyz')).toBeNaN();
|
|
115
|
+
expect(converter.toDecimal('2')).toBeNaN(); // 2 não é válido em binário
|
|
116
|
+
expect(converter.toDecimal('invalid')).toBeNaN();
|
|
117
|
+
expect(converter.toDecimal(' ')).toBeNaN();
|
|
118
|
+
});
|
|
119
|
+
it('deve parar no primeiro dígito inválido', () => {
|
|
120
|
+
expect(converter.toDecimal('101abc')).toBe(5); // Para no 'a'
|
|
121
|
+
expect(converter.toDecimal('123')).toBe(1); // Para no '2'
|
|
122
|
+
expect(converter.toDecimal('102')).toBe(2); // Para no '0', depois para no '2'
|
|
123
|
+
expect(converter.toDecimal('1002')).toBe(4); // Para no primeiro '2'
|
|
124
|
+
expect(converter.toDecimal('110xyz')).toBe(6); // Para no 'x'
|
|
125
|
+
expect(converter.toDecimal('111 000')).toBe(7); // Para no espaço
|
|
126
|
+
expect(converter.toDecimal('1a1')).toBe(1); // Para no 'a'
|
|
127
|
+
});
|
|
128
|
+
it('deve lidar com prefixos comuns de binário', () => {
|
|
129
|
+
expect(converter.toDecimal('0b101')).toBe(0); // Para no 'b'
|
|
130
|
+
expect(converter.toDecimal('101b')).toBe(5); // Para no 'b'
|
|
131
|
+
});
|
|
132
|
+
it('deve converter números binários muito grandes', () => {
|
|
133
|
+
expect(converter.toDecimal('100000000000000000000')).toBe(1048576);
|
|
134
|
+
expect(converter.toDecimal('11111111111111111111111111111111111111111111111111111')).toBe(Number.MAX_SAFE_INTEGER);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
describe('conversões bidirecionais', () => {
|
|
138
|
+
it('deve manter consistência em conversões de ida e volta', () => {
|
|
139
|
+
const testNumbers = [0, 1, 2, 3, 4, 5, 7, 8, 15, 16, 31, 32, 63, 64, 127, 128, 255, 256, 1023, 1024];
|
|
140
|
+
testNumbers.forEach(num => {
|
|
141
|
+
const binary = converter.fromDecimal(num);
|
|
142
|
+
const backToDecimal = converter.toDecimal(binary);
|
|
143
|
+
expect(backToDecimal).toBe(num);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
it('deve manter consistência com strings binárias válidas', () => {
|
|
147
|
+
const testBinaryValues = ['0', '1', '10', '11', '100', '101', '111', '1000', '1111', '10000'];
|
|
148
|
+
testBinaryValues.forEach(binary => {
|
|
149
|
+
const decimal = converter.toDecimal(binary);
|
|
150
|
+
const backToBinary = converter.fromDecimal(decimal);
|
|
151
|
+
expect(backToBinary).toBe(binary);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
it('deve perder parte decimal em conversões bidirecionais', () => {
|
|
155
|
+
const decimalNumbers = [5.7, 7.2, 15.9];
|
|
156
|
+
decimalNumbers.forEach(num => {
|
|
157
|
+
const binary = converter.fromDecimal(num);
|
|
158
|
+
const backToDecimal = converter.toDecimal(binary);
|
|
159
|
+
expect(backToDecimal).toBe(Math.floor(num));
|
|
160
|
+
});
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('casos extremos', () => {
|
|
164
|
+
it('deve lidar com Number.MAX_SAFE_INTEGER', () => {
|
|
165
|
+
const maxSafe = Number.MAX_SAFE_INTEGER;
|
|
166
|
+
const binary = converter.fromDecimal(maxSafe);
|
|
167
|
+
const backToDecimal = converter.toDecimal(binary);
|
|
168
|
+
expect(backToDecimal).toBe(maxSafe);
|
|
169
|
+
});
|
|
170
|
+
it('deve lidar com Number.MIN_SAFE_INTEGER', () => {
|
|
171
|
+
const minSafe = Number.MIN_SAFE_INTEGER;
|
|
172
|
+
const binary = converter.fromDecimal(minSafe);
|
|
173
|
+
expect(binary).toBe('-11111111111111111111111111111111111111111111111111111');
|
|
174
|
+
});
|
|
175
|
+
it('deve lidar com strings binárias muito longas', () => {
|
|
176
|
+
const longBinary = '1'.repeat(53); // Próximo ao limite de precisão do JavaScript
|
|
177
|
+
const result = converter.toDecimal(longBinary);
|
|
178
|
+
expect(typeof result).toBe('number');
|
|
179
|
+
expect(result).toBeGreaterThan(0);
|
|
180
|
+
});
|
|
181
|
+
it('deve lidar com Number.MAX_VALUE', () => {
|
|
182
|
+
const result = converter.fromDecimal(Number.MAX_VALUE);
|
|
183
|
+
expect(typeof result).toBe('string');
|
|
184
|
+
expect(result.length).toBeGreaterThan(0);
|
|
185
|
+
});
|
|
186
|
+
});
|
|
187
|
+
describe('validação específica para sistema binário', () => {
|
|
188
|
+
it('deve aceitar apenas dígitos 0 e 1', () => {
|
|
189
|
+
expect(converter.toDecimal('0')).toBe(0);
|
|
190
|
+
expect(converter.toDecimal('1')).toBe(1);
|
|
191
|
+
expect(converter.toDecimal('01')).toBe(1);
|
|
192
|
+
expect(converter.toDecimal('10')).toBe(2);
|
|
193
|
+
expect(converter.toDecimal('11')).toBe(3);
|
|
194
|
+
});
|
|
195
|
+
it('deve rejeitar dígitos 2-9', () => {
|
|
196
|
+
expect(converter.toDecimal('2')).toBeNaN();
|
|
197
|
+
expect(converter.toDecimal('12')).toBe(1); // Para no 2
|
|
198
|
+
expect(converter.toDecimal('19')).toBe(1); // Para no 9
|
|
199
|
+
expect(converter.toDecimal('101234')).toBe(5); // Para no 2
|
|
200
|
+
});
|
|
201
|
+
it('deve rejeitar caracteres não numéricos (exceto espaços)', () => {
|
|
202
|
+
expect(converter.toDecimal('a')).toBeNaN();
|
|
203
|
+
expect(converter.toDecimal('1a0')).toBe(1);
|
|
204
|
+
expect(converter.toDecimal('z101')).toBeNaN();
|
|
205
|
+
});
|
|
206
|
+
});
|
|
207
|
+
describe('padrões binários importantes', () => {
|
|
208
|
+
it('deve converter corretamente bytes (8 bits)', () => {
|
|
209
|
+
expect(converter.toDecimal('00000000')).toBe(0);
|
|
210
|
+
expect(converter.toDecimal('00000001')).toBe(1);
|
|
211
|
+
expect(converter.toDecimal('10000000')).toBe(128);
|
|
212
|
+
expect(converter.toDecimal('11111111')).toBe(255);
|
|
213
|
+
});
|
|
214
|
+
it('deve converter corretamente nibbles (4 bits)', () => {
|
|
215
|
+
expect(converter.toDecimal('0000')).toBe(0);
|
|
216
|
+
expect(converter.toDecimal('0001')).toBe(1);
|
|
217
|
+
expect(converter.toDecimal('1000')).toBe(8);
|
|
218
|
+
expect(converter.toDecimal('1111')).toBe(15);
|
|
219
|
+
});
|
|
220
|
+
it('deve converter corretamente words (16 bits)', () => {
|
|
221
|
+
expect(converter.toDecimal('0000000000000000')).toBe(0);
|
|
222
|
+
expect(converter.toDecimal('0000000000000001')).toBe(1);
|
|
223
|
+
expect(converter.toDecimal('1000000000000000')).toBe(32768);
|
|
224
|
+
expect(converter.toDecimal('1111111111111111')).toBe(65535);
|
|
225
|
+
});
|
|
226
|
+
});
|
|
227
|
+
describe('implementação da interface', () => {
|
|
228
|
+
it('deve implementar corretamente INumericSystemConverter', () => {
|
|
229
|
+
expect(typeof converter.fromDecimal).toBe('function');
|
|
230
|
+
expect(typeof converter.toDecimal).toBe('function');
|
|
231
|
+
});
|
|
232
|
+
it('fromDecimal deve retornar string', () => {
|
|
233
|
+
const result = converter.fromDecimal(42);
|
|
234
|
+
expect(typeof result).toBe('string');
|
|
235
|
+
});
|
|
236
|
+
it('toDecimal deve retornar number', () => {
|
|
237
|
+
const result = converter.toDecimal('101010');
|
|
238
|
+
expect(typeof result).toBe('number');
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
describe('comportamentos específicos do parseInt com base 2', () => {
|
|
242
|
+
it('deve usar base 2 explicitamente', () => {
|
|
243
|
+
expect(converter.toDecimal('010')).toBe(2); // Interpreta como binário
|
|
244
|
+
expect(converter.toDecimal('0x10')).toBe(0); // Para no 'x'
|
|
245
|
+
});
|
|
246
|
+
it('deve parar no primeiro caractere inválido para base 2', () => {
|
|
247
|
+
expect(converter.toDecimal('1012')).toBe(5); // Para no '2'
|
|
248
|
+
expect(converter.toDecimal('101a')).toBe(5); // Para no 'a'
|
|
249
|
+
expect(converter.toDecimal('11 00')).toBe(3); // Para no espaço
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
});
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DecimalSystemConverter = void 0;
|
|
4
|
+
class DecimalSystemConverter {
|
|
5
|
+
fromDecimal(value) {
|
|
6
|
+
return value.toString(10);
|
|
7
|
+
}
|
|
8
|
+
toDecimal(value) {
|
|
9
|
+
if (value === '')
|
|
10
|
+
return 0;
|
|
11
|
+
if (value === 'NaN')
|
|
12
|
+
return 0;
|
|
13
|
+
return parseInt(value, 10);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
exports.DecimalSystemConverter = DecimalSystemConverter;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|