@@ -69,12 +69,76 @@ public void TestTwoHitsPerSecond()
6969 Console . WriteLine ( limit ) ;
7070
7171 // observe why this may break the build
72- var finalTimeCheck = DateTime . UtcNow ;
72+ var finalTimeCheck = DateTime . UtcNow ;
7373 Console . WriteLine ( $ " ExecTime diff { finalTimeCheck . Subtract ( timeCheck ) . TotalMilliseconds } ms") ;
7474 Console . WriteLine ( $ "TimeCheck diff { finalTimeCheck . Subtract ( twoSecondsLater ) . TotalMilliseconds } ms") ;
75- Assert . IsTrue ( finalTimeCheck . Subtract ( timeCheck ) . TotalMilliseconds > 2000 , $ "ExecTime diff { finalTimeCheck . Subtract ( timeCheck ) . TotalMilliseconds } ms") ;
75+ Assert . IsTrue ( finalTimeCheck . Subtract ( timeCheck ) . TotalMilliseconds > 2000 , $ "ExecTime diff { finalTimeCheck . Subtract ( timeCheck ) . TotalMilliseconds } ms") ;
7676 }
77+
78+
79+ [ TestMethod ]
80+ public async Task TestMaxSpeed_NoLimits_Async ( )
81+ {
82+ // allow unlimited fires instantly
83+ var limit = RateLimiter . Create ( ) ;
84+ Assert . IsTrue ( limit . CanFire ( ) ) ;
85+ await limit . WaitFireAsync ( ) ;
86+ await limit . WaitFireAsync ( ) ;
87+ await limit . WaitFireAsync ( ) ;
88+ await limit . WaitFireAsync ( ) ;
89+ await limit . WaitFireAsync ( ) ;
90+ await limit . WaitFireAsync ( ) ;
91+ await limit . WaitFireAsync ( ) ;
92+ }
93+
94+ [ TestMethod ]
95+ public async Task TestMaxSpeed_WithinLimits_Async ( )
96+ {
97+ // allow unlimited fires instantly
98+ var limit = RateLimiter . Create ( ) . AllowHits ( 100 ) . PerSeconds ( 10 ) ;
99+ Assert . IsTrue ( limit . CanFire ( ) ) ;
100+ await limit . WaitFireAsync ( ) ;
101+ await limit . WaitFireAsync ( ) ;
102+ await limit . WaitFireAsync ( ) ;
103+ await limit . WaitFireAsync ( ) ;
104+ await limit . WaitFireAsync ( ) ;
105+ await limit . WaitFireAsync ( ) ;
106+ await limit . WaitFireAsync ( ) ;
107+ await limit . WaitFireAsync ( ) ;
108+ await limit . WaitFireAsync ( ) ;
109+ }
110+
111+ [ TestMethod ]
112+ public async Task TestTwoHitsPerSecond_Async ( )
113+ {
114+ // allow 2 hits per second
115+ var timeCheck = DateTime . UtcNow ;
116+ var limit = RateLimiter . Create ( ) . AllowHits ( 2 ) . PerSeconds ( 1 ) ;
117+ var twoSecondsLater = timeCheck . AddSeconds ( 2 ) ;
118+ Console . WriteLine ( limit ) ;
119+ Assert . IsTrue ( limit . CanFire ( ) ) ;
120+ Console . WriteLine ( limit ) ;
121+ await limit . WaitFireAsync ( ) ;
122+ Console . WriteLine ( limit ) ;
123+ await limit . WaitFireAsync ( ) ;
124+ Console . WriteLine ( limit ) ;
125+ await limit . WaitFireAsync ( ) ;
126+ Console . WriteLine ( limit ) ;
127+ await limit . WaitFireAsync ( ) ;
128+ Console . WriteLine ( limit ) ;
129+ await limit . WaitFireAsync ( ) ;
130+ Console . WriteLine ( limit ) ;
131+ await limit . WaitFireAsync ( ) ;
132+ Console . WriteLine ( limit ) ;
133+ await limit . WaitFireAsync ( ) ;
134+ Console . WriteLine ( limit ) ;
77135
136+ // observe why this may break the build
137+ var finalTimeCheck = DateTime . UtcNow ;
138+ Console . WriteLine ( $ " ExecTime diff { finalTimeCheck . Subtract ( timeCheck ) . TotalMilliseconds } ms") ;
139+ Console . WriteLine ( $ "TimeCheck diff { finalTimeCheck . Subtract ( twoSecondsLater ) . TotalMilliseconds } ms") ;
140+ Assert . IsTrue ( finalTimeCheck . Subtract ( timeCheck ) . TotalMilliseconds > 2000 , $ "ExecTime diff { finalTimeCheck . Subtract ( timeCheck ) . TotalMilliseconds } ms") ;
141+ }
78142 }
79143
80144}
0 commit comments