/ test / feeds / ChainlinkFeed / TestBinarySearch.t.sol
TestBinarySearch.t.sol
  1  pragma solidity >=0.6.0;
  2  
  3  import "truffle/Assert.sol";
  4  import "./Base.t.sol";
  5  
  6  contract TestBinarySearch is Base {
  7  
  8      uint e = 1;
  9      uint step = 10;
 10  
 11      function testBinarySearchExact() public {
 12  
 13          initialize();
 14          
 15          (, price, cached) = feed.getPriceCached(1 days + e);
 16          Assert.equal(price, prices[0], "getPriceCached 1");
 17          Assert.isFalse(cached, "cached 1");
 18  
 19          (, price, cached) = feed.getPriceCached(2 days + e);
 20          Assert.equal(price, prices[1], "getPriceCached 2");
 21          Assert.isFalse(cached, "cached 2");
 22  
 23          (, price, cached) = feed.getPriceCached(3 days + e);
 24          Assert.equal(price, prices[2], "getPriceCached 3");
 25          Assert.isFalse(cached, "cached 3");
 26  
 27          (, price, cached) = feed.getPriceCached(4 days + e);
 28          Assert.equal(price, prices[3], "getPriceCached 4");
 29          Assert.isFalse(cached, "cached 4");
 30  
 31          (, price, cached) = feed.getPriceCached(5 days + e);
 32          Assert.equal(price, prices[4], "getPriceCached 5");
 33          Assert.isFalse(cached, "cached 5");
 34  
 35          (, price, cached) = feed.getPriceCached(6 days + e);
 36          Assert.equal(price, prices[5], "getPriceCached 6");
 37          Assert.isFalse(cached, "cached 6");
 38  
 39          (, price, cached) = feed.getPriceCached(7 days + e);
 40          Assert.equal(price, prices[6], "getPriceCached 7");
 41          Assert.isFalse(cached, "cached 7");
 42  
 43          (, price, cached) = feed.getPriceCached(8 days + e);
 44          Assert.equal(price, prices[7], "getPriceCached 8");
 45          Assert.isFalse(cached, "cached 8");
 46  
 47          (, price, cached) = feed.getPriceCached(9 days + e);
 48          Assert.equal(price, prices[8], "getPriceCached 9");
 49          Assert.isFalse(cached, "cached 9");
 50  
 51          (, price, cached) = feed.getPriceCached(10 days + e);
 52          Assert.equal(price, prices[9], "getPriceCached 10");
 53          Assert.isFalse(cached, "cached 10");
 54      }
 55  
 56      function testBinarySearchNotExact() public {
 57  
 58          initialize();
 59  
 60          (, price, cached) = feed.getPriceCached(1 days + step);
 61          Assert.equal(price, prices[1], "getPriceCached 2");
 62          Assert.isFalse(cached, "cached 2");
 63  
 64          (, price, cached) = feed.getPriceCached(3 days - step);
 65          Assert.equal(price, prices[2], "getPriceCached 3");
 66          Assert.isFalse(cached, "cached 3");
 67  
 68          (, price, cached) = feed.getPriceCached(3 days + step);
 69          Assert.equal(price, prices[3], "getPriceCached 4");
 70          Assert.isFalse(cached, "cached 4");
 71  
 72          (, price, cached) = feed.getPriceCached(5 days - step);
 73          Assert.equal(price, prices[4], "getPriceCached 5");
 74          Assert.isFalse(cached, "cached 5");
 75  
 76          (, price, cached) = feed.getPriceCached(5 days + step);
 77          Assert.equal(price, prices[5], "getPriceCached 6");
 78          Assert.isFalse(cached, "cached 6");
 79  
 80          (, price, cached) = feed.getPriceCached(7 days - step);
 81          Assert.equal(price, prices[6], "getPriceCached 7");
 82          Assert.isFalse(cached, "cached 7");
 83  
 84          (, price, cached) = feed.getPriceCached(7 days + step);
 85          Assert.equal(price, prices[7], "getPriceCached 8");
 86          Assert.isFalse(cached, "cached 8");
 87      }
 88  
 89      function testInvalidInitialPosition() public {
 90  
 91          initialize();
 92  
 93          (bool success,) = address(feed).call(
 94              abi.encodePacked(
 95                  feed.getPriceCached.selector,
 96                  abi.encode(1 days - step)
 97              )
 98          );
 99          
100          Assert.isFalse(success, "getPriceCached should fail");
101      }
102  
103      function testInvalidFinalPosition() public {
104  
105          initialize();
106  
107          (bool success,) = address(feed).call(
108              abi.encodePacked(
109                  feed.getPriceCached.selector,
110                  abi.encode(10 days + step)
111              )
112          );
113          
114          Assert.isFalse(success, "getPriceCached should fail");
115      }
116  
117      function initialize() private {
118  
119          for (uint i = 0; i < updatedAts.length; i ++) {
120              updatedAts[i] += e; // to prevent caching
121          }
122          feed.initialize(updatedAts, prices);
123      }
124  }