コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
 public bool TryToInteger(out int result)
 {
     return(_value.TryToInteger(out result));
 }
コード例 #4
0
        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");
                    }
                }
            }
        }