From e46a5ec4d378eac7903761993e89a83befb2d9ec Mon Sep 17 00:00:00 2001 From: sharevb Date: Sun, 28 Apr 2024 12:30:03 +0200 Subject: [PATCH 1/3] feat(new tool): HDD Size Calculator Fix #974 --- components.d.ts | 8 +--- .../hdd-calculator.service.test.ts | 12 ++++++ .../hdd-calculator/hdd-calculator.service.ts | 14 +++++++ src/tools/hdd-calculator/hdd-calculator.vue | 38 +++++++++++++++++++ src/tools/hdd-calculator/index.ts | 14 +++++++ src/tools/index.ts | 2 + 6 files changed, 82 insertions(+), 6 deletions(-) create mode 100644 src/tools/hdd-calculator/hdd-calculator.service.test.ts create mode 100644 src/tools/hdd-calculator/hdd-calculator.service.ts create mode 100644 src/tools/hdd-calculator/hdd-calculator.vue create mode 100644 src/tools/hdd-calculator/index.ts diff --git a/components.d.ts b/components.d.ts index e31119b3..67e1f6c2 100644 --- a/components.d.ts +++ b/components.d.ts @@ -82,6 +82,7 @@ declare module '@vue/runtime-core' { GitMemo: typeof import('./src/tools/git-memo/git-memo.vue')['default'] 'GitMemo.content': typeof import('./src/tools/git-memo/git-memo.content.md')['default'] HashText: typeof import('./src/tools/hash-text/hash-text.vue')['default'] + HddCalculator: typeof import('./src/tools/hdd-calculator/hdd-calculator.vue')['default'] HmacGenerator: typeof import('./src/tools/hmac-generator/hmac-generator.vue')['default'] 'Home.page': typeof import('./src/pages/Home.page.vue')['default'] HtmlEntities: typeof import('./src/tools/html-entities/html-entities.vue')['default'] @@ -127,24 +128,18 @@ declare module '@vue/runtime-core' { MetaTagGenerator: typeof import('./src/tools/meta-tag-generator/meta-tag-generator.vue')['default'] MimeTypes: typeof import('./src/tools/mime-types/mime-types.vue')['default'] NavbarButtons: typeof import('./src/components/NavbarButtons.vue')['default'] - NCode: typeof import('naive-ui')['NCode'] NCollapseTransition: typeof import('naive-ui')['NCollapseTransition'] NConfigProvider: typeof import('naive-ui')['NConfigProvider'] NDivider: typeof import('naive-ui')['NDivider'] NEllipsis: typeof import('naive-ui')['NEllipsis'] NFormItem: typeof import('naive-ui')['NFormItem'] - NGi: typeof import('naive-ui')['NGi'] - NGrid: typeof import('naive-ui')['NGrid'] NH1: typeof import('naive-ui')['NH1'] NH3: typeof import('naive-ui')['NH3'] NIcon: typeof import('naive-ui')['NIcon'] NInputNumber: typeof import('naive-ui')['NInputNumber'] - NLabel: typeof import('naive-ui')['NLabel'] NLayout: typeof import('naive-ui')['NLayout'] NLayoutSider: typeof import('naive-ui')['NLayoutSider'] NMenu: typeof import('naive-ui')['NMenu'] - NScrollbar: typeof import('naive-ui')['NScrollbar'] - NSpin: typeof import('naive-ui')['NSpin'] NumeronymGenerator: typeof import('./src/tools/numeronym-generator/numeronym-generator.vue')['default'] OtpCodeGeneratorAndValidator: typeof import('./src/tools/otp-code-generator-and-validator/otp-code-generator-and-validator.vue')['default'] PasswordStrengthAnalyser: typeof import('./src/tools/password-strength-analyser/password-strength-analyser.vue')['default'] @@ -159,6 +154,7 @@ declare module '@vue/runtime-core' { RouterLink: typeof import('vue-router')['RouterLink'] RouterView: typeof import('vue-router')['RouterView'] RsaKeyPairGenerator: typeof import('./src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue')['default'] + SafelinkDecoder: typeof import('./src/tools/safelink-decoder/safelink-decoder.vue')['default'] SlugifyString: typeof import('./src/tools/slugify-string/slugify-string.vue')['default'] SpanCopyable: typeof import('./src/components/SpanCopyable.vue')['default'] SqlPrettify: typeof import('./src/tools/sql-prettify/sql-prettify.vue')['default'] diff --git a/src/tools/hdd-calculator/hdd-calculator.service.test.ts b/src/tools/hdd-calculator/hdd-calculator.service.test.ts new file mode 100644 index 00000000..8c6d27f2 --- /dev/null +++ b/src/tools/hdd-calculator/hdd-calculator.service.test.ts @@ -0,0 +1,12 @@ +import { describe, expect, it } from 'vitest'; +import { getRealSize } from './hdd-calculator.service'; + +describe('hdd-calculator', () => { + it('Convert Claimed Size to Real Size', async () => { + expect(getRealSize(10, 'gb', 'tb')).to.equal(0.009094947017729282); + expect(getRealSize(10, 'pb', 'mb')).to.equal(9536743164.0625); + expect(getRealSize(100, 'tb', 'gb')).to.equal(93132.25746154785); + expect(getRealSize(1, 'pb', 'gb')).to.equal(931322.5746154785); + expect(getRealSize(1000, 'tb', 'gb')).to.equal(931322.5746154785); + }); +}); diff --git a/src/tools/hdd-calculator/hdd-calculator.service.ts b/src/tools/hdd-calculator/hdd-calculator.service.ts new file mode 100644 index 00000000..50bdc178 --- /dev/null +++ b/src/tools/hdd-calculator/hdd-calculator.service.ts @@ -0,0 +1,14 @@ +const unitsConversion = { + kb: { dec: 1_000, bin: 1024 }, + mb: { dec: 1_000_000, bin: 1024 * 1024 }, + gb: { dec: 1_000_000_000, bin: 1024 * 1024 * 1024 }, + tb: { dec: 1_000_000_000_000, bin: 1024 * 1024 * 1024 * 1024 }, + pb: { dec: 1_000_000_000_000_000, bin: 1024 * 1024 * 1024 * 1024 * 1024 }, +}; + +export type Units = 'kb' | 'mb' | 'gb' | 'tb' | 'pb'; +export function getRealSize(claimedCapacity: number, claimedUnit: Units, toUnit: Units) { + const fromUnit = unitsConversion[claimedUnit as Units]; + const toUnitBin = unitsConversion[toUnit as Units].bin; + return claimedCapacity * fromUnit.dec / toUnitBin; +}; diff --git a/src/tools/hdd-calculator/hdd-calculator.vue b/src/tools/hdd-calculator/hdd-calculator.vue new file mode 100644 index 00000000..4c293641 --- /dev/null +++ b/src/tools/hdd-calculator/hdd-calculator.vue @@ -0,0 +1,38 @@ + + + diff --git a/src/tools/hdd-calculator/index.ts b/src/tools/hdd-calculator/index.ts new file mode 100644 index 00000000..8b3071ff --- /dev/null +++ b/src/tools/hdd-calculator/index.ts @@ -0,0 +1,14 @@ +import { DeviceDesktop } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'HDD calculator', + path: '/hdd-calculator', + description: 'Compute real storage space (binary) from HDD Capacity (decimal)', + keywords: ['hdd', 'calculator', 'size', 'conversion', 'binary', 'decimal', + 'gb', 'mb', 'tb', + 'gigabyte', 'gibibyte', 'megabyte', 'mebibyte', 'terabyte', 'tebibyte'], + component: () => import('./hdd-calculator.vue'), + icon: DeviceDesktop, + createdAt: new Date('2024-04-07'), +}); diff --git a/src/tools/index.ts b/src/tools/index.ts index aa861c93..f2410d6a 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -6,6 +6,7 @@ import { tool as asciiTextDrawer } from './ascii-text-drawer'; import { tool as textToUnicode } from './text-to-unicode'; import { tool as safelinkDecoder } from './safelink-decoder'; +import { tool as hddCalculator } from './hdd-calculator'; import { tool as pdfSignatureChecker } from './pdf-signature-checker'; import { tool as numeronymGenerator } from './numeronym-generator'; import { tool as macAddressGenerator } from './mac-address-generator'; @@ -107,6 +108,7 @@ export const toolsByCategory: ToolCategory[] = [ listConverter, tomlToJson, tomlToYaml, + hddCalculator, ], }, { From ae4baa358b24ae830a9175773ff743a99fe6fc96 Mon Sep 17 00:00:00 2001 From: ShareVB Date: Sun, 15 Dec 2024 13:47:01 +0100 Subject: [PATCH 2/3] fix: better description and use of units --- src/tools/hdd-calculator/hdd-calculator.vue | 17 ++++++++++++----- src/tools/hdd-calculator/index.ts | 2 +- 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/tools/hdd-calculator/hdd-calculator.vue b/src/tools/hdd-calculator/hdd-calculator.vue index 4c293641..b5fcba2f 100644 --- a/src/tools/hdd-calculator/hdd-calculator.vue +++ b/src/tools/hdd-calculator/hdd-calculator.vue @@ -3,13 +3,20 @@ import InputCopyable from '../../components/InputCopyable.vue'; import type { Units } from './hdd-calculator.service'; import { getRealSize } from './hdd-calculator.service'; -const units = [ - { value: 'kb', label: 'KB' }, +const dec_units = [ + { value: 'kb', label: 'kB' }, { value: 'mb', label: 'MB' }, { value: 'gb', label: 'GB' }, { value: 'tb', label: 'TB' }, { value: 'pb', label: 'PB' }, ]; +const bin_units = [ + { value: 'kb', label: 'KiB' }, + { value: 'mb', label: 'MiB' }, + { value: 'gb', label: 'GiB' }, + { value: 'tb', label: 'TiB' }, + { value: 'pb', label: 'PiB' }, +]; const claimedCapacity = ref(1); const claimedUnit = ref('tb'); @@ -23,15 +30,15 @@ const claimedUnit = ref('tb'); diff --git a/src/tools/hdd-calculator/index.ts b/src/tools/hdd-calculator/index.ts index 8b3071ff..e3b1e765 100644 --- a/src/tools/hdd-calculator/index.ts +++ b/src/tools/hdd-calculator/index.ts @@ -4,7 +4,7 @@ import { defineTool } from '../tool'; export const tool = defineTool({ name: 'HDD calculator', path: '/hdd-calculator', - description: 'Compute real storage space (binary) from HDD Capacity (decimal)', + description: 'Storage device manufacturers report capacities in decimal form (like GB), while operating systems and other software uses binary form (GiB), although still incorrectly using the decimal unit (GiB). This tool converts decimal form capacity into various binary forms.', keywords: ['hdd', 'calculator', 'size', 'conversion', 'binary', 'decimal', 'gb', 'mb', 'tb', 'gigabyte', 'gibibyte', 'megabyte', 'mebibyte', 'terabyte', 'tebibyte'], From e97d97896a0250c03c04caa499150fbb6f3ac977 Mon Sep 17 00:00:00 2001 From: ShareVB Date: Sun, 15 Dec 2024 13:58:21 +0100 Subject: [PATCH 3/3] fix: code style --- src/tools/hdd-calculator/hdd-calculator.service.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/tools/hdd-calculator/hdd-calculator.service.ts b/src/tools/hdd-calculator/hdd-calculator.service.ts index 50bdc178..e42f8566 100644 --- a/src/tools/hdd-calculator/hdd-calculator.service.ts +++ b/src/tools/hdd-calculator/hdd-calculator.service.ts @@ -8,7 +8,7 @@ const unitsConversion = { export type Units = 'kb' | 'mb' | 'gb' | 'tb' | 'pb'; export function getRealSize(claimedCapacity: number, claimedUnit: Units, toUnit: Units) { - const fromUnit = unitsConversion[claimedUnit as Units]; - const toUnitBin = unitsConversion[toUnit as Units].bin; + const fromUnit = unitsConversion[claimedUnit]; + const toUnitBin = unitsConversion[toUnit].bin; return claimedCapacity * fromUnit.dec / toUnitBin; };