在golang,以太坊虚拟机中为隔离函数编写简单的单元测试

时间:2017-08-14 14:49:49

标签: unit-testing go virtual-machine ethereum

在这种情况下,没有一个正确的答案或预期的结果,我可以检查,我想评估一个功能在不同条件下的执行时间,还是单元测试吗?

我正在处理的项目中嵌入了一个函数,它在虚拟机(以太坊虚拟机)上执行添加操作(opAdd),可以找到该文件on the project GitHub page

这是负责任务的具体功能:

func opAdd(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) {
    x, y := stack.pop(), stack.pop()
    stack.push(math.U256(x.Add(x, y)))

    evm.interpreter.intPool.put(y)

    return nil, nil
}

我想要做的是创建一个“ unit-test ”来评估此操作的执行速度。为了评估这一点,我相应地修改了函数:

func opAdd(pc *uint64, evm *EVM, contract *Contract, memory *Memory, stack *Stack) ([]byte, error) {

    // begin execution time tracking
    var startTime = time.Now().UnixNano();

    x, y := stack.pop(), stack.pop()
    stack.push(math.U256(x.Add(x, y)))

    evm.interpreter.intPool.put(y)

    // log ellapsed execution time
    fmt.Println("execute opAdd consume = ",(time.Now().UnixNano() - startTime))

    return nil, nil
}

然而,缺少的是能够单独调用此函数,并为其提供不同数量的数据,以便我可以在不同条件下评估此代码的行为。

例如,我想看看用千兆字节,兆字节等执行需要多长时间。

有一些代码可以检查vm here的功能,但这对我来说太复杂了 - 我是golang的新手。

我想做的是编写可以调用此函数的最简单程序,将要处理的不同数量的输入数据作为参数。为此,我已经研究过multiple resources,但如果有经验的地鼠可以指出我正确的方向,那么推进我对如何构建实际单元测试的理解将是无法估量的。

0 个答案:

没有答案