static MemorySizeInfoTestCase ParseLine(string line, int lineNo) { Static.Assert(MiscInstrInfoTestConstants.MemorySizeElemsPerLine == 6 ? 0 : -1); var elems = line.Split(commaSeparator, MiscInstrInfoTestConstants.MemorySizeElemsPerLine); if (elems.Length != MiscInstrInfoTestConstants.MemorySizeElemsPerLine) { throw new Exception($"Expected {MiscInstrInfoTestConstants.MemorySizeElemsPerLine - 1} commas"); } var tc = new MemorySizeInfoTestCase(); tc.LineNumber = lineNo; tc.MemorySize = ToEnumConverter.GetMemorySize(elems[0].Trim()); tc.Size = NumberConverter.ToInt32(elems[1].Trim()); tc.ElementSize = NumberConverter.ToInt32(elems[2].Trim()); tc.ElementType = ToEnumConverter.GetMemorySize(elems[3].Trim()); tc.ElementCount = NumberConverter.ToInt32(elems[4].Trim()); foreach (var value in elems[5].Split(spaceSeparator, StringSplitOptions.RemoveEmptyEntries)) { if (!InstructionInfoDicts.MemorySizeFlagsTable.TryGetValue(value, out var flags)) { throw new InvalidOperationException($"Invalid flags value: {value}"); } tc.Flags |= flags; } return(tc); }
public static MemorySizeInfoTestCase[] GetTestCases() { var result = new MemorySizeInfoTestCase[IcedConstants.MemorySizeEnumCount]; var filename = PathUtils.GetTestTextFilename("MemorySizeInfo.txt", "InstructionInfo"); Debug.Assert(File.Exists(filename)); int lineNo = 0; foreach (var line in File.ReadLines(filename)) { lineNo++; if (line.Length == 0 || line[0] == '#') { continue; } MemorySizeInfoTestCase tc; try { tc = ParseLine(line, lineNo); } catch (Exception ex) { throw new Exception($"Invalid line {lineNo} ({filename}): {ex.Message}"); } if (result[(int)tc.MemorySize] is not null) { throw new InvalidOperationException($"Duplicate test, {filename}, line {lineNo}"); } result[(int)tc.MemorySize] = tc; } var sb = new StringBuilder(); for (int i = 0; i < result.Length; i++) { var tc = result[i]; if (tc is null) { if (sb.Length > 0) { sb.Append(", "); } sb.Append(((MemorySize)i).ToString()); } } if (sb.Length != 0) { throw new InvalidOperationException($"Missing tests in {filename}: " + sb.ToString()); } return(result !); }