public void TestTemplateSizes() { var table = new TemplateSizes.Table(); using (StreamReader streamIn = new StreamReader(GetTablePath())) { table.Load(streamIn); } var doneTemplates = new List <string>(); foreach (var record in table) { if (!NMSTemplate.NMSTemplateMap.ContainsKey(record.TemplateName)) { Debug.WriteLine($"TestTemplateSizes: size 0x{record.TemplateSize:X} defined for missing template {record.TemplateName}!"); continue; } int size = NMSTemplate.GetTemplateDataSize(record.TemplateName); Assert.AreEqual(record.TemplateSize, size, $"template {record.TemplateName} size 0x{record.TemplateSize:X} != 0x{size:X}"); doneTemplates.Add(record.TemplateName); } foreach (var template in NMSTemplate.NMSTemplateMap) { if (!doneTemplates.Contains(template.Key)) { Debug.WriteLine($"TestTemplateSizes: no size defined for template {template.Key}!"); } } }
public void GenerateTemplateSizeTable() { string dataDir = Database.Utils.GetDirectory(libMBIN.Version.NMSVersion); var table = new TemplateSizes.Table(); string logPath = Path.Combine(dataDir, "TemplateSizes.tsv"); foreach (var type in NMSTemplate.NMSTemplateMap.Values) { NMSTemplate template = Activator.CreateInstance(type) as NMSTemplate; table.Add(new TemplateSizes.Record(type.Name, template.GetDataSize())); } Utils.SetFileReadOnly(logPath, false); using (var streamOut = new StreamWriter(logPath)) { streamOut.WriteLine("# Tab-separated values. Open with a spreadsheet app such as Excel.\n"); streamOut.WriteLine("# READ-ONLY. DO NOT MODIFY OR DELETE.\n"); table.Save(streamOut); } Utils.SetFileReadOnly(logPath, true); }