| 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() |
|
|
|
|
|
|