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 }