package registry_test

import (
	"testing"

	"github.com/ethereum/go-ethereum/precompile/modules"
	"github.com/stretchr/testify/assert"
)

// TestRegisteredPrecompiles asserts precompiles are registered
//
// In addition, this serves as an integration test to
//  1. Ensure modules.RegisteredModules() is returning addresses in the correct ascending order
//  2. Ensure that that the address defined in the module is correct. Since we use common.HexToAddress and
//     then back to 0x encoded string, we can be certain that the string defined in the module is the
//     expected length, not missing 0's, etc.
func TestRegisteredPrecompilesAddresses(t *testing.T) {
	// build list of 0x addresses that are registered
	registeredModules := modules.RegisteredModules()
	registeredPrecompiles := make([]string, 0, len(registeredModules))
	for _, rp := range registeredModules {
		registeredPrecompiles = append(registeredPrecompiles, rp.Address.String())
	}

	expectedPrecompiles := []string{
		// 0x9 address space used for e2e & integration tests
		"0x9000000000000000000000000000000000000001", // noop
		"0x9000000000000000000000000000000000000002", // noop (duplicated for testing)
	}

	assert.Equal(t, expectedPrecompiles, registeredPrecompiles,
		"expected registered precompile address list to match to match expected")
}