|
|
import unittest |
|
|
import sys |
|
|
import os |
|
|
|
|
|
|
|
|
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '../src'))) |
|
|
|
|
|
from driver_api import VirtualGPUDriver |
|
|
|
|
|
class TestVirtualGPUDriver(unittest.TestCase): |
|
|
|
|
|
def setUp(self): |
|
|
self.driver = VirtualGPUDriver() |
|
|
self.driver.initialize(num_chips=1, vram_size_gb=0.1) |
|
|
|
|
|
def tearDown(self): |
|
|
self.driver.shutdown() |
|
|
|
|
|
def test_initialization_and_shutdown(self): |
|
|
self.assertTrue(self.driver.initialized) |
|
|
self.driver.shutdown() |
|
|
self.assertFalse(self.driver.initialized) |
|
|
self.driver.initialize(num_chips=1, vram_size_gb=0.1) |
|
|
self.assertTrue(self.driver.initialized) |
|
|
|
|
|
def test_memory_allocation_and_free(self): |
|
|
size = 100 |
|
|
addr = self.driver.allocate_memory(size) |
|
|
self.assertIsNotNone(addr) |
|
|
self.assertIn(addr, self.driver.memory_manager.allocated_blocks) |
|
|
self.driver.free_memory(addr) |
|
|
self.assertNotIn(addr, self.driver.memory_manager.allocated_blocks) |
|
|
|
|
|
def test_memory_write_and_read(self): |
|
|
size = 10 |
|
|
addr = self.driver.allocate_memory(size) |
|
|
test_data = [i for i in range(size)] |
|
|
self.driver.write_memory(addr, test_data) |
|
|
read_data = self.driver.read_memory(addr, size) |
|
|
self.assertEqual(read_data, test_data) |
|
|
self.driver.free_memory(addr) |
|
|
|
|
|
def test_add_and_submit_commands(self): |
|
|
self.driver.add_command("test_command_1", arg1="value1") |
|
|
self.driver.add_command("test_command_2", arg2="value2") |
|
|
self.assertEqual(len(self.driver.command_processor.command_buffer), 2) |
|
|
|
|
|
|
|
|
results = self.driver.submit_commands() |
|
|
self.assertEqual(len(self.driver.command_processor.command_buffer), 0) |
|
|
self.assertIsNotNone(results) |
|
|
|
|
|
def test_graphics_api_buffer_creation(self): |
|
|
buffer_id = self.driver.create_buffer(1024, "vertex") |
|
|
self.assertIsNotNone(buffer_id) |
|
|
self.assertIn(buffer_id, self.driver.graphics_api.buffers) |
|
|
self.driver.delete_buffer(buffer_id) |
|
|
self.assertNotIn(buffer_id, self.driver.graphics_api.buffers) |
|
|
|
|
|
def test_graphics_api_buffer_data(self): |
|
|
buffer_id = self.driver.create_buffer(100, "vertex") |
|
|
data = [i for i in range(100)] |
|
|
self.driver.buffer_data(buffer_id, data) |
|
|
|
|
|
read_data = self.driver.read_memory(self.driver.graphics_api.buffers[buffer_id]["virtual_address"], 100) |
|
|
self.assertEqual(read_data, data) |
|
|
self.driver.delete_buffer(buffer_id) |
|
|
|
|
|
def test_graphics_api_shader_compilation_and_program_linking(self): |
|
|
vertex_shader_source = "attribute vec4 position; void main() { gl_Position = position; }" |
|
|
fragment_shader_source = "void main() { gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0); }" |
|
|
|
|
|
vertex_shader = self.driver.compile_shader(vertex_shader_source, "vertex") |
|
|
fragment_shader = self.driver.compile_shader(fragment_shader_source, "fragment") |
|
|
|
|
|
self.assertIsNotNone(vertex_shader) |
|
|
self.assertIsNotNone(fragment_shader) |
|
|
|
|
|
program = self.driver.graphics_api.link_program(vertex_shader, fragment_shader) |
|
|
self.assertIsNotNone(program) |
|
|
self.assertTrue(program["linked"]) |
|
|
|
|
|
self.driver.use_program(program) |
|
|
self.assertEqual(self.driver.graphics_api.current_program, program) |
|
|
|
|
|
def test_graphics_api_framebuffer_operations(self): |
|
|
fb = self.driver.create_framebuffer(64, 64) |
|
|
self.assertIsNotNone(fb) |
|
|
self.assertIn("color", fb) |
|
|
self.assertIn("depth", fb) |
|
|
|
|
|
self.driver.bind_framebuffer(fb) |
|
|
self.assertEqual(self.driver.graphics_api.current_framebuffer, fb) |
|
|
|
|
|
self.driver.clear_color(0.0, 0.0, 1.0, 1.0) |
|
|
|
|
|
|
|
|
self.driver.clear_depth(1.0) |
|
|
|
|
|
|
|
|
if __name__ == '__main__': |
|
|
unittest.main() |
|
|
|
|
|
|
|
|
|