|
19 | 19 | using System.Threading.Tasks; |
20 | 20 | using Xunit.Abstractions; |
21 | 21 | using Microsoft.ML.TestFramework; |
| 22 | +using Microsoft.VisualStudio.TestPlatform.PlatformAbstractions.Interfaces; |
22 | 23 |
|
23 | 24 | namespace Microsoft.Data.Analysis.Tests |
24 | 25 | { |
@@ -1017,16 +1018,15 @@ public void TestSaveCsvWithCultureInfoRomanianAndSemiColon() |
1017 | 1018 | DataFrame.SaveCsv(dataFrame, csvStream, separator: separator, cultureInfo: cultureInfo); |
1018 | 1019 |
|
1019 | 1020 | csvStream.Seek(0, SeekOrigin.Begin); |
1020 | | - DataFrame readIn = DataFrame.LoadCsv(csvStream, separator: separator); |
| 1021 | + DataFrame readIn = DataFrame.LoadCsv(csvStream, separator: separator, cultureInfo: cultureInfo); |
1021 | 1022 |
|
1022 | 1023 | Assert.Equal(dataFrame.Rows.Count, readIn.Rows.Count); |
1023 | 1024 | Assert.Equal(dataFrame.Columns.Count, readIn.Columns.Count); |
1024 | 1025 | Assert.Equal(1F, readIn[1, 0]); |
1025 | 1026 |
|
1026 | | - // LoadCsv does not support culture info, therefore decimal point comma (,) is seen as thousand separator and is ignored when read |
1027 | | - Assert.Equal(11F, readIn[1, 1]); |
1028 | | - Assert.Equal(12F, readIn[1, 2]); |
1029 | | - Assert.Equal(129999992F, readIn[1, 3]); |
| 1027 | + Assert.Equal(1.1F, readIn[1, 1]); |
| 1028 | + Assert.Equal(1.2F, readIn[1, 2]); |
| 1029 | + Assert.Equal(1.3F, readIn[1, 3]); |
1030 | 1030 |
|
1031 | 1031 | Assert.Equal(1F, readIn[1, 4]); |
1032 | 1032 | Assert.Equal(1F, readIn[1, 5]); |
@@ -1079,6 +1079,63 @@ public void TestSaveCsvWithCultureInfoRomanianAndComma() |
1079 | 1079 | Assert.Throws<ArgumentException>(() => DataFrame.SaveCsv(dataFrame, csvStream, separator: separator, cultureInfo: cultureInfo)); |
1080 | 1080 | } |
1081 | 1081 |
|
| 1082 | + [Fact] |
| 1083 | + public void TestSaveCsvWithCultureInfoAndDateTimeColumn() |
| 1084 | + { |
| 1085 | + using MemoryStream csvStream = new MemoryStream(); |
| 1086 | + var dateColumn = new DateTimeDataFrameColumn("Date", 3); |
| 1087 | + DataFrame dataFrame = new DataFrame(); |
| 1088 | + dataFrame.Columns.Add(dateColumn); |
| 1089 | + dateColumn[0] = DateTime.Today; |
| 1090 | + dateColumn[1] = DateTime.Today.AddDays(1); |
| 1091 | + dateColumn[2] = null; |
| 1092 | + |
| 1093 | + var cultureInfo = new CultureInfo("en-US"); |
| 1094 | + cultureInfo.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"; |
| 1095 | + cultureInfo.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"; |
| 1096 | + cultureInfo.DateTimeFormat.LongTimePattern = "HH:mm:ss"; |
| 1097 | + cultureInfo.DateTimeFormat.ShortTimePattern = "HH:mm:ss"; |
| 1098 | + |
| 1099 | + DataFrame.SaveCsv(dataFrame, csvStream, cultureInfo: cultureInfo, header: false); |
| 1100 | + |
| 1101 | + csvStream.Seek(0, SeekOrigin.Begin); |
| 1102 | + |
| 1103 | + StreamReader reader = new StreamReader(csvStream); |
| 1104 | + var text = reader.ReadToEnd().Split(["\r\n", "\r", "\n"], StringSplitOptions.None); |
| 1105 | + |
| 1106 | + Assert.Equal(dateColumn[0].Value.ToString(cultureInfo), text[0]); |
| 1107 | + Assert.Equal(dateColumn[1].Value.ToString(cultureInfo), text[1]); |
| 1108 | + Assert.True(string.IsNullOrEmpty(text[2])); |
| 1109 | + } |
| 1110 | + |
| 1111 | + [Fact] |
| 1112 | + public void TestSaveAndReadCsvWithCultureInfoAndDateTimeColumn() |
| 1113 | + { |
| 1114 | + using MemoryStream csvStream = new MemoryStream(); |
| 1115 | + var dateColumn = new DateTimeDataFrameColumn("Date", 3); |
| 1116 | + DataFrame dataFrame = new DataFrame(); |
| 1117 | + dataFrame.Columns.Add(dateColumn); |
| 1118 | + dateColumn[0] = DateTime.Today; |
| 1119 | + dateColumn[1] = DateTime.Today.AddDays(1); |
| 1120 | + dateColumn[2] = DateTime.Today.AddDays(2); |
| 1121 | + |
| 1122 | + var cultureInfo = new CultureInfo("en-US"); |
| 1123 | + cultureInfo.DateTimeFormat.LongDatePattern = "yyyy-MM-dd"; |
| 1124 | + cultureInfo.DateTimeFormat.ShortDatePattern = "yyyy-MM-dd"; |
| 1125 | + cultureInfo.DateTimeFormat.LongTimePattern = "HH:mm:ss"; |
| 1126 | + cultureInfo.DateTimeFormat.ShortTimePattern = "HH:mm:ss"; |
| 1127 | + |
| 1128 | + DataFrame.SaveCsv(dataFrame, csvStream, cultureInfo: cultureInfo, header: true); |
| 1129 | + |
| 1130 | + csvStream.Seek(0, SeekOrigin.Begin); |
| 1131 | + |
| 1132 | + DataFrame readIn = DataFrame.LoadCsv(csvStream, cultureInfo: cultureInfo); |
| 1133 | + |
| 1134 | + Assert.Equal(dateColumn[0], readIn[0, 0]); |
| 1135 | + Assert.Equal(dateColumn[1], readIn[1, 0]); |
| 1136 | + Assert.Equal(dateColumn[2], readIn[2, 0]); |
| 1137 | + } |
| 1138 | + |
1082 | 1139 | [Fact] |
1083 | 1140 | public void TestSaveCsvWithNoHeader() |
1084 | 1141 | { |
|
0 commit comments