github.com/MetalBlockchain/metalgo@v1.11.9/vms/platformvm/txs/validator_test.go (about)

     1  // Copyright (C) 2019-2024, Ava Labs, Inc. All rights reserved.
     2  // See the file LICENSE for licensing terms.
     3  
     4  package txs
     5  
     6  import (
     7  	"testing"
     8  
     9  	"github.com/stretchr/testify/require"
    10  
    11  	"github.com/MetalBlockchain/metalgo/ids"
    12  )
    13  
    14  const defaultWeight = 10000
    15  
    16  func TestBoundedBy(t *testing.T) {
    17  	require := require.New(t)
    18  
    19  	nodeID := ids.GenerateTestNodeID()
    20  
    21  	// case 1: a starts, a finishes, b starts, b finishes
    22  	aStartTime := uint64(0)
    23  	aEndTIme := uint64(1)
    24  	a := &Validator{
    25  		NodeID: nodeID,
    26  		Start:  aStartTime,
    27  		End:    aEndTIme,
    28  		Wght:   defaultWeight,
    29  	}
    30  
    31  	bStartTime := uint64(2)
    32  	bEndTime := uint64(3)
    33  	b := &Validator{
    34  		NodeID: nodeID,
    35  		Start:  bStartTime,
    36  		End:    bEndTime,
    37  		Wght:   defaultWeight,
    38  	}
    39  	require.False(BoundedBy(a.StartTime(), a.EndTime(), b.StartTime(), b.EndTime()))
    40  	require.False(BoundedBy(b.StartTime(), b.EndTime(), a.StartTime(), a.EndTime()))
    41  
    42  	// case 2: a starts, b starts, a finishes, b finishes
    43  	a.Start = 0
    44  	b.Start = 1
    45  	a.End = 2
    46  	b.End = 3
    47  	require.False(BoundedBy(a.StartTime(), a.EndTime(), b.StartTime(), b.EndTime()))
    48  	require.False(BoundedBy(b.StartTime(), b.EndTime(), a.StartTime(), a.EndTime()))
    49  
    50  	// case 3: a starts, b starts, b finishes, a finishes
    51  	a.Start = 0
    52  	b.Start = 1
    53  	b.End = 2
    54  	a.End = 3
    55  	require.False(BoundedBy(a.StartTime(), a.EndTime(), b.StartTime(), b.EndTime()))
    56  	require.True(BoundedBy(b.StartTime(), b.EndTime(), a.StartTime(), a.EndTime()))
    57  
    58  	// case 4: b starts, a starts, a finishes, b finishes
    59  	b.Start = 0
    60  	a.Start = 1
    61  	a.End = 2
    62  	b.End = 3
    63  	require.True(BoundedBy(a.StartTime(), a.EndTime(), b.StartTime(), b.EndTime()))
    64  	require.False(BoundedBy(b.StartTime(), b.EndTime(), a.StartTime(), a.EndTime()))
    65  
    66  	// case 5: b starts, b finishes, a starts, a finishes
    67  	b.Start = 0
    68  	b.End = 1
    69  	a.Start = 2
    70  	a.End = 3
    71  	require.False(BoundedBy(a.StartTime(), a.EndTime(), b.StartTime(), b.EndTime()))
    72  	require.False(BoundedBy(b.StartTime(), b.EndTime(), a.StartTime(), a.EndTime()))
    73  
    74  	// case 6: b starts, a starts, b finishes, a finishes
    75  	b.Start = 0
    76  	a.Start = 1
    77  	b.End = 2
    78  	a.End = 3
    79  	require.False(BoundedBy(a.StartTime(), a.EndTime(), b.StartTime(), b.EndTime()))
    80  	require.False(BoundedBy(b.StartTime(), b.EndTime(), a.StartTime(), a.EndTime()))
    81  
    82  	// case 3: a starts, b starts, b finishes, a finishes
    83  	a.Start = 0
    84  	b.Start = 0
    85  	b.End = 1
    86  	a.End = 1
    87  	require.True(BoundedBy(a.StartTime(), a.EndTime(), b.StartTime(), b.EndTime()))
    88  	require.True(BoundedBy(b.StartTime(), b.EndTime(), a.StartTime(), a.EndTime()))
    89  }