PageRenderTime 47ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/Sources/DataTableTests/AnalyzeTests.cs

https://github.com/tpwalke2/DataTable
C# | 212 lines | 163 code | 43 blank | 6 comment | 0 complexity | 598d8689503cf062a08cc91d6daea6d6 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using Xunit;
  6. using DataAccess;
  7. using System.IO;
  8. namespace DataTableTests
  9. {
  10. public class AnalyzeTests
  11. {
  12. // Use a small table here because any table update here will likely require a test update.
  13. DataTable GetTable()
  14. {
  15. // Note irregular spacing should get parsed out
  16. string content =
  17. @"first,last,age
  18. Bob, Smith, 12
  19. Bob, Jones, 34
  20. Ed, Smith, 12
  21. John, Smith, 34";
  22. string temp = Path.GetTempFileName();
  23. File.WriteAllText(temp, content);
  24. return DataTable.New.ReadLazy(temp);
  25. }
  26. MutableDataTable GetInMemoryTable()
  27. {
  28. string content =
  29. @"first,last,age
  30. Bob, Smith, 12
  31. Bob, Jones, 34
  32. Ed, Smith, 12
  33. John, Smith, 34";
  34. TextReader tr = new StringReader(content);
  35. MutableDataTable dt = DataTable.New.Read(tr);
  36. return dt;
  37. }
  38. // Do string comparison, ignoring ignoring newline (\r\n vs just \n)
  39. public static void AssertEquals(string content, string actual)
  40. {
  41. content = content.Replace("\r\n", "\n");
  42. actual = actual.Replace("\r\n", "\n");
  43. Assert.Equal(content, actual);
  44. }
  45. public static void AssertEquals(string content, DataTable dt)
  46. {
  47. StringWriter sw = new StringWriter();
  48. dt.SaveToStream(sw);
  49. string actual = sw.ToString();
  50. AssertEquals(content, actual);
  51. }
  52. [Fact]
  53. public void ColumnCountsStreaming()
  54. {
  55. DataTable dtOriginal = GetTable();
  56. GetColumnValueCounts(dtOriginal);
  57. }
  58. [Fact]
  59. public void SampleTest()
  60. {
  61. DataTable dtOriginal = GetTable();
  62. MutableDataTable result = Analyze.SampleTopN(dtOriginal, 2);
  63. AssertEquals(
  64. @"first,last,age
  65. Bob,Smith,12
  66. Bob,Jones,34
  67. ", result);
  68. }
  69. [Fact]
  70. public void ColumnCountsInMemory()
  71. {
  72. DataTable dtOriginal = GetInMemoryTable();
  73. GetColumnValueCounts(dtOriginal);
  74. }
  75. void GetColumnValueCounts(DataTable dtOriginal)
  76. {
  77. MutableDataTable result = Analyze.GetColumnValueCounts(dtOriginal, 1);
  78. AssertEquals(
  79. @"column name,count,Top Value 0,Top Occurrence 0
  80. first,3,Bob,2
  81. last,2,Smith,3
  82. age,2,12,2
  83. ", result);
  84. }
  85. [Fact]
  86. public void DupStreaming()
  87. {
  88. DataTable dtOriginal = GetTable();
  89. DuplicatTests(dtOriginal);
  90. }
  91. [Fact]
  92. public void DupInMemory()
  93. {
  94. DataTable dtOriginal = GetInMemoryTable();
  95. DuplicatTests(dtOriginal);
  96. }
  97. public void DuplicatTests(DataTable dtOriginal)
  98. {
  99. // Select first colyumn
  100. DataTable dt1 = Analyze.SelectDuplicates(dtOriginal, "first");
  101. AssertEquals(
  102. @"first,last,age
  103. Bob,Smith,12
  104. Bob,Jones,34
  105. ", dt1);
  106. // Select two columns
  107. DataTable dt2 = Analyze.SelectDuplicates(dtOriginal, "last", "age");
  108. AssertEquals(
  109. @"first,last,age
  110. Bob,Smith,12
  111. Ed,Smith,12
  112. ", dt2);
  113. // Select two columns, empty
  114. DataTable dt3 = Analyze.SelectDuplicates(dtOriginal, "first", "age");
  115. AssertEquals(
  116. @"first,last,age
  117. ", dt3);
  118. }
  119. [Fact]
  120. public void ShredTest()
  121. {
  122. DataTable dt = GetTable();
  123. string templateFilename = Path.GetTempFileName() + ".{0}.csv";
  124. Analyze.Shred(dt, "last", templateFilename);
  125. string file1 = string.Format(templateFilename, "Smith");
  126. string file2 = string.Format(templateFilename, "Jones");
  127. Assert.True(File.Exists(file1));
  128. Assert.True(File.Exists(file2));
  129. string content1 = File.ReadAllText(file1);
  130. string content2 = File.ReadAllText(file2);
  131. File.Delete(file1);
  132. File.Delete(file2);
  133. AnalyzeTests.AssertEquals(
  134. @"first,last,age
  135. Bob,Smith,12
  136. Ed,Smith,12
  137. John,Smith,34
  138. ", content1);
  139. AnalyzeTests.AssertEquals(
  140. @"first,last,age
  141. Bob,Jones,34
  142. ", content2);
  143. }
  144. [Fact]
  145. public void Join()
  146. {
  147. MutableDataTable d1 = DataTable.New.Read(new StringReader(
  148. @"first, last
  149. Bob, Jones
  150. Alfred, Smith
  151. Ed, Edson
  152. "));
  153. MutableDataTable d2 = DataTable.New.Read(new StringReader(
  154. @"last, country
  155. smith, English
  156. Piere, French
  157. Jones, American
  158. "));
  159. MutableDataTable merge = Analyze.Join(d1, d2, "last");
  160. AssertEquals(
  161. @"first,last,country
  162. Bob,JONES,American
  163. Alfred,SMITH,English
  164. Ed,EDSON,
  165. ,PIERE,French
  166. ", merge);
  167. }
  168. }
  169. }