Skip to content

Commit

Permalink
new test
Browse files Browse the repository at this point in the history
  • Loading branch information
winsvega committed Oct 22, 2024
1 parent a61c0d8 commit e4aaedd
Show file tree
Hide file tree
Showing 4 changed files with 137 additions and 17 deletions.
8 changes: 6 additions & 2 deletions .github/actions/build-evm-client/evmone/action.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@ inputs:
description: 'Reference to branch, commit, or tag to use to build the EVM binary'
required: true
default: 'master'
targets:
description: 'Which targets to build from evmone repo'
required: false
default: 'all'
runs:
using: "composite"
steps:
Expand All @@ -27,5 +31,5 @@ runs:
mkdir -p $GITHUB_WORKSPACE/bin
cd $GITHUB_WORKSPACE/evmone
cmake -S . -B build -DEVMONE_TESTING=ON
cmake --build build --parallel
echo $GITHUB_WORKSPACE/evmone/build/bin/ >> $GITHUB_PATH
cmake --build build --parallel --target ${{ inputs.targets }}
echo $GITHUB_WORKSPACE/evmone/build/bin/ >> $GITHUB_PATH
40 changes: 25 additions & 15 deletions .github/workflows/coverage.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ jobs:
echo "Git reference: ${{ github.ref }}"
echo "Git head ref: ${{ github.head_ref }}"
echo "Git base ref: ${{ github.base_ref }}"
echo "Node Version: $(node -v)"
echo "NPM Version: $(npm -v)"
- name: Get all changed python files in tests/ and changes to coverted-ethereum-tests.txt
id: changed-tests
Expand Down Expand Up @@ -89,6 +92,7 @@ jobs:
id: evm-builder2
with:
type: "main"
targets: "evmone-t8n"

- name: Checkout ethereum/tests
uses: actions/checkout@v4
Expand Down Expand Up @@ -175,7 +179,9 @@ jobs:
mkdir -p fixtures/state_tests
mkdir -p fixtures/eof_tests
uv run fill $files -n auto --until=Cancun --evm-bin evmone-t8n || true >> filloutput.log 2>&1
echo "uv run fill $files --until=Cancun --evm-bin evmone-t8n >> filloutput.log 2>&1"
uv run fill $files --until=Cancun --evm-bin evmone-t8n >> filloutput.log 2>&1
cat filloutput.log
if grep -q "FAILURES" filloutput.log; then
echo "Error: failed to generate .py tests."
Expand Down Expand Up @@ -229,7 +235,9 @@ jobs:
mkdir -p fixtures/eof_tests
if [ -n "$files_fixed" ]; then
uv run fill $files_fixed -n auto --until=Cancun --evm-bin evmone-t8n || true >> filloutput.log 2>&1
echo "uv run fill $files_fixed --until=Cancun --evm-bin evmone-t8n >> filloutput.log 2>&1"
uv run fill $files_fixed --until=Cancun --evm-bin evmone-t8n >> filloutput.log 2>&1
cat filloutput.log
if grep -q "FAILURES" filloutput.log; then
echo "Error: failed to generate .py tests from before the PR."
Expand All @@ -240,21 +248,23 @@ jobs:
echo "Error: failed to generate .py tests from before the PR."
exit 1
fi
filesState=$(find fixtures/state_tests -type f -name "*.json")
filesEOF=$(find fixtures/eof_tests -type f -name "*.json")
BASE_TEST_PATH=${{ github.workspace }}/evmtest_coverage/coverage/BASE_TESTS
mkdir -p $BASE_TEST_PATH
find fixtures/state_tests -type f -name "*.json" -exec cp {} $BASE_TEST_PATH \;
find fixtures/eof_tests -type f -name "*.json" -exec cp {} $BASE_TEST_PATH \;
for file in $BASE_TEST_PATH/*.json; do
if [ -e "$file" ]; then
mv "$file" "${file%.json}_$PREV_COMMIT.json"
fi
done
else
echo "No tests affected from before patch!"
fi
filesState=$(find fixtures/state_tests -type f -name "*.json")
filesEOF=$(find fixtures/eof_tests -type f -name "*.json")
BASE_TEST_PATH=${{ github.workspace }}/evmtest_coverage/coverage/BASE_TESTS
mkdir -p $BASE_TEST_PATH
find fixtures/state_tests -type f -name "*.json" -exec cp {} $BASE_TEST_PATH \;
find fixtures/eof_tests -type f -name "*.json" -exec cp {} $BASE_TEST_PATH \;
for file in $BASE_TEST_PATH/*.json; do
if [ -e "$file" ]; then
mv "$file" "${file%.json}_$PREV_COMMIT.json"
fi
done
- name: Print tests that will be covered
if: ${{ steps.changed-tests.outputs.tests_any_changed == 'true' }}
run: |
Expand Down
1 change: 1 addition & 0 deletions tests/frontier/opcodes/test_dup.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
"""
touch
abstract: Test DUP
Test the DUP opcodes.
Expand Down
105 changes: 105 additions & 0 deletions tests/frontier/opcodes/test_newl.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
"""
abstract: Test DUP
Test the DUP opcodes.
"""

import pytest

from ethereum_test_forks import Frontier, Homestead
from ethereum_test_tools import Account, Alloc, Environment
from ethereum_test_tools import Opcodes as Op
from ethereum_test_tools import StateTestFiller, Storage, Transaction


@pytest.mark.parametrize(
"dup_opcode",
[
Op.DUP1,
Op.DUP2,
Op.DUP3,
Op.DUP4,
Op.DUP5,
Op.DUP6,
Op.DUP7,
Op.DUP8,
Op.DUP9,
Op.DUP10,
Op.DUP11,
Op.DUP12,
Op.DUP13,
Op.DUP14,
Op.DUP15,
Op.DUP16,
],
ids=lambda op: str(op),
)
@pytest.mark.with_all_evm_code_types
def test_newl(
state_test: StateTestFiller,
fork: str,
dup_opcode: Op,
pre: Alloc,
):
"""
Test the DUP1-DUP16 opcodes.
Note: Test case ported from [ethereum/tests](https://github.com/ethereum/tests)
Test ported from [ethereum/tests/GeneralStateTests/VMTests/vmTests/dup.json](https://github.com/ethereum/tests/blob/develop/GeneralStateTests/VMTests/vmTests/dup.json) by Ori Pomerantz.
""" # noqa: E501
env = Environment()
sender = pre.fund_eoa()
post = {}

# Push 0x00 - 0x10 onto the stack
account_code = sum(Op.PUSH1(i) for i in range(0x11))

# Use the DUP opcode
account_code += dup_opcode

# Save each stack value into different keys in storage
account_code += sum(Op.PUSH1(i) + Op.SSTORE for i in range(0x11))

account = pre.deploy_contract(account_code)

tx = Transaction(
ty=0x0,
nonce=0,
to=account,
gas_limit=500000,
gas_price=10,
protected=False if fork in [Frontier, Homestead] else True,
data="",
sender=sender,
)

"""
Storage will be structured as follows:
0x00: 0x10-0x01 (Depending on DUP opcode)
0x01: 0x10
0x02: 0x0F
0x03: 0x0E
0x04: 0x0D
0x05: 0x0C
0x06: 0x0B
0x07: 0x0A
0x08: 0x09
0x09: 0x08
0x0A: 0x07
0x0B: 0x06
0x0C: 0x05
0x0D: 0x04
0x0E: 0x03
0x0F: 0x02
0x10: 0x01
DUP1 copies the first element of the stack (0x10).
DUP16 copies the 16th element of the stack (0x01).
"""
s: Storage.StorageDictType = dict(zip(range(1, 17), range(16, 0, -1)))
s[0] = 16 - (dup_opcode.int() - 0x80)

post[account] = Account(storage=s)

state_test(env=env, pre=pre, post=post, tx=tx)

0 comments on commit e4aaedd

Please sign in to comment.