package lab01;

import static org.junit.jupiter.api.Assertions.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import hw01.Fraction;

class TestCPU {
	private CPU cpu;

	@BeforeEach
	void setUp() throws Exception {
		cpu = new CPU();
	}

	@Test
	void testCPU() { 
	    assertEquals(0,cpu.getAccumulator());	
	}

	@Test
	void testExecute() { 
		// Includes an assert for each operation
		cpu.execute("LOD", 21);
		assertEquals(21,cpu.getAccumulator(),"LOD failed");
		cpu.execute("ADD", 3);
		assertEquals(24,cpu.getAccumulator(),"ADD failed");
		cpu.execute("SUB", 12);
		assertEquals(12,cpu.getAccumulator(),"SUB failed");
		cpu.execute("MUL", 3);
		assertEquals(36,cpu.getAccumulator(),"MUL failed");
		cpu.execute("DIV", 4);
		assertEquals(9,cpu.getAccumulator(),"DIV failed");
	}

	@Test
	void testDivByZero() { 
		try {
			// System.out.println("Starting try");
			cpu.execute("LOD", 10);
			cpu.execute("DIV", 0); // This should fail
			System.out.println("Divide by zero didn't fail?");
		} catch(Throwable e) {
			System.out.println("Excpected Error thrown: " + e );
		}
		assertEquals(10, cpu.getAccumulator());
	}

}
