private static void TryNumberConversions(string value) { String8 value8 = value.TestConvert(); // .NET Parses "-0" successfully as int and long, but not ulong. // I don't want "-0" to be considered valid on any parse. if (value == "-0") { value = "Invalid"; } int expectedInt, actualInt; Assert.AreEqual(int.TryParse(value, out expectedInt), value8.TryToInteger(out actualInt)); Assert.AreEqual(expectedInt, actualInt); long expectedLong, actualLong; Assert.AreEqual(long.TryParse(value, out expectedLong), value8.TryToLong(out actualLong)); Assert.AreEqual(expectedLong, actualLong); ulong expectedULong, actualULong; Assert.AreEqual(ulong.TryParse(value, out expectedULong), value8.TryToULong(out actualULong)); Assert.AreEqual(expectedULong, actualULong); }
private int?TryToInteger(string value) { String8 value8 = String8.Convert(value, new byte[String8.GetLength(value) + 1], 1); int?result = null; int parsed = 0; if (value8.TryToInteger(out parsed)) { result = parsed; } return(result); }
public bool TryToInteger(out int result) { return(_value.TryToInteger(out result)); }
public void Reader_Basics(string sampleFilePath, Func <string, bool, ITabularReader> buildReader) { // File Not Found Verify.Exception <FileNotFoundException>(() => buildReader("NonExistantFile.xsv", false)); // Empty File File.WriteAllText("Empty.xsv", ""); // Verify Reader throws on construction if trying to read headers Verify.Exception <IOException>(() => buildReader("Empty.xsv", true)); // Verify Reader returns false immediately if not reading headers using (ITabularReader r = buildReader("Empty.xsv", false)) { Assert.IsFalse(r.NextRow()); } // Verify Reader doesn't consume header row if asked not to using (ITabularReader r = buildReader(sampleFilePath, false)) { Assert.IsTrue(r.NextRow()); Assert.AreEqual("LineNumber", r.Current(0).ToString()); // Get column name (no header row read) Verify.Exception <ColumnNotFoundException>(() => r.ColumnIndex("Missing")); } // Open the sample Tsv the 'expected' way using (ITabularReader r = buildReader(sampleFilePath, true)) { // Get column name (valid) int lineNumberColumnIndex = r.ColumnIndex("LineNumber"); Assert.AreEqual(0, lineNumberColumnIndex, "LineNumber column not expected"); // Get column name (different case, but valid) int descriptionColumnIndex = r.ColumnIndex("deSCRiption"); Assert.AreEqual(2, descriptionColumnIndex, "Description column not expected"); // Get column name (unknown) Verify.Exception <ColumnNotFoundException>(() => r.ColumnIndex("UnknownColumn")); while (r.NextRow()) { int rowIndex = r.RowCountRead; if (rowIndex % 100 == 99) { // Verify empty rows return no columns, have empty row text, throw on value access Assert.AreEqual(0, r.CurrentRowColumns, "Expected column count 0 in empty rows"); Verify.Exception <ArgumentOutOfRangeException>(() => { var v = r.Current(lineNumberColumnIndex); }); } else if (rowIndex == 5000) { // Read row over 64k [block resizing logic, row values look right] String8 longDescription = r.Current(descriptionColumnIndex).ToString8(); Assert.AreEqual(100000, longDescription.Length); } else { // Get value (valid) String8 lineNumber8 = r.Current(lineNumberColumnIndex).ToString8(); int lineNumber = 0; if (lineNumber8.TryToInteger(out lineNumber)) { Assert.AreEqual(rowIndex, lineNumber, "Expected line number to equal row number"); } else { Assert.Fail(String.Format("\"{0}\" was not converted to an integer.", lineNumber8)); } // Get line number Assert.AreEqual(rowIndex, r.RowCountRead, "Expected lines read to equal row number"); } } } }