@@ -5,31 +5,38 @@ const { calculateCharges, loadRatesConfig } = require('../../src/cost-calculator
55
66function testFileConfig ( ) {
77 const usage = [
8- { account : 'education' , date : '2024-01-15' , core_hours : 100 } ,
9- { account : 'research' , date : '2024-02-01' , core_hours : 50 } ,
10- { account : 'special' , date : '2024-02-01' , core_hours : 100 } ,
8+ { account : 'education' , date : '2024-01-15' , core_hours : 100 , gpu_hours : 10 } ,
9+ { account : 'research' , date : '2024-02-01' , core_hours : 50 , gpu_hours : 5 } ,
10+ { account : 'special' , date : '2024-02-01' , core_hours : 100 , gpu_hours : 20 } ,
1111 { account : 'other' , date : '2024-02-01' , core_hours : 10 }
1212 ] ;
1313 const config = loadRatesConfig ( ) ;
1414 const charges = calculateCharges ( usage , config ) ;
15- assert . strictEqual ( charges [ '2024-01' ] . education . cost , 100 * 0.015 * 0.5 ) ;
16- assert . strictEqual ( charges [ '2024-02' ] . research . cost , 50 * 0.01 ) ;
17- assert . strictEqual ( charges [ '2024-02' ] . special . cost , 100 * 0.025 * 0.9 ) ;
15+ assert . strictEqual ( charges [ '2024-01' ] . education . cost , ( 100 * 0.015 + 10 * 0.15 ) * 0.5 ) ;
16+ assert . strictEqual ( charges [ '2024-02' ] . research . cost , 50 * 0.01 + 5 * 0.1 ) ;
17+ assert . strictEqual ( charges [ '2024-02' ] . special . cost , ( 100 * 0.025 + 20 * 0.25 ) * 0.9 ) ;
1818 assert . strictEqual ( charges [ '2024-02' ] . other . cost , 10 * 0.02 ) ;
19+ assert . strictEqual ( charges [ '2024-01' ] . education . gpu_hours , 10 ) ;
1920}
2021
2122function testPassedConfig ( ) {
2223 const usage = [
23- { account : 'acct' , date : '2024-03-01' , core_hours : 100 }
24+ { account : 'acct' , date : '2024-03-01' , core_hours : 100 , gpu_hours : 10 }
2425 ] ;
25- const config = { defaultRate : 0.02 , historicalRates : { '2024-03' : 0.03 } , overrides : { acct : { discount : 0.25 } } } ;
26+ const config = {
27+ defaultRate : 0.02 ,
28+ defaultGpuRate : 0.2 ,
29+ historicalRates : { '2024-03' : 0.03 } ,
30+ historicalGpuRates : { '2024-03' : 0.3 } ,
31+ overrides : { acct : { discount : 0.25 } }
32+ } ;
2633 const charges = calculateCharges ( usage , config ) ;
27- assert . strictEqual ( charges [ '2024-03' ] . acct . cost , 100 * 0.03 * 0.75 ) ;
34+ assert . strictEqual ( charges [ '2024-03' ] . acct . cost , ( 100 * 0.03 + 10 * 0.3 ) * 0.75 ) ;
2835}
2936
3037function testInvalidUsageIgnored ( ) {
3138 const usage = [
32- { account : 'bad' , date : '2024-04-01' , core_hours : 'NaN' }
39+ { account : 'bad' , date : '2024-04-01' , core_hours : 'NaN' , gpu_hours : 'NaN' }
3340 ] ;
3441 const charges = calculateCharges ( usage , { defaultRate : 0.01 } ) ;
3542 assert . deepStrictEqual ( charges , { } ) ;
@@ -77,10 +84,10 @@ function testNegativeInputs() {
7784 const charges = calculateCharges ( usage , config ) ;
7885 const may = charges [ '2024-05' ] ;
7986 assert . ok ( ! ( 'negHours' in may ) ) ;
80- assert . deepStrictEqual ( may . negRate , { core_hours : 5 , cost : 0 } ) ;
81- assert . deepStrictEqual ( may . discLow , { core_hours : 5 , cost : 0.5 } ) ;
82- assert . deepStrictEqual ( may . discHigh , { core_hours : 5 , cost : 0 } ) ;
83- assert . deepStrictEqual ( may . def , { core_hours : 5 , cost : 0 } ) ;
87+ assert . deepStrictEqual ( may . negRate , { core_hours : 5 , gpu_hours : 0 , cost : 0 } ) ;
88+ assert . deepStrictEqual ( may . discLow , { core_hours : 5 , gpu_hours : 0 , cost : 0.5 } ) ;
89+ assert . deepStrictEqual ( may . discHigh , { core_hours : 5 , gpu_hours : 0 , cost : 0 } ) ;
90+ assert . deepStrictEqual ( may . def , { core_hours : 5 , gpu_hours : 0 , cost : 0 } ) ;
8491}
8592
8693function testRoundingTotals ( ) {
@@ -91,6 +98,7 @@ function testRoundingTotals() {
9198 const charges = calculateCharges ( usage , { defaultRate : 0.333 } ) ;
9299 const june = charges [ '2024-06' ] ;
93100 assert . strictEqual ( june . round . core_hours , 0.67 ) ;
101+ assert . strictEqual ( june . round . gpu_hours , 0 ) ;
94102 assert . strictEqual ( june . round . cost , 0.22 ) ;
95103}
96104
0 commit comments