@@ -48,7 +48,7 @@ describe('repair module', () => {
4848
4949 it ( '.startRepairingPrimarySystem(x), .stopRepairingPrimarySystem() affect side effects repair rate and the value of .repairing' , ( ) => {
5050 repair . startRepairingPrimarySystem ( ESystem . JumpDrive ) ;
51- expect ( sideEffects . setRepairRate ) . to . have . been . calledWith ( ESystem . JumpDrive , approx ( PrimarySystem . repairRate ) ) ;
51+ expect ( sideEffects . setRepairRate ) . to . have . been . calledWith ( ESystem . JumpDrive , approx ( repair . getPrimarySystemStatus ( ESystem . JumpDrive ) . repairRate ) ) ;
5252 expect ( repair . repairing ) . to . eql ( ESystem . JumpDrive ) ;
5353 repair . stopRepairingPrimarySystem ( ) ;
5454 expect ( sideEffects . setRepairRate ) . to . have . been . calledWith ( ESystem . JumpDrive , 0 ) ;
@@ -69,49 +69,51 @@ describe('repair module', () => {
6969 expect ( sideEffects . setMaxPower ) . to . have . been . calledWith ( ESystem . Impulse , PrimarySystem . maxOverPower ) ;
7070 sideEffects . setMaxPower . reset ( ) ;
7171 repair . shutdownSwitchBoard ( ESwitchBoard . A2 ) ;
72- expect ( sideEffects . setMaxPower ) . to . have . been . calledWith ( ESystem . Impulse , match . number . and ( match ( ( n : number ) => n <= PrimarySystem . maxSupportedPower ) ) ) ;
73- expect ( sideEffects . setMaxPower ) . to . have . not . been . calledWith ( ESystem . Impulse , PrimarySystem . maxOverPower ) ;
72+ const dependant = EcrModel . switchboardstMap [ ESwitchBoard . A2 ] [ 0 ] ;
73+ expect ( sideEffects . setMaxPower ) . to . have . been . calledWith ( dependant , match . number . and ( match ( ( n : number ) => n <= PrimarySystem . maxSupportedPower ) ) ) ;
74+ expect ( sideEffects . setMaxPower ) . to . have . not . been . calledWith ( dependant , PrimarySystem . maxOverPower ) ;
7475 } ) ;
7576
76- it ( 'When a supporting system2 is offline, the maximum level of a system1’s power will be at most: ' +
77- '100% * number of online supporting systems/ number of supporting systems' , ( ) => {
77+ it ( 'When a supporting system2 is offline, the maximum level of a system1’s power will decrease' , ( ) => {
78+ const dependant = EcrModel . switchboardstMap [ ESwitchBoard . A2 ] [ 0 ] ;
79+ const dependantStatus = repair . getPrimarySystemStatus ( dependant ) ;
80+ expect ( dependantStatus . maxPower ) . to . equal ( PrimarySystem . maxOverPower ) ;
81+
7882 sideEffects . setMaxPower . reset ( ) ;
7983 repair . shutdownSwitchBoard ( ESwitchBoard . A2 ) ;
80- expect ( sideEffects . setMaxPower ) . to . have . been . calledWith ( ESystem . Impulse , approx ( PrimarySystem . maxSupportedPower / 2 ) ) ;
81- sideEffects . setMaxPower . reset ( ) ;
82- repair . shutdownSwitchBoard ( ESwitchBoard . A3 ) ;
83- expect ( sideEffects . setMaxPower ) . to . have . been . calledWith ( ESystem . Impulse , 0 ) ;
84- sideEffects . setMaxPower . reset ( ) ;
85- repair . startupSwitchBoard ( ESwitchBoard . A3 ) ;
86- expect ( sideEffects . setMaxPower ) . to . have . been . calledWith ( ESystem . Impulse , approx ( PrimarySystem . maxSupportedPower / 2 ) ) ;
87- sideEffects . setMaxPower . reset ( ) ;
88- repair . startupSwitchBoard ( ESwitchBoard . A2 ) ;
89- expect ( sideEffects . setMaxPower ) . to . have . been . calledWith ( ESystem . Impulse , PrimarySystem . maxOverPower ) ;
84+ expect ( dependantStatus . maxPower ) . to . be . lessThan ( PrimarySystem . maxSupportedPower ) ;
85+ expect ( sideEffects . setMaxPower ) . to . have . been . calledWith ( dependant , approx ( dependantStatus . maxPower ) ) ;
9086 } ) ;
9187
9288 describe ( 'When a system1 is over-powered' , ( ) => {
9389 let activeCollectorStatus : SwitchBoardStatus ;
90+ const dependant = EcrModel . switchboardstMap [ ESwitchBoard . A2 ] [ 0 ] ;
91+
9492 beforeEach ( ( ) => {
9593 activeCollectorStatus = repair . getSwitchBoardStatus ( ESwitchBoard . A2 ) ;
9694 } ) ;
9795
9896 it ( 'its supporting system2s accumulate overload' , async ( ) => {
99- sideEffects . powerInput . next ( { system : ESystem . Impulse , power : PrimarySystem . maxSupportedPower } ) ;
97+ sideEffects . powerInput . next ( { system : dependant , power : PrimarySystem . maxSupportedPower } ) ;
10098 expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) ) . to . eql ( 0 ) ;
101- sideEffects . powerInput . next ( { system : ESystem . Impulse , power : PrimarySystem . maxSupportedPower * 2 } ) ;
99+ sideEffects . powerInput . next ( { system : dependant , power : PrimarySystem . maxSupportedPower * 2 } ) ;
102100 expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) ) . to . be . gt ( 0 ) ;
103101 } ) . timeout ( 10 * 1000 ) ;
104102
105103 it ( 'The overload rate is linear to the level of extra energy' , async ( ) => {
106- sideEffects . powerInput . next ( { system : ESystem . Impulse , power : PrimarySystem . maxSupportedPower * 1.5 } ) ;
107- expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) , '1.5 power' ) . to . be . approximately ( SwitchBoard . overloadPerMillisecond * 0.5 , SwitchBoard . overloadPerMillisecond * graceFactor ) ;
108- sideEffects . powerInput . next ( { system : ESystem . Impulse , power : PrimarySystem . maxSupportedPower * 2 } ) ;
104+ sideEffects . powerInput . next ( { system : dependant , power : PrimarySystem . maxSupportedPower * 2 } ) ;
105+ const overPower100Percent = await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) ;
106+ expect ( overPower100Percent ) . to . be . greaterThan ( 0 ) ;
107+
108+ sideEffects . powerInput . next ( { system : dependant , power : PrimarySystem . maxSupportedPower * 1.5 } ) ;
109+ expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) , '1.5 power' ) . to . be . approximately ( overPower100Percent * 0.5 , overPower100Percent * graceFactor ) ;
110+ sideEffects . powerInput . next ( { system : dependant , power : PrimarySystem . maxSupportedPower * 2 } ) ;
109111 await Promise . resolve ( ) ;
110- expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) , '2 power' ) . to . be . approximately ( SwitchBoard . overloadPerMillisecond , SwitchBoard . overloadPerMillisecond * graceFactor ) ;
111- sideEffects . powerInput . next ( { system : ESystem . Impulse , power : PrimarySystem . maxSupportedPower * 2.5 } ) ;
112- expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) , '2.5 power' ) . to . be . approximately ( SwitchBoard . overloadPerMillisecond * 1.5 , SwitchBoard . overloadPerMillisecond * graceFactor ) ;
113- sideEffects . powerInput . next ( { system : ESystem . Impulse , power : PrimarySystem . maxSupportedPower * 3 } ) ;
114- expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) , '3 power' ) . to . be . approximately ( SwitchBoard . overloadPerMillisecond * 2 , SwitchBoard . overloadPerMillisecond * graceFactor ) ;
112+ expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) , '2 power' ) . to . be . approximately ( overPower100Percent , overPower100Percent * graceFactor ) ;
113+ sideEffects . powerInput . next ( { system : dependant , power : PrimarySystem . maxSupportedPower * 2.5 } ) ;
114+ expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) , '2.5 power' ) . to . be . approximately ( overPower100Percent * 1.5 , overPower100Percent * graceFactor ) ;
115+ sideEffects . powerInput . next ( { system : dependant , power : PrimarySystem . maxSupportedPower * 3 } ) ;
116+ expect ( await getLinearOverloadDeriviation ( activeCollectorStatus , graceFactor ) , '3 power' ) . to . be . approximately ( overPower100Percent * 2 , overPower100Percent * graceFactor ) ;
115117 } ) . timeout ( 20 * 1000 ) ;
116118 } ) ;
117119
@@ -125,30 +127,26 @@ describe('repair module', () => {
125127 } ) ;
126128
127129 describe ( 'When one or more supporting system2 is in error state' , ( ) => {
130+ const dependant = EcrModel . switchboardstMap [ ESwitchBoard . A2 ] [ 0 ] ;
128131
129132 it ( 'the supported system1 begins accumulating heat (the rate does not change according to the amount of systems in error)' , ( ) => {
130133 repair . setError ( ESwitchBoard . A2 ) ;
131- expect ( sideEffects . setHeatRate ) . to . have . been . calledWith ( ESystem . Impulse , approx ( PrimarySystem . heatOnErrorRate ) ) ;
134+ expect ( sideEffects . setHeatRate ) . to . have . been . calledWith ( dependant , approx ( PrimarySystem . heatOnErrorRate ) ) ;
132135 sideEffects . setRepairRate . reset ( ) ;
133136 repair . setError ( ESwitchBoard . A3 ) ;
134- expect ( sideEffects . setHeatRate ) . to . have . been . calledWith ( ESystem . Impulse , approx ( PrimarySystem . heatOnErrorRate ) ) ;
137+ expect ( sideEffects . setHeatRate ) . to . have . been . calledWith ( dependant , approx ( PrimarySystem . heatOnErrorRate ) ) ;
135138 sideEffects . setRepairRate . reset ( ) ;
136139 repair . shutdownSwitchBoard ( ESwitchBoard . A2 ) ;
137140 repair . shutdownSwitchBoard ( ESwitchBoard . A3 ) ;
138- expect ( sideEffects . setHeatRate ) . to . have . been . calledWith ( ESystem . Impulse , 0 ) ;
141+ expect ( sideEffects . setHeatRate ) . to . have . been . calledWith ( dependant , 0 ) ;
139142 } ) ;
140143
141- it ( 'the repair rate of supported system1 is 50% the normal rate' , ( ) => {
142- repair . startRepairingPrimarySystem ( ESystem . JumpDrive ) ;
143- repair . setError ( ESwitchBoard . B3 ) ;
144- expect ( sideEffects . setRepairRate , `after 1st error` ) . to . have . been . calledWith ( ESystem . JumpDrive , approx ( PrimarySystem . repairRate * 0.5 ) ) ;
145- sideEffects . setRepairRate . reset ( ) ;
146- repair . setError ( ESwitchBoard . A3 ) ;
147- expect ( sideEffects . setRepairRate , `after 2nd error` ) . to . have . been . calledWith ( ESystem . JumpDrive , approx ( PrimarySystem . repairRate * 0.2 ) ) ;
148- sideEffects . setRepairRate . reset ( ) ;
149- repair . shutdownSwitchBoard ( ESwitchBoard . B3 ) ;
150- repair . shutdownSwitchBoard ( ESwitchBoard . A3 ) ;
151- expect ( sideEffects . setRepairRate , `after shutdowns` ) . to . have . been . calledWith ( ESystem . JumpDrive , approx ( PrimarySystem . repairRate ) ) ;
144+ it ( 'the repair rate of supported system1 is lower than the normal rate' , ( ) => {
145+ const depRepairRate = repair . getPrimarySystemStatus ( dependant ) . repairRate ;
146+ repair . startRepairingPrimarySystem ( dependant ) ;
147+ repair . setError ( ESwitchBoard . A2 ) ;
148+ expect ( repair . getPrimarySystemStatus ( dependant ) . repairRate ) . to . be . lessThan ( depRepairRate ) ;
149+ expect ( sideEffects . setRepairRate ) . to . have . been . calledWith ( dependant , approx ( repair . getPrimarySystemStatus ( dependant ) . repairRate ) ) ;
152150 } ) ;
153151 } ) ;
154152} ) ;
0 commit comments