const std = @import("std"); const xml = @import("xml"); const Database = @import("Database"); const allocator = std.testing.allocator; const expectEqual = std.testing.expectEqual; pub fn initDbFromSvd(text: []const u8) !Database { const doc: *xml.Doc = try xml.readFromMemory(text); defer xml.freeDoc(doc); return try Database.initFromSvd(allocator, doc); } test "cmsis example" { var db = try initDbFromSvd(@embedFile("svd/cmsis-example.svd")); defer db.deinit(); // CPU is not populated in this svd file try expectEqual(@as(@TypeOf(db.cpu), null), db.cpu); } test "register.size from device" { var db = try initDbFromSvd( \\ \\ ARMCM3xxx \\ 8 \\ 32 \\ 42 \\ \\ \\ TIMER0 \\ 0x40010000 \\ \\ \\ test \\ 0x0 \\ \\ \\ \\ \\ \\ ); defer db.deinit(); const register_idx = 0; const register = try db.getRegister(register_idx); try expectEqual(@as(usize, 42), register.size.?); } test "register.size from peripheral" { var db = try initDbFromSvd( \\ \\ ARMCM3xxx \\ 8 \\ 32 \\ 32 \\ \\ \\ TIMER0 \\ 0x40010000 \\ 42 \\ \\ \\ test \\ 0x0 \\ \\ \\ \\ \\ \\ ); defer db.deinit(); const register_idx = 0; const register = try db.getRegister(register_idx); try expectEqual(@as(usize, 42), register.size.?); } test "register.size from cluster" { var db = try initDbFromSvd( \\ \\ ARMCM3xxx \\ 8 \\ 32 \\ 32 \\ \\ \\ TIMER0 \\ 0x40010000 \\ \\ \\ bruh \\ 42 \\ 0x0 \\ \\ test \\ 0x0 \\ \\ \\ \\ \\ \\ \\ ); defer db.deinit(); const register_idx = 0; const register = try db.getRegister(register_idx); try expectEqual(@as(usize, 42), register.size.?); } // TODO: nested cluster test "register.size from register" { var db = try initDbFromSvd( \\ \\ ARMCM3xxx \\ 8 \\ 32 \\ 32 \\ \\ \\ TIMER0 \\ 0x40010000 \\ \\ \\ test \\ 0x0 \\ 42 \\ \\ \\ \\ \\ \\ ); defer db.deinit(); const register_idx = 0; const register = try db.getRegister(register_idx); try expectEqual(@as(usize, 42), register.size.?); } // TODO: the way this is architected we'd see the error in the code generation side of things //test "register.size missing" { // try std.testing.expectError(error.SizeNotFound, initDbFromSvd( // \\ // \\ ARMCM3xxx // \\ 8 // \\ 32 // \\ // \\ // \\ TIMER0 // \\ 0x40010000 // \\ // \\ // \\ test // \\ 0x0 // \\ // \\ // \\ // \\ // \\ // \\ // )); //} //test "register.access" {} // TODO: figure out if `protection` is interesting/important for us //test "register.reset_value" {} //test "register.reset_mask" {}