@@ -452,7 +452,7 @@ func TestOptimize(t *testing.T) {
452452 BatteryMinSOC : 0.0 , // 0% minimum SOC
453453 BatteryMaxSOC : 1.0 , // 100% maximum SOC
454454 BatteryEfficiency : 0.9 , // 90% round-trip efficiency
455- BatteryDegradationCost : 0.0 , // € 0.00/kWh degradation cost
455+ BatteryDegradationCost : 0.0 , // 0.00/kWh degradation cost
456456 MaxGridImport : 30.0 , // 30 kW max grid import
457457 MaxGridExport : 30.0 , // 30 kW max grid export
458458 }
@@ -474,7 +474,7 @@ func TestOptimize(t *testing.T) {
474474
475475 // Verify all decisions have valid data
476476 for i , dec := range decisions {
477- t .Logf ("Hour %2d: SOC=%.3f, Charge=%.3f, Discharge=%.3f, Import=%.3f, Export=%.3f, Profit=€ %.4f, Price=€ %.5f/kWh" ,
477+ t .Logf ("Hour %2d: SOC=%.3f, Charge=%.3f, Discharge=%.3f, Import=%.3f, Export=%.3f, Profit=%.4f, Price=%.5f/kWh" ,
478478 i , dec .BatterySOC , dec .BatteryCharge , dec .BatteryDischarge ,
479479 dec .GridImport , dec .GridExport , dec .Profit , dec .ImportPrice )
480480
@@ -527,7 +527,7 @@ func TestOptimize(t *testing.T) {
527527 for _ , dec := range decisions {
528528 totalProfit += dec .Profit
529529 }
530- t .Logf ("Total profit over 36 hours: € %.4f" , totalProfit )
530+ t .Logf ("Total profit over 36 hours: %.4f" , totalProfit )
531531
532532 // Detailed arbitrage analysis
533533 t .Log ("\n === Arbitrage Analysis ===" )
@@ -543,17 +543,17 @@ func TestOptimize(t *testing.T) {
543543 exportPriceHour22 := forecast [22 ].ExportPrice
544544
545545 t .Logf ("\n Hour 4 (LOWEST PRICE):" )
546- t .Logf (" Import Price: € %.5f/kWh" , importPriceHour4 )
547- t .Logf (" Export Price: € %.5f/kWh" , exportPriceHour4 )
546+ t .Logf (" Import Price: %.5f/kWh" , importPriceHour4 )
547+ t .Logf (" Export Price: %.5f/kWh" , exportPriceHour4 )
548548 t .Logf (" Charged: %.3f kW (added %.3f kWh to battery)" , hour4 .BatteryCharge , hour4 .BatteryCharge * 0.9 )
549- t .Logf (" Cost: € %.4f (import + degradation)" , hour4 .BatteryCharge * importPriceHour4 + hour4 .BatteryCharge * config .BatteryDegradationCost )
549+ t .Logf (" Cost: %.4f (import + degradation)" , hour4 .BatteryCharge * importPriceHour4 + hour4 .BatteryCharge * config .BatteryDegradationCost )
550550
551551 t .Logf ("\n Hour 22 (HIGHEST PRICE):" )
552- t .Logf (" Import Price: € %.5f/kWh" , importPriceHour22 )
553- t .Logf (" Export Price: € %.5f/kWh" , exportPriceHour22 )
552+ t .Logf (" Import Price: %.5f/kWh" , importPriceHour22 )
553+ t .Logf (" Export Price: %.5f/kWh" , exportPriceHour22 )
554554 t .Logf (" Discharged: %.3f kW (%.3f kWh from battery)" , hour22 .BatteryDischarge , hour22 .BatteryDischarge )
555555 t .Logf (" Exported: %.3f kW" , hour22 .GridExport )
556- t .Logf (" Revenue: € %.4f (export - degradation)" , hour22 .GridExport * exportPriceHour22 - hour22 .BatteryDischarge * config .BatteryDegradationCost )
556+ t .Logf (" Revenue: %.4f (export - degradation)" , hour22 .GridExport * exportPriceHour22 - hour22 .BatteryDischarge * config .BatteryDegradationCost )
557557
558558 // Calculate theoretical max arbitrage if charged more at hour 4
559559 maxAdditionalCharge := config .BatteryMaxCharge - hour4 .BatteryCharge
@@ -564,9 +564,9 @@ func TestOptimize(t *testing.T) {
564564 t .Logf ("\n Theoretical Additional Arbitrage Opportunity:" )
565565 t .Logf (" Could charge additional: %.3f kW at hour 4" , actualMaxCharge )
566566 t .Logf (" Energy stored after efficiency: %.3f kWh" , actualMaxCharge * config .BatteryEfficiency )
567- t .Logf (" Cost to charge: € %.4f" , actualMaxCharge * importPriceHour4 + actualMaxCharge * config .BatteryDegradationCost )
568- t .Logf (" Revenue if exported at hour 22: € %.4f" , actualMaxCharge * config .BatteryEfficiency * exportPriceHour22 - actualMaxCharge * config .BatteryDegradationCost )
569- t .Logf (" Net profit from additional arbitrage: € %.4f" ,
567+ t .Logf (" Cost to charge: %.4f" , actualMaxCharge * importPriceHour4 + actualMaxCharge * config .BatteryDegradationCost )
568+ t .Logf (" Revenue if exported at hour 22: %.4f" , actualMaxCharge * config .BatteryEfficiency * exportPriceHour22 - actualMaxCharge * config .BatteryDegradationCost )
569+ t .Logf (" Net profit from additional arbitrage: %.4f" ,
570570 actualMaxCharge * config .BatteryEfficiency * exportPriceHour22 -
571571 actualMaxCharge * importPriceHour4 -
572572 2 * actualMaxCharge * config .BatteryDegradationCost )
@@ -579,7 +579,7 @@ func TestOptimize(t *testing.T) {
579579 for i , dec := range decisions {
580580 if dec .BatteryCharge > 0.1 {
581581 chargedTotal += dec .BatteryCharge
582- t .Logf (" Hour %2d: CHARGED %.3f kW at price € %.5f/kWh (SOC: %.3f)" ,
582+ t .Logf (" Hour %2d: CHARGED %.3f kW at price %.5f/kWh (SOC: %.3f)" ,
583583 i , dec .BatteryCharge , dec .ImportPrice , dec .BatterySOC )
584584 }
585585 if dec .BatteryDischarge > 0.1 {
@@ -588,12 +588,12 @@ func TestOptimize(t *testing.T) {
588588 if dec .GridExport > 0.001 {
589589 exported = fmt .Sprintf (" → EXPORTED %.3f kW" , dec .GridExport )
590590 }
591- t .Logf (" Hour %2d: DISCHARGED %.3f kW at price € %.5f/kWh (SOC: %.3f)%s" ,
591+ t .Logf (" Hour %2d: DISCHARGED %.3f kW at price %.5f/kWh (SOC: %.3f)%s" ,
592592 i , dec .BatteryDischarge , dec .ExportPrice , dec .BatterySOC , exported )
593593 }
594594 }
595595 t .Logf ("\n Total charged: %.3f kW, Total discharged: %.3f kW" , chargedTotal , dischargedTotal )
596- t .Logf ("Degradation cost: € %.4f (%.3f kW throughput × € %.2f/kWh)" ,
596+ t .Logf ("Degradation cost: %.4f (%.3f kW throughput × %.2f/kWh)" ,
597597 (chargedTotal + dischargedTotal )* config .BatteryDegradationCost ,
598598 chargedTotal + dischargedTotal ,
599599 config .BatteryDegradationCost )
@@ -617,8 +617,8 @@ func TestOptimize(t *testing.T) {
617617 }
618618 }
619619
620- t .Logf ("Lowest price: € %.5f/kWh at hour %d" , minPrice , minPriceHour )
621- t .Logf ("Highest price: € %.5f/kWh at hour %d" , maxPrice , maxPriceHour )
620+ t .Logf ("Lowest price: %.5f/kWh at hour %d" , minPrice , minPriceHour )
621+ t .Logf ("Highest price: %.5f/kWh at hour %d" , maxPrice , maxPriceHour )
622622
623623 // Check that battery tends to charge during low prices
624624 // (Not strict since it depends on SOC constraints and overall optimization)
0 commit comments