diff --git a/src/tools/index.ts b/src/tools/index.ts index b4c161ef8..e1b100811 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -2,6 +2,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; import { tool as emailNormalizer } from './email-normalizer'; +import { tool as smartRawConverter } from './smart-raw-converter'; import { tool as asciiTextDrawer } from './ascii-text-drawer'; @@ -112,6 +113,7 @@ export const toolsByCategory: ToolCategory[] = [ tomlToYaml, xmlToJson, jsonToXml, + smartRawConverter, ], }, { diff --git a/src/tools/smart-raw-converter/index.ts b/src/tools/smart-raw-converter/index.ts new file mode 100644 index 000000000..eeb8c78bb --- /dev/null +++ b/src/tools/smart-raw-converter/index.ts @@ -0,0 +1,12 @@ +import { Disc } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'SMART Raw Converter', + path: '/smart-raw-converter', + description: 'Convert SMART Raw values to human readable', + keywords: ['smart', 'raw', 'converter'], + component: () => import('./smart-raw-converter.vue'), + icon: Disc, + createdAt: new Date('2024-07-14'), +}); diff --git a/src/tools/smart-raw-converter/smart-raw-converter.service.test.ts b/src/tools/smart-raw-converter/smart-raw-converter.service.test.ts new file mode 100644 index 000000000..4d3d92d7c --- /dev/null +++ b/src/tools/smart-raw-converter/smart-raw-converter.service.test.ts @@ -0,0 +1,13 @@ +import { describe, expect, it } from 'vitest'; +import { getSmartValue } from './smart-raw-converter.service'; + +describe('smart-raw-converter', () => { + describe('getSmartValue', () => { + it('to return correct values', () => { + expect(getSmartValue(8590065666)).to.deep.eq({ + errors: 2, + operations: 131074, + }); + }); + }); +}); diff --git a/src/tools/smart-raw-converter/smart-raw-converter.service.ts b/src/tools/smart-raw-converter/smart-raw-converter.service.ts new file mode 100644 index 000000000..308a76f37 --- /dev/null +++ b/src/tools/smart-raw-converter/smart-raw-converter.service.ts @@ -0,0 +1,14 @@ +export function getSmartValue(raw: number) { + const n = raw.toString(2); + let bin = ''; + for (let i = 0; i < 64 - n.length; ++i) { + bin += '0'; + } + bin += n; + const lo = Number.parseInt(bin.slice(0, 32), 2); + const hi = Number.parseInt(bin.slice(32), 2); + return { + errors: lo, + operations: hi, + }; +} diff --git a/src/tools/smart-raw-converter/smart-raw-converter.vue b/src/tools/smart-raw-converter/smart-raw-converter.vue new file mode 100644 index 000000000..314a18291 --- /dev/null +++ b/src/tools/smart-raw-converter/smart-raw-converter.vue @@ -0,0 +1,44 @@ + + + + + + + + {{ smartDecodedValue.errors }} in {{ smartDecodedValue.operations }} operations + + +