tree_test.go 2.64 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11
package transform

import (
	"math"
	"math/big"
	"testing"

	"github.com/ethereum/go-ethereum/common"
	"github.com/stretchr/testify/require"

	"github.com/ethereum-optimism/optimism/op-challenger/game/fault/types"
12
	monTypes "github.com/ethereum-optimism/optimism/op-dispute-mon/mon/types"
13 14 15 16 17 18 19 20
)

func TestResolver_CreateBidirectionalTree(t *testing.T) {
	t.Run("SingleClaim", func(t *testing.T) {
		claims := createDeepClaimList()[:1]
		claims[0].CounteredBy = common.Address{}
		tree := CreateBidirectionalTree(claims)
		require.Len(t, tree.Claims, 1)
21
		require.Equal(t, claims[0].Claim, *tree.Claims[0].Claim)
22 23 24 25 26 27 28 29
		require.Empty(t, tree.Claims[0].Children)
	})

	t.Run("MultipleClaims", func(t *testing.T) {
		claims := createDeepClaimList()[:2]
		claims[1].CounteredBy = common.Address{}
		tree := CreateBidirectionalTree(claims)
		require.Len(t, tree.Claims, 2)
30
		require.Equal(t, claims[0].Claim, *tree.Claims[0].Claim)
31
		require.Len(t, tree.Claims[0].Children, 1)
32 33
		require.Equal(t, claims[1].Claim, *tree.Claims[0].Children[0].Claim)
		require.Equal(t, claims[1].Claim, *tree.Claims[1].Claim)
34 35 36 37 38 39 40
		require.Empty(t, tree.Claims[1].Children)
	})

	t.Run("MultipleClaimsAndChildren", func(t *testing.T) {
		claims := createDeepClaimList()
		tree := CreateBidirectionalTree(claims)
		require.Len(t, tree.Claims, 3)
41
		require.Equal(t, claims[0].Claim, *tree.Claims[0].Claim)
42 43
		require.Len(t, tree.Claims[0].Children, 1)
		require.Equal(t, tree.Claims[0].Children[0], tree.Claims[1])
44
		require.Equal(t, claims[1].Claim, *tree.Claims[1].Claim)
45 46
		require.Len(t, tree.Claims[1].Children, 1)
		require.Equal(t, tree.Claims[1].Children[0], tree.Claims[2])
47
		require.Equal(t, claims[2].Claim, *tree.Claims[2].Claim)
48 49 50 51
		require.Empty(t, tree.Claims[2].Children)
	})
}

52 53
func createDeepClaimList() []monTypes.EnrichedClaim {
	return []monTypes.EnrichedClaim{
54
		{
55 56 57 58 59 60 61 62
			Claim: types.Claim{
				ClaimData: types.ClaimData{
					Position: types.NewPosition(0, big.NewInt(0)),
				},
				ContractIndex:       0,
				CounteredBy:         common.HexToAddress("0x222222"),
				ParentContractIndex: math.MaxInt64,
				Claimant:            common.HexToAddress("0x111111"),
63 64 65
			},
		},
		{
66 67 68 69 70 71 72 73
			Claim: types.Claim{
				ClaimData: types.ClaimData{
					Position: types.NewPosition(1, big.NewInt(0)),
				},
				CounteredBy:         common.HexToAddress("0x111111"),
				ContractIndex:       1,
				ParentContractIndex: 0,
				Claimant:            common.HexToAddress("0x222222"),
74 75 76
			},
		},
		{
77 78 79 80 81 82 83
			Claim: types.Claim{
				ClaimData: types.ClaimData{
					Position: types.NewPosition(2, big.NewInt(0)),
				},
				ContractIndex:       2,
				ParentContractIndex: 1,
				Claimant:            common.HexToAddress("0x111111"),
84 85 86 87
			},
		},
	}
}