import unittest
from nose.tools import raises

class TestVM( unittest.TestCase ):

    def setUp( self ):
        from cpp.vm import ovm
        self.vm = ovm()

    def test_load_vm( self ):
        import cpp.vm

    def test_zero_ram( self ):        
        for i in range( 2**14 ):
            assert self.vm.read_ram(i) == 0                        
            
    @raises(RuntimeError)
    def test_ram_index_limit( self ):        
        for i in range( 2**14 + 1 ):
            assert self.vm.read_ram(i) == 0
            
    def test_zero_code( self ):        
        for i in range( 2**14 ):
            assert self.vm.read_code(i) == 0                        
    
    @raises(RuntimeError)        
    def test_code_index_limit( self ):        
        for i in range( 2**14 + 1 ):
            assert self.vm.read_code(i) == 0                        
            
    def test_val_set_ram( self ):
        vm = self.vm
        vm.write_ram(17,3.14)
        assert vm.read_ram(17) == 3.14
        
    def test_val_set_code( self ):
        vm = self.vm
        vm.write_code(17,3)
        assert vm.read_code(17) == 3
        