package core6502

import (
	"fmt"
	"testing"
)

func TestFunctional(t *testing.T) {
	m := new(FlatMemory)
	s := NewNMOS6502(m)

	// Test suite from https://github.com/Klaus2m5/6502_65C02_functional_tests
	m.loadBinary("testdata/6502_functional_test.bin")

	s.reg.setPC(0x0400)
	for true {
		testCase := s.mem.Peek(0x0200)
		if testCase >= 240 {
			break
		}
		log := testCase > 43
		if log {
			fmt.Printf("[ %d ] ", testCase)
		}
		pc := s.reg.getPC()
		s.ExecuteInstruction(log)
		if pc == s.reg.getPC() {
			t.Errorf("Failure in test %v.", testCase)
		}
	}

}
