Skip to content
This repository was archived by the owner on Dec 17, 2025. It is now read-only.

Commit 0a78bb4

Browse files
authored
Merge pull request #6 from morpho-labs/refactor/mocks
Refactor: Concrete into mocks
2 parents 9365e59 + 34e457e commit 0a78bb4

14 files changed

Lines changed: 49 additions & 54 deletions

hardhat.config.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ module.exports = {
2121
},
2222
},
2323
paths: {
24-
sources: './src',
24+
sources: './test-ts',
2525
tests: './test-ts',
2626
},
2727
etherscan: {
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// SPDX-License-Identifier: AGPL-3.0-only
22
pragma solidity ^0.8.0;
33

4-
import "../RedBlackBinaryTree.sol";
4+
import "src/RedBlackBinaryTree.sol";
55

6-
contract TestRedBlackBinaryTree {
6+
contract RedBlackBinaryTreeMock {
77
using RedBlackBinaryTree for RedBlackBinaryTree.Tree;
88

99
RedBlackBinaryTree.Tree public tree;

src/test/TestRedBlackBinaryTreeOptimized.sol renamed to test-ts/mocks/RedBlackBinaryTreeOptimizedMock.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
// SPDX-License-Identifier: AGPL-3.0-only
22
pragma solidity ^0.8.0;
33

4-
import "../RedBlackBinaryTreeOptimized.sol";
4+
import "src/RedBlackBinaryTreeOptimized.sol";
55

6-
contract TestRedBlackBinaryTreeOptimized {
6+
contract RedBlackBinaryTreeOptimizedMock {
77
using RedBlackBinaryTreeOptimized for RedBlackBinaryTreeOptimized.Tree;
88

99
RedBlackBinaryTreeOptimized.Tree public tree;

test-ts/test-print-tree.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,12 @@ describe('Test RedBlackBinaryTree Library', () => {
1111
redBlackBinaryTree = await RedBlackBinaryTree.deploy();
1212
await redBlackBinaryTree.deployed();
1313

14-
const TestRedBlackBinaryTree = await ethers.getContractFactory('TestRedBlackBinaryTree', {
14+
const RedBlackBinaryTreeMock = await ethers.getContractFactory('RedBlackBinaryTreeMock', {
1515
libraries: {
1616
RedBlackBinaryTree: redBlackBinaryTree.address,
1717
},
1818
});
19-
testRedBlackBinaryTree = await TestRedBlackBinaryTree.deploy();
19+
testRedBlackBinaryTree = await RedBlackBinaryTreeMock.deploy();
2020
await testRedBlackBinaryTree.deployed();
2121
});
2222

test-ts/test-red-black-binary-tree.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ describe('Test RedBlackBinaryTreeOptimized Library', () => {
1919
const redBlackBinaryTreeOptimized = await RedBlackBinaryTreeOptimized.deploy();
2020
await redBlackBinaryTreeOptimized.deployed();
2121

22-
const TestRedBlackBinaryTreeOptimized = await ethers.getContractFactory('TestRedBlackBinaryTreeOptimized', {
22+
const RedBlackBinaryTreeOptimizedMock = await ethers.getContractFactory('RedBlackBinaryTreeOptimizedMock', {
2323
libraries: {
2424
RedBlackBinaryTreeOptimized: redBlackBinaryTreeOptimized.address,
2525
},
2626
});
27-
testRedBlackBinaryTreeOptimized = await TestRedBlackBinaryTreeOptimized.deploy();
27+
testRedBlackBinaryTreeOptimized = await RedBlackBinaryTreeOptimizedMock.deploy();
2828
await testRedBlackBinaryTreeOptimized.deployed();
2929
});
3030

test/TestCommonHeapOrdering.t.sol

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,10 @@
11
// SPDX-License-Identifier: AGPL-3.0-only
22
pragma solidity ^0.8.0;
33

4-
import "forge-std/Test.sol";
5-
import "forge-std/console.sol";
6-
74
import "src/HeapOrdering.sol";
8-
import "./helpers/IConcreteHeapOrdering.sol";
9-
10-
abstract contract TestCommonHeapOrdering is Test {
11-
IConcreteHeapOrdering internal heap;
5+
import "./helpers/RandomHeap.sol";
126

7+
abstract contract TestCommonHeapOrdering is RandomHeap {
138
address[] public accounts;
149
uint256 public NB_ACCOUNTS = 50;
1510
uint256 public MAX_SORTED_USERS = 50;
@@ -31,6 +26,28 @@ abstract contract TestCommonHeapOrdering is Test {
3126
}
3227
}
3328

29+
// Should give elements in decreasing order if maxSortedUsers is +infinity.
30+
function testFullHeapSort() public {
31+
maxSortedUsers = n;
32+
for (uint256 i; i < n; i++) {
33+
if (ids.length == 0) insert();
34+
else {
35+
uint256 r = randomUint256(5);
36+
if (r < 2) insert();
37+
else if (r == 2) remove();
38+
else if (r == 3) increase();
39+
else decrease();
40+
}
41+
}
42+
43+
uint256 lastValue = type(uint256).max;
44+
uint256 newValue;
45+
while ((newValue = removeHead()) != 0) {
46+
require(newValue <= lastValue, "Elements are not given back in a decreasing order.");
47+
lastValue = newValue;
48+
}
49+
}
50+
3451
function testEmpty() public {
3552
assertEq(heap.size(), 0);
3653
assertEq(heap.length(), 0);

test/TestHeapOrdering.t.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
pragma solidity ^0.8.0;
33

44
import "./TestCommonHeapOrdering.t.sol";
5-
import "./helpers/ConcreteHeapOrdering.sol";
5+
import "./mocks/HeapOrderingMock.sol";
66

77
contract TestHeapOrdering is TestCommonHeapOrdering {
88
constructor() {
9-
heap = new ConcreteHeapOrdering();
9+
heap = new HeapOrderingMock();
1010
}
1111

1212
function testComputeSizeSmall() public {

test/TestHeapOrderingInvariant.t.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ pragma solidity ^0.8.0;
44
import "forge-std/Test.sol";
55
import "forge-std/console.sol";
66

7-
import "./helpers/ConcreteHeapOrdering.sol";
7+
import "./mocks/HeapOrderingMock.sol";
88

9-
contract Heap is ConcreteHeapOrdering {
9+
contract Heap is HeapOrderingMock {
1010
using HeapOrdering for HeapOrdering.HeapArray;
1111

1212
uint256 public MAX_SORTED_USERS = 16;

test/TestThreeHeapOrdering.t.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22
pragma solidity ^0.8.0;
33

44
import "./TestCommonHeapOrdering.t.sol";
5-
import "./helpers/ConcreteThreeHeapOrdering.sol";
5+
import "./mocks/ThreeHeapOrderingMock.sol";
66

77
contract TestThreeHeapOrdering is TestCommonHeapOrdering {
88
constructor() {
9-
heap = new ConcreteThreeHeapOrdering();
9+
heap = new ThreeHeapOrderingMock();
1010
}
1111

1212
function testComputeSizeSmall() public {

test/TestThreeHeapOrderingInvariant.t.sol

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,9 @@ pragma solidity ^0.8.0;
44
import "forge-std/Test.sol";
55
import "forge-std/console.sol";
66

7-
import "./helpers/ConcreteThreeHeapOrdering.sol";
7+
import "./mocks/ThreeHeapOrderingMock.sol";
88

9-
contract Heap is ConcreteThreeHeapOrdering {
9+
contract Heap is ThreeHeapOrderingMock {
1010
using ThreeHeapOrdering for ThreeHeapOrdering.HeapArray;
1111

1212
uint256 public MAX_SORTED_USERS = 16;

0 commit comments

Comments
 (0)