@@ -230,6 +230,149 @@ contract ImpactEvaluatorTest is Test {
230
230
impactEvaluator.setScores (0 , addresses, scores);
231
231
}
232
232
233
+ function test_SetScoresAfterDecreaseMinBalanceForTransfer () public {
234
+ ImpactEvaluator impactEvaluator = new ImpactEvaluator (address (this ));
235
+ vm.deal (payable (address (impactEvaluator)), 100 ether);
236
+
237
+ impactEvaluator.adminAdvanceRound ();
238
+ impactEvaluator.adminAdvanceRound ();
239
+
240
+ address payable [] memory addresses = new address payable [](3 );
241
+ addresses[0 ] = payable (vm.addr (1 ));
242
+ addresses[1 ] = payable (vm.addr (2 ));
243
+ addresses[2 ] = payable (vm.addr (3 ));
244
+ uint [] memory scores = new uint [](3 );
245
+ scores[0 ] = 1 ;
246
+ scores[1 ] = impactEvaluator.MAX_SCORE () - scores[0 ];
247
+ scores[2 ] = 0 ;
248
+
249
+ impactEvaluator.setScores (1 , addresses, scores);
250
+ assertEq (
251
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (1 )),
252
+ false ,
253
+ "participant 0 is not ready "
254
+ );
255
+ assertEq (
256
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (2 )),
257
+ true ,
258
+ "participant 1 is ready "
259
+ );
260
+ assertEq (
261
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (3 )),
262
+ false ,
263
+ "participant 2 is not ready "
264
+ );
265
+
266
+ impactEvaluator.setMinBalanceForTransfer (1 );
267
+ impactEvaluator.adminAdvanceRound ();
268
+
269
+ address payable [] memory addresses2 = new address payable [](4 );
270
+ addresses2[0 ] = payable (vm.addr (1 ));
271
+ addresses2[1 ] = payable (vm.addr (2 ));
272
+ addresses2[2 ] = payable (vm.addr (3 ));
273
+ addresses2[3 ] = payable (0x000000000000000000000000000000000000dEaD );
274
+ uint [] memory scores2 = new uint [](4 );
275
+ scores2[0 ] = 0 ;
276
+ scores2[1 ] = 0 ;
277
+ scores2[2 ] = 0 ;
278
+ scores2[3 ] = impactEvaluator.MAX_SCORE ();
279
+ impactEvaluator.setScores (2 , addresses2, scores2);
280
+ assertEq (
281
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (1 )),
282
+ true ,
283
+ "participant 0 is now ready "
284
+ );
285
+ assertEq (
286
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (2 )),
287
+ true ,
288
+ "participant 1 is still ready "
289
+ );
290
+ assertEq (
291
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (3 )),
292
+ false ,
293
+ "participant 2 is still not ready "
294
+ );
295
+ assertEq (impactEvaluator.readyForTransfer (0 ), vm.addr (2 ));
296
+ assertEq (impactEvaluator.readyForTransfer (1 ), vm.addr (1 ));
297
+ vm.expectRevert ();
298
+ impactEvaluator.readyForTransfer (2 );
299
+ }
300
+
301
+ function test_SetScoresAfterIncreaseMinBalanceForTransfer () public {
302
+ ImpactEvaluator impactEvaluator = new ImpactEvaluator (address (this ));
303
+ vm.deal (payable (address (impactEvaluator)), 100 ether);
304
+
305
+ impactEvaluator.adminAdvanceRound ();
306
+ impactEvaluator.adminAdvanceRound ();
307
+
308
+ address payable [] memory addresses = new address payable [](3 );
309
+ addresses[0 ] = payable (vm.addr (1 ));
310
+ addresses[1 ] = payable (vm.addr (2 ));
311
+ addresses[2 ] = payable (vm.addr (3 ));
312
+ uint [] memory scores = new uint [](3 );
313
+ // The minimum score required to be ready for transfer
314
+ scores[0 ] =
315
+ ((impactEvaluator.MAX_SCORE () *
316
+ impactEvaluator.minBalanceForTransfer ()) /
317
+ impactEvaluator.roundReward ()) +
318
+ 1 ;
319
+ scores[1 ] = 0 ;
320
+ scores[2 ] = impactEvaluator.MAX_SCORE () - scores[0 ];
321
+
322
+ impactEvaluator.setScores (1 , addresses, scores);
323
+ assertEq (
324
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (1 )),
325
+ true ,
326
+ "participant 0 is ready "
327
+ );
328
+ assertEq (
329
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (2 )),
330
+ false ,
331
+ "participant 1 is not ready "
332
+ );
333
+ assertEq (
334
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (3 )),
335
+ true ,
336
+ "participant 2 is ready "
337
+ );
338
+
339
+ impactEvaluator.setMinBalanceForTransfer (1 ether);
340
+ impactEvaluator.adminAdvanceRound ();
341
+
342
+ address payable [] memory addresses2 = new address payable [](4 );
343
+ addresses2[0 ] = payable (vm.addr (1 ));
344
+ addresses2[1 ] = payable (vm.addr (2 ));
345
+ addresses2[2 ] = payable (vm.addr (3 ));
346
+ addresses2[3 ] = payable (0x000000000000000000000000000000000000dEaD );
347
+ uint [] memory scores2 = new uint [](4 );
348
+ scores2[0 ] = 0 ;
349
+ scores2[1 ] = 0 ;
350
+ scores2[2 ] = 0 ;
351
+ scores2[3 ] = impactEvaluator.MAX_SCORE ();
352
+ impactEvaluator.setScores (2 , addresses2, scores2);
353
+
354
+ assertEq (
355
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (1 )),
356
+ true ,
357
+ "participant 0 is still ready, although now below the threshold "
358
+ );
359
+ assertEq (
360
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (2 )),
361
+ false ,
362
+ "participant 1 is still not ready "
363
+ );
364
+ assertEq (
365
+ impactEvaluator.participantIsReadyForTransfer (vm.addr (3 )),
366
+ true ,
367
+ "participant 2 is still ready "
368
+ );
369
+
370
+ assertEq (impactEvaluator.readyForTransfer (0 ), vm.addr (1 ));
371
+ assertEq (impactEvaluator.readyForTransfer (1 ), vm.addr (3 ));
372
+ vm.expectRevert ();
373
+ impactEvaluator.readyForTransfer (2 );
374
+ }
375
+
233
376
function test_AdvanceRoundCleanUp () public {
234
377
ImpactEvaluator impactEvaluator = new ImpactEvaluator (address (this ));
235
378
@@ -472,18 +615,12 @@ contract ImpactEvaluatorTest is Test {
472
615
scores[0 ] = impactEvaluator.MAX_SCORE () / 2 ;
473
616
scores[1 ] = impactEvaluator.MAX_SCORE () / 2 ;
474
617
impactEvaluator.setScores (1 , addresses, scores);
475
- assertEq (
476
- impactEvaluator.balanceHeld (),
477
- 100 ether
478
- );
618
+ assertEq (impactEvaluator.balanceHeld (), 100 ether);
479
619
480
620
impactEvaluator.adminAdvanceRound ();
481
621
addresses[0 ] = payable (0x000000000000000000000000000000000000dEaD );
482
622
impactEvaluator.setScores (2 , addresses, scores);
483
- assertEq (
484
- impactEvaluator.balanceHeld (),
485
- 100 ether
486
- );
623
+ assertEq (impactEvaluator.balanceHeld (), 100 ether);
487
624
488
625
impactEvaluator.releaseRewards ();
489
626
assertEq (impactEvaluator.balanceHeld (), 100 ether);
@@ -505,18 +642,12 @@ contract ImpactEvaluatorTest is Test {
505
642
uint [] memory scores = new uint [](1 );
506
643
scores[0 ] = impactEvaluator.MAX_SCORE ();
507
644
impactEvaluator.setScores (1 , addresses, scores);
508
- assertEq (
509
- impactEvaluator.availableBalance (),
510
- 0 ether
511
- );
645
+ assertEq (impactEvaluator.availableBalance (), 0 ether);
512
646
513
647
impactEvaluator.adminAdvanceRound ();
514
648
addresses[0 ] = payable (0x000000000000000000000000000000000000dEaD );
515
649
impactEvaluator.setScores (2 , addresses, scores);
516
- assertEq (
517
- impactEvaluator.availableBalance (),
518
- 0 ether
519
- );
650
+ assertEq (impactEvaluator.availableBalance (), 0 ether);
520
651
521
652
impactEvaluator.releaseRewards ();
522
653
assertEq (impactEvaluator.availableBalance (), 0 );
@@ -633,9 +764,9 @@ contract ImpactEvaluatorTest is Test {
633
764
balances[1 ] = 50 ether ;
634
765
635
766
vm.expectRevert ("Sum of balances must match msg.value " );
636
- impactEvaluator.addBalances { value: 0 }(addresses, balances);
767
+ impactEvaluator.addBalances {value: 0 }(addresses, balances);
637
768
638
- impactEvaluator.addBalances { value: 100 ether }(addresses, balances);
769
+ impactEvaluator.addBalances {value: 100 ether }(addresses, balances);
639
770
assertEq (
640
771
impactEvaluator.rewardsScheduledFor (addresses[0 ]),
641
772
50 ether,
@@ -664,7 +795,7 @@ contract ImpactEvaluatorTest is Test {
664
795
addresses[0 ] = payable (vm.addr (1 ));
665
796
uint [] memory balances = new uint [](2 );
666
797
balances[0 ] = 100 ether ;
667
- impactEvaluator.addBalances { value: 100 ether }(addresses, balances);
798
+ impactEvaluator.addBalances {value: 100 ether }(addresses, balances);
668
799
669
800
impactEvaluator.withdraw (payable (vm.addr (1 )));
670
801
@@ -691,4 +822,21 @@ contract ImpactEvaluatorTest is Test {
691
822
692
823
assertEq (vm.addr (1 ).balance, 0 );
693
824
}
825
+
826
+ function test_ParticipantIsReadyForTransfer () public {
827
+ ImpactEvaluator impactEvaluator = new ImpactEvaluator (address (this ));
828
+ address payable [] memory addresses = new address payable [](2 );
829
+ addresses[0 ] = payable (vm.addr (1 ));
830
+ addresses[1 ] = payable (vm.addr (2 ));
831
+ uint [] memory balances = new uint [](2 );
832
+ balances[0 ] = 50 ether ;
833
+ balances[1 ] = impactEvaluator.minBalanceForTransfer () / 2 ;
834
+ impactEvaluator.addBalances {value: balances[0 ] + balances[1 ]}(addresses, balances);
835
+
836
+ assert (impactEvaluator.participantIsReadyForTransfer (vm.addr (1 )));
837
+ assert (! impactEvaluator.participantIsReadyForTransfer (vm.addr (2 )));
838
+ assert (
839
+ ! impactEvaluator.participantIsReadyForTransfer (payable (vm.addr (3 )))
840
+ );
841
+ }
694
842
}
0 commit comments