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

/Tests/Bio.TestAutomation/Matrix/DensePairAnsiBvtTestCases.cs

#
C# | 434 lines | 278 code | 74 blank | 82 comment | 12 complexity | 43b3a75c4ea64253d9138bad45127325 MD5 | raw file
Possible License(s): MPL-2.0-no-copyleft-exception, CPL-1.0
  1. // Copyright (c) Microsoft. All rights reserved.
  2. // This code is licensed under the Apache License, Version 2.0.
  3. // THIS CODE IS PROVIDED *AS IS* WITHOUT WARRANTY OF
  4. // ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING ANY
  5. // IMPLIED WARRANTIES OF FITNESS FOR A PARTICULAR
  6. // PURPOSE, MERCHANTABILITY, OR NON-INFRINGEMENT.
  7. // *****************************************************************
  8. using System;
  9. using System.Collections.Generic;
  10. using System.IO;
  11. using System.Linq;
  12. using System.Threading.Tasks;
  13. using Bio.Matrix;
  14. using Bio.TestAutomation.Util;
  15. using Bio.Util;
  16. using Bio.Util.Logging;
  17. using Microsoft.VisualStudio.TestTools.UnitTesting;
  18. namespace Bio.TestAutomation.Matrix
  19. {
  20. /// <summary>
  21. /// Bvt test cases to confirm the features of Dense Matrix
  22. /// </summary>
  23. [TestClass]
  24. public class DensePairAnsiBvtTestCases
  25. {
  26. #region Global Variables
  27. Utility utilityObj = new Utility(@"TestUtils\MatrixTestsConfig.xml");
  28. #endregion Global Variables
  29. #region Constructor
  30. /// <summary>
  31. /// Static constructor to open log and make other settings needed for test
  32. /// </summary>
  33. static DensePairAnsiBvtTestCases()
  34. {
  35. Trace.Set(Trace.SeqWarnings);
  36. if (!ApplicationLog.Ready)
  37. {
  38. ApplicationLog.Open("bio.automation.log");
  39. }
  40. }
  41. #endregion
  42. #region Test Cases
  43. /// <summary>
  44. /// Validates ColKeysInFile method
  45. /// Input : Valid values for DensePairAnsi
  46. /// Validation : Col Keys In File
  47. /// </summary>
  48. [TestMethod]
  49. [Priority(0)]
  50. [TestCategory("Priority0")]
  51. public void ValidateDensePairAnsiColKeysInFile()
  52. {
  53. DenseMatrix<string, string, double> denseMatObj =
  54. GetDenseMatrix();
  55. ParallelOptions parOptObj = new ParallelOptions();
  56. denseMatObj.WriteDenseAnsi(Constants.FastQTempTxtFileName,
  57. parOptObj);
  58. string[] colkey =
  59. DensePairAnsi.ColKeysInFile(Constants.FastQTempTxtFileName);
  60. for (int i = 0; i < colkey.Length; i++)
  61. {
  62. Assert.AreEqual(denseMatObj.ColKeys[i], colkey[i]);
  63. }
  64. if (File.Exists(Constants.FastQTempTxtFileName))
  65. File.Delete(Constants.FastQTempTxtFileName);
  66. Console.WriteLine(
  67. "DensePairAnsi BVT : Validation of ColKeysInFile() method successful");
  68. ApplicationLog.WriteLine(
  69. "DensePairAnsi BVT : Validation of ColKeysInFile() method successful");
  70. }
  71. /// <summary>
  72. /// Validates CreateEmptyInstance method
  73. /// Input : Valid values for DensePairAnsi
  74. /// Validation : create empty instance method
  75. /// </summary>
  76. [TestMethod]
  77. [Priority(0)]
  78. [TestCategory("Priority0")]
  79. public void ValidateDensePairAnsiCreateEmptyInstance()
  80. {
  81. UOPair<char> uoPairObj = new UOPair<char>('?', '?');
  82. DensePairAnsi dpaObj =
  83. DensePairAnsi.CreateEmptyInstance(
  84. new string[] { "R0", "R1", "R2" },
  85. new string[] { "C0", "C1", "C2", "C3" },
  86. uoPairObj);
  87. Assert.IsNotNull(dpaObj);
  88. Console.WriteLine(
  89. "DensePairAnsi BVT : Validation of CreateEmptyInstance() method successful");
  90. ApplicationLog.WriteLine(
  91. "DensePairAnsi BVT : Validation of CreateEmptyInstance() method successful");
  92. }
  93. /// <summary>
  94. /// Validates GetInstance method
  95. /// Input : Valid values for DensePairAnsi
  96. /// Validation : gets instance
  97. /// </summary>
  98. [TestMethod]
  99. [Priority(0)]
  100. [TestCategory("Priority0")]
  101. public void ValidateDensePairAnsiGetInstance()
  102. {
  103. ParallelOptions parOptObj = new ParallelOptions();
  104. UOPair<char> uoPairObj = new UOPair<char>('?', '?');
  105. DensePairAnsi dpaObj =
  106. DensePairAnsi.CreateEmptyInstance(
  107. new string[] { "R0", "R1", "R2" },
  108. new string[] { "C0", "C1", "C2", "C3" },
  109. uoPairObj);
  110. dpaObj.WriteDensePairAnsi(Constants.FastQTempTxtFileName,
  111. parOptObj);
  112. Assert.AreEqual(4, dpaObj.ColCount);
  113. Assert.AreEqual(3, dpaObj.RowCount);
  114. Assert.AreEqual(3, dpaObj.RowKeys.Count);
  115. Assert.AreEqual(4, dpaObj.ColKeys.Count);
  116. if (File.Exists(Constants.FastQTempTxtFileName))
  117. File.Delete(Constants.FastQTempTxtFileName);
  118. Console.WriteLine(
  119. "DensePairAnsi BVT : Validation of GetInstance() method successful");
  120. ApplicationLog.WriteLine(
  121. "DensePairAnsi BVT : Validation of GetInstance() method successful");
  122. }
  123. /// <summary>
  124. /// Validates GetInstance method with IEnum parameters
  125. /// Input : Valid values for DensePairAnsi
  126. /// Validation : gets instance with IEnum parameters
  127. /// </summary>
  128. [TestMethod]
  129. [Priority(0)]
  130. [TestCategory("Priority0")]
  131. public void ValidateDensePairAnsiGetInstanceIEnum()
  132. {
  133. List<KeyValuePair<string, UOPair<char>>> keyValListObj =
  134. new List<KeyValuePair<string, UOPair<char>>>();
  135. var enumObj = keyValListObj.GroupBy(x => x.Key);
  136. DensePairAnsi dpaObj = DensePairAnsi.GetInstance(enumObj, '?');
  137. Assert.IsNotNull(dpaObj);
  138. Console.WriteLine(
  139. "DensePairAnsi BVT : Validation of GetInstance(enum, char) method successful");
  140. ApplicationLog.WriteLine(
  141. "DensePairAnsi BVT : Validation of GetInstance(enum, char) method successful");
  142. }
  143. /// <summary>
  144. /// Validates GetInstanceFromSparse method
  145. /// Input : Valid values for DensePairAnsi
  146. /// Validation : gets instance from sparse
  147. /// </summary>
  148. [TestMethod]
  149. [Priority(0)]
  150. [TestCategory("Priority0")]
  151. public void ValidateDensePairAnsiGetInstanceFromSparse()
  152. {
  153. DenseMatrix<string, string, double> denseMatObj =
  154. CreateSimpleDenseMatrix();
  155. denseMatObj.WriteSparse(Constants.FastQTempTxtFileName);
  156. DensePairAnsi dpaObj =
  157. DensePairAnsi.GetInstanceFromSparse(Constants.FastQTempTxtFileName);
  158. Assert.AreEqual(denseMatObj.ColCount, dpaObj.ColCount);
  159. Assert.AreEqual(denseMatObj.RowCount, dpaObj.RowCount);
  160. Assert.AreEqual(denseMatObj.RowKeys.Count, dpaObj.RowKeys.Count);
  161. Assert.AreEqual(denseMatObj.ColKeys.Count, dpaObj.ColKeys.Count);
  162. Assert.IsNotNull(DensePairAnsi.StaticMissingValue);
  163. Assert.IsNotNull(DensePairAnsi.StaticStoreMissingValue);
  164. if (File.Exists(Constants.FastQTempTxtFileName))
  165. File.Delete(Constants.FastQTempTxtFileName);
  166. Console.WriteLine(
  167. "DensePairAnsi BVT : Validation of GetInstanceFromSparse() method successful");
  168. ApplicationLog.WriteLine(
  169. "DensePairAnsi BVT : Validation of GetInstanceFromSparse() method successful");
  170. }
  171. /// <summary>
  172. /// Validates GetInstanceFromSparse method IEnum
  173. /// Input : Valid values for DensePairAnsi
  174. /// Validation : gets instance from sparse with IEnum
  175. /// </summary>
  176. [TestMethod]
  177. [Priority(0)]
  178. [TestCategory("Priority0")]
  179. public void ValidateDensePairAnsiGetInstanceFromSparseEnum()
  180. {
  181. List<RowKeyColKeyValue<string, string, UOPair<char>>> enumObj =
  182. new List<RowKeyColKeyValue<string, string, UOPair<char>>>();
  183. DensePairAnsi dpaObj = DensePairAnsi.GetInstanceFromSparse(enumObj);
  184. Assert.IsNotNull(dpaObj);
  185. Console.WriteLine(
  186. "DensePairAnsi BVT : Validation of GetInstanceFromSparse(Ienum) method successful");
  187. ApplicationLog.WriteLine(
  188. "DensePairAnsi BVT : Validation of GetInstanceFromSparse(Ienum) method successful");
  189. }
  190. /// <summary>
  191. /// Validates RowKeysInFile method
  192. /// Input : Valid values for DensePairAnsi
  193. /// Validation : Row Keys In File
  194. /// </summary>
  195. [TestMethod]
  196. [Priority(0)]
  197. [TestCategory("Priority0")]
  198. public void ValidateDensePairAnsiRowKeysInFile()
  199. {
  200. DenseMatrix<string, string, double> denseMatObj =
  201. GetDenseMatrix();
  202. ParallelOptions parOptObj = new ParallelOptions();
  203. denseMatObj.WriteDenseAnsi(Constants.FastQTempTxtFileName,
  204. parOptObj);
  205. IEnumerable<string> rowKeys =
  206. DensePairAnsi.RowKeysInFile(Constants.FastQTempTxtFileName);
  207. int i = 0;
  208. foreach (string rowKey in rowKeys)
  209. {
  210. Assert.AreEqual(denseMatObj.RowKeys[i], rowKey);
  211. i++;
  212. }
  213. if (File.Exists(Constants.FastQTempTxtFileName))
  214. File.Delete(Constants.FastQTempTxtFileName);
  215. Console.WriteLine(
  216. "DensePairAnsi BVT : Validation of RowKeysInFile() method successful");
  217. ApplicationLog.WriteLine(
  218. "DensePairAnsi BVT : Validation of RowKeysInFile() method successful");
  219. }
  220. /// <summary>
  221. /// Validates GetInstanceFromSparseInternal method
  222. /// Input : Valid values for DensePairAnsi
  223. /// Validation : gets instance from sparse Internal
  224. /// </summary>
  225. /// This test case will be enabled once the clarification is done.
  226. [TestMethod]
  227. [Priority(0)]
  228. [TestCategory("Priority0")]
  229. public void ValidateDensePairAnsiGetInstanceFromSparseInternal()
  230. {
  231. UOPair<char> uoPairObjMissing = new UOPair<char>('?', '?');
  232. UOPair<char> uoPairObjGood = new UOPair<char>('A', 'T');
  233. RowKeyColKeyValue<string, string, UOPair<char>> rowColKey =
  234. new RowKeyColKeyValue<string, string, UOPair<char>>("R0", "C0", uoPairObjGood);
  235. List<RowKeyColKeyValue<string, string, UOPair<char>>> enumObj =
  236. new List<RowKeyColKeyValue<string, string, UOPair<char>>>();
  237. enumObj.Add(rowColKey);
  238. DensePairAnsi dpaObj = DensePairAnsi.CreateEmptyInstance(
  239. new string[] { "R0" },
  240. new string[] { "C0" },
  241. uoPairObjMissing);
  242. dpaObj.GetInstanceFromSparseInternal(enumObj);
  243. Assert.AreEqual("R0", dpaObj.RowKeys[0]);
  244. Assert.AreEqual("C0", dpaObj.ColKeys[0]);
  245. Assert.AreEqual(0, dpaObj.IndexOfRowKey["R0"]);
  246. Console.WriteLine(
  247. "DensePairAnsi BVT : Validation of GetInstanceFromSparseInternal() method successful");
  248. ApplicationLog.WriteLine(
  249. "DensePairAnsi BVT : Validation of GetInstanceFromSparseInternal() method successful");
  250. }
  251. /// <summary>
  252. /// Validates WriteDensePairAnsi method
  253. /// Input : Valid values for DensePairAnsi
  254. /// Validation : WriteDensePairAnsi method
  255. /// </summary>
  256. [TestMethod]
  257. [Priority(0)]
  258. [TestCategory("Priority0")]
  259. public void ValidateDensePairAnsiWriteDensePairAnsi()
  260. {
  261. List<KeyValuePair<string, UOPair<char>>> keyValListObj =
  262. new List<KeyValuePair<string, UOPair<char>>>();
  263. var enumObj = keyValListObj.GroupBy(x => x.Key);
  264. DensePairAnsi dpaObj = DensePairAnsi.GetInstance(enumObj, '?');
  265. ParallelOptions paObj = new ParallelOptions();
  266. dpaObj.WriteDensePairAnsi(Constants.FastQTempTxtFileName, paObj);
  267. DensePairAnsi newDpaObj =
  268. DensePairAnsi.GetInstance(Constants.FastQTempTxtFileName, paObj);
  269. Assert.IsNotNull(newDpaObj);
  270. Console.WriteLine(
  271. "DensePairAnsi BVT : Validation of WriteDensePairAnsi() method successful");
  272. ApplicationLog.WriteLine(
  273. "DensePairAnsi BVT : Validation of WriteDensePairAnsi() method successful");
  274. }
  275. #endregion
  276. #region Helper Methods
  277. /// <summary>
  278. /// Gets the two D array from the xml
  279. /// </summary>
  280. /// <param name="nodeName">Node Name of the xml to be parsed</param>
  281. /// <param name="maxRows">Maximum rows</param>
  282. /// <param name="maxColumns">Maximum columns</param>
  283. /// <returns>2 D Array</returns>
  284. double[,] GetTwoDArray(string nodeName, out int maxRows,
  285. out int maxColumns)
  286. {
  287. string[] rowArray = utilityObj.xmlUtil.GetTextValues(nodeName, Constants.RowsNode);
  288. // Gets the max number columns in the array
  289. maxColumns = 0;
  290. maxRows = rowArray.Length;
  291. for (int i = 0; i < maxRows; i++)
  292. {
  293. string[] colArray = rowArray[i].Split(',');
  294. if (maxColumns < colArray.Length)
  295. maxColumns = colArray.Length;
  296. }
  297. // Creates a 2 D with max row and column length
  298. double[,] twoDArray = new double[maxRows, maxColumns];
  299. for (int i = 0; i < maxRows; i++)
  300. {
  301. string[] colArray = rowArray[i].Split(',');
  302. for (int j = 0; j < colArray.Length; j++)
  303. {
  304. twoDArray[i, j] = double.Parse(colArray[j], (IFormatProvider)null);
  305. }
  306. }
  307. return twoDArray;
  308. }
  309. /// <summary>
  310. /// Creates a simple matrix for local validation
  311. /// </summary>
  312. /// <returns>Dense Matrix</returns>
  313. static DenseMatrix<string, string, double> CreateSimpleDenseMatrix()
  314. {
  315. double[,] twoDArray = new double[,] { { 11, 11, 11, 11 }, { 12, 13, 14, 15 }, { 13, 14, double.NaN, 15 } };
  316. DenseMatrix<string, string, double> denseMatObj =
  317. new DenseMatrix<string, string, double>(twoDArray,
  318. new string[] { "R0", "R1", "R2" }, new string[] { "C0", "C1", "C2", "C3" }, double.NaN);
  319. return denseMatObj;
  320. }
  321. /// <summary>
  322. /// Gets the key sequence with the max length specified
  323. /// </summary>
  324. /// <param name="maxKey">Max length of the key sequence</param>
  325. /// <param name="isRow">If Row, append R else append C</param>
  326. /// <returns>Key Sequence Array</returns>
  327. static string[] GetKeySequence(int maxKey, bool isRow)
  328. {
  329. string[] keySeq = new string[maxKey];
  330. string tempSeq = string.Empty;
  331. if (isRow)
  332. tempSeq = "R";
  333. else
  334. tempSeq = "C";
  335. for (int i = 0; i < maxKey; i++)
  336. {
  337. keySeq[i] = tempSeq + i.ToString((IFormatProvider)null);
  338. }
  339. return keySeq;
  340. }
  341. /// <summary>
  342. /// Creates a DenseMatrix instance and returns the same.
  343. /// </summary>
  344. /// <returns>DenseMatrix Instance</returns>
  345. DenseMatrix<string, string, double> GetDenseMatrix()
  346. {
  347. int maxRows = 0;
  348. int maxColumns = 0;
  349. double[,] twoDArray = GetTwoDArray(Constants.SimpleMatrixNodeName,
  350. out maxRows, out maxColumns);
  351. string[] rowKeySeq = GetKeySequence(maxRows, true);
  352. string[] colKeySeq = GetKeySequence(maxColumns, false);
  353. DenseMatrix<string, string, double> denseMatrixObj =
  354. new DenseMatrix<string, string, double>(twoDArray, rowKeySeq,
  355. colKeySeq, double.NaN);
  356. return denseMatrixObj;
  357. }
  358. #endregion;
  359. }
  360. }