feat(new tool); Energy Expense Computer

Fix #650
This commit is contained in:
sharevb 2024-10-26 22:07:47 +02:00
parent 0b1b98f93e
commit d191b69cba
5 changed files with 104 additions and 1 deletions

View file

@ -0,0 +1,53 @@
import { describe, expect, it } from 'vitest';
import { computeCost } from './energy-computer.service'; // Adjust the import path as needed
describe('computeCost', () => {
it('should calculate the correct cost for valid inputs', () => {
const wattage = 1000; // 1000 watts = 1 kW
const duration = 5; // 5 hours
const kWhCost = 0.12; // $0.12 per kWh
const result = computeCost(wattage, duration, kWhCost);
expect(result).toBeCloseTo(0.60); // 1 kW * 5h * 0.12 = 0.60
});
it('should return 0 when the duration is 0', () => {
const wattage = 1000;
const duration = 0;
const kWhCost = 0.12;
const result = computeCost(wattage, duration, kWhCost);
expect(result).toBe(0);
});
it('should return 0 when the wattage is 0', () => {
const wattage = 0;
const duration = 5;
const kWhCost = 0.12;
const result = computeCost(wattage, duration, kWhCost);
expect(result).toBe(0);
});
it('should return 0 when the cost per kWh is 0', () => {
const wattage = 1000;
const duration = 5;
const kWhCost = 0;
const result = computeCost(wattage, duration, kWhCost);
expect(result).toBe(0);
});
it('should handle fractional wattage and duration correctly', () => {
const wattage = 750; // 0.75 kW
const duration = 2.5; // 2.5 hours
const kWhCost = 0.10; // $0.10 per kWh
const result = computeCost(wattage, duration, kWhCost);
expect(result).toBeCloseTo(0.1875); // 0.75 kW * 2.5h * 0.10 = 0.1875
});
it('should handle large numbers correctly', () => {
const wattage = 1000000; // 1 MW
const duration = 24; // 24 hours
const kWhCost = 0.15; // $0.15 per kWh
const result = computeCost(wattage, duration, kWhCost);
expect(result).toBe(3600); // 1000 kW * 24h * 0.15 = 3600
});
});

View file

@ -0,0 +1,6 @@
export function computeCost(wattage: number, durationHours: number, costPerKWh: number): number {
const kilowatts = wattage / 1000;
const energyConsumed = kilowatts * durationHours;
const totalCost = energyConsumed * costPerKWh;
return totalCost;
}

View file

@ -0,0 +1,26 @@
<script setup lang="ts">
import { computeCost } from './energy-computer.service';
const wattage = ref(100);
const durationHours = ref(2);
const kWhCost = ref(0.1);
const totalCost = computed(() => computeCost(wattage.value, durationHours.value, kWhCost.value));
</script>
<template>
<div>
<n-form-item label="Device Wattage" mb-1>
<n-input-number v-model:value="wattage" :min="0" />
</n-form-item>
<n-form-item label="Usage Duration (hours)" mb-1>
<n-input-number v-model:value="durationHours" :min="0" />
</n-form-item>
<n-form-item label="kWh Cost" mb-1>
<n-input-number v-model:value="kWhCost" :min="0" />
</n-form-item>
<n-divider />
<input-copyable label="Total Cost" :value="totalCost" />
</div>
</template>

View file

@ -0,0 +1,12 @@
import { Engine } from '@vicons/tabler';
import { defineTool } from '../tool';
export const tool = defineTool({
name: 'Energy Consumption and Expense Computer',
path: '/energy-computer',
description: 'Compute energy consumption and expense',
keywords: ['energy', 'expense', 'watt', 'kwh', 'computer'],
component: () => import('./energy-computer.vue'),
icon: Engine,
createdAt: new Date('2024-08-15'),
});

View file

@ -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 energyComputer } from './energy-computer';
import { tool as asciiTextDrawer } from './ascii-text-drawer';
@ -172,7 +173,12 @@ export const toolsByCategory: ToolCategory[] = [
},
{
name: 'Measurement',
components: [chronometer, temperatureConverter, benchmarkBuilder],
components: [
chronometer,
temperatureConverter,
benchmarkBuilder,
energyComputer,
],
},
{
name: 'Text',