|
3 | 3 | // See the LICENSE file in the project root for more information.
|
4 | 4 |
|
5 | 5 | using System;
|
| 6 | +using System.Globalization; |
6 | 7 | using System.IO;
|
| 8 | +using System.Linq; |
7 | 9 | using System.Text;
|
8 | 10 | using Apache.Arrow;
|
9 | 11 | using Xunit;
|
@@ -603,5 +605,160 @@ Stream GetStream(string streamData)
|
603 | 605 | Assert.Null(df[2, 2]);
|
604 | 606 | Assert.Null(df[5, 3]);
|
605 | 607 | }
|
| 608 | + |
| 609 | + [Fact] |
| 610 | + public void TestWriteCsvWithHeader() |
| 611 | + { |
| 612 | + using MemoryStream csvStream = new MemoryStream(); |
| 613 | + DataFrame dataFrame = MakeDataFrameWithAllColumnTypes(10, true); |
| 614 | + |
| 615 | + DataFrame.WriteCsv(dataFrame, csvStream); |
| 616 | + |
| 617 | + csvStream.Seek(0, SeekOrigin.Begin); |
| 618 | + DataFrame readIn = DataFrame.LoadCsv(csvStream); |
| 619 | + |
| 620 | + Assert.Equal(dataFrame.Rows.Count, readIn.Rows.Count); |
| 621 | + Assert.Equal(dataFrame.Columns.Count, readIn.Columns.Count); |
| 622 | + Assert.Equal(1F, readIn[1, 0]); |
| 623 | + Assert.Equal(1F, readIn[1, 1]); |
| 624 | + Assert.Equal(1F, readIn[1, 2]); |
| 625 | + Assert.Equal(1F, readIn[1, 3]); |
| 626 | + Assert.Equal(1F, readIn[1, 4]); |
| 627 | + Assert.Equal(1F, readIn[1, 5]); |
| 628 | + Assert.Equal(1F, readIn[1, 6]); |
| 629 | + Assert.Equal(1F, readIn[1, 7]); |
| 630 | + Assert.Equal(1F, readIn[1, 8]); |
| 631 | + Assert.Equal(1F, readIn[1, 9]); |
| 632 | + Assert.Equal(1F, readIn[1, 10]); |
| 633 | + } |
| 634 | + |
| 635 | + [Fact] |
| 636 | + public void TestWriteCsvWithCultureInfoRomanianAndSemiColon() |
| 637 | + { |
| 638 | + DataFrame dataFrame = MakeDataFrameWithNumericColumns(10, true); |
| 639 | + dataFrame[1, 1] = 1.1M; |
| 640 | + dataFrame[1, 2] = 1.2D; |
| 641 | + dataFrame[1, 3] = 1.3F; |
| 642 | + |
| 643 | + using MemoryStream csvStream = new MemoryStream(); |
| 644 | + var cultureInfo = new CultureInfo("ro-RO"); |
| 645 | + var separator = ';'; |
| 646 | + DataFrame.WriteCsv(dataFrame, csvStream, separator: separator, cultureInfo: cultureInfo); |
| 647 | + |
| 648 | + csvStream.Seek(0, SeekOrigin.Begin); |
| 649 | + DataFrame readIn = DataFrame.LoadCsv(csvStream, separator: separator); |
| 650 | + |
| 651 | + Assert.Equal(dataFrame.Rows.Count, readIn.Rows.Count); |
| 652 | + Assert.Equal(dataFrame.Columns.Count, readIn.Columns.Count); |
| 653 | + Assert.Equal(1F, readIn[1, 0]); |
| 654 | + |
| 655 | + // LoadCsv does not support culture info, therefore decimal point comma (,) is seen as thousand separator and is ignored when read |
| 656 | + Assert.Equal(11F, readIn[1, 1]); |
| 657 | + Assert.Equal(12F, readIn[1, 2]); |
| 658 | + Assert.Equal(129999992F, readIn[1, 3]); |
| 659 | + |
| 660 | + Assert.Equal(1F, readIn[1, 4]); |
| 661 | + Assert.Equal(1F, readIn[1, 5]); |
| 662 | + Assert.Equal(1F, readIn[1, 6]); |
| 663 | + Assert.Equal(1F, readIn[1, 7]); |
| 664 | + Assert.Equal(1F, readIn[1, 8]); |
| 665 | + Assert.Equal(1F, readIn[1, 9]); |
| 666 | + Assert.Equal(1F, readIn[1, 10]); |
| 667 | + } |
| 668 | + |
| 669 | + [Fact] |
| 670 | + public void TestWriteCsvWithCultureInfo() |
| 671 | + { |
| 672 | + using MemoryStream csvStream = new MemoryStream(); |
| 673 | + DataFrame dataFrame = MakeDataFrameWithNumericColumns(10, true); |
| 674 | + dataFrame[1, 1] = 1.1M; |
| 675 | + dataFrame[1, 2] = 1.2D; |
| 676 | + dataFrame[1, 3] = 1.3F; |
| 677 | + |
| 678 | + var cultureInfo = new CultureInfo("en-US"); |
| 679 | + DataFrame.WriteCsv(dataFrame, csvStream, cultureInfo: cultureInfo); |
| 680 | + |
| 681 | + csvStream.Seek(0, SeekOrigin.Begin); |
| 682 | + DataFrame readIn = DataFrame.LoadCsv(csvStream); |
| 683 | + |
| 684 | + Assert.Equal(dataFrame.Rows.Count, readIn.Rows.Count); |
| 685 | + Assert.Equal(dataFrame.Columns.Count, readIn.Columns.Count); |
| 686 | + Assert.Equal(1F, readIn[1, 0]); |
| 687 | + Assert.Equal(1.1F, readIn[1, 1]); |
| 688 | + Assert.Equal(1.2F, readIn[1, 2]); |
| 689 | + Assert.Equal(1.3F, readIn[1, 3]); |
| 690 | + Assert.Equal(1F, readIn[1, 4]); |
| 691 | + Assert.Equal(1F, readIn[1, 5]); |
| 692 | + Assert.Equal(1F, readIn[1, 6]); |
| 693 | + Assert.Equal(1F, readIn[1, 7]); |
| 694 | + Assert.Equal(1F, readIn[1, 8]); |
| 695 | + Assert.Equal(1F, readIn[1, 9]); |
| 696 | + Assert.Equal(1F, readIn[1, 10]); |
| 697 | + } |
| 698 | + |
| 699 | + [Fact] |
| 700 | + public void TestWriteCsvWithCultureInfoRomanianAndComma() |
| 701 | + { |
| 702 | + using MemoryStream csvStream = new MemoryStream(); |
| 703 | + DataFrame dataFrame = MakeDataFrameWithNumericColumns(10, true); |
| 704 | + |
| 705 | + var cultureInfo = new CultureInfo("ro-RO"); |
| 706 | + var separator = cultureInfo.NumberFormat.NumberDecimalSeparator.First(); |
| 707 | + |
| 708 | + Assert.Throws<ArgumentException>(() => DataFrame.WriteCsv(dataFrame, csvStream, separator: separator, cultureInfo: cultureInfo)); |
| 709 | + } |
| 710 | + |
| 711 | + [Fact] |
| 712 | + public void TestWriteCsvWithNoHeader() |
| 713 | + { |
| 714 | + using MemoryStream csvStream = new MemoryStream(); |
| 715 | + DataFrame dataFrame = MakeDataFrameWithAllColumnTypes(10, true); |
| 716 | + |
| 717 | + DataFrame.WriteCsv(dataFrame, csvStream, header: false); |
| 718 | + |
| 719 | + csvStream.Seek(0, SeekOrigin.Begin); |
| 720 | + DataFrame readIn = DataFrame.LoadCsv(csvStream, header: false); |
| 721 | + |
| 722 | + Assert.Equal(dataFrame.Rows.Count, readIn.Rows.Count); |
| 723 | + Assert.Equal(dataFrame.Columns.Count, readIn.Columns.Count); |
| 724 | + Assert.Equal(1F, readIn[1, 0]); |
| 725 | + Assert.Equal(1F, readIn[1, 1]); |
| 726 | + Assert.Equal(1F, readIn[1, 2]); |
| 727 | + Assert.Equal(1F, readIn[1, 3]); |
| 728 | + Assert.Equal(1F, readIn[1, 4]); |
| 729 | + Assert.Equal(1F, readIn[1, 5]); |
| 730 | + Assert.Equal(1F, readIn[1, 6]); |
| 731 | + Assert.Equal(1F, readIn[1, 7]); |
| 732 | + Assert.Equal(1F, readIn[1, 8]); |
| 733 | + Assert.Equal(1F, readIn[1, 9]); |
| 734 | + Assert.Equal(1F, readIn[1, 10]); |
| 735 | + } |
| 736 | + |
| 737 | + [Fact] |
| 738 | + public void TestWriteCsvWithSemicolonSeparator() |
| 739 | + { |
| 740 | + using MemoryStream csvStream = new MemoryStream(); |
| 741 | + DataFrame dataFrame = MakeDataFrameWithAllColumnTypes(10, true); |
| 742 | + |
| 743 | + var separator = ';'; |
| 744 | + DataFrame.WriteCsv(dataFrame, csvStream, separator: separator); |
| 745 | + |
| 746 | + csvStream.Seek(0, SeekOrigin.Begin); |
| 747 | + DataFrame readIn = DataFrame.LoadCsv(csvStream, separator: separator); |
| 748 | + |
| 749 | + Assert.Equal(dataFrame.Rows.Count, readIn.Rows.Count); |
| 750 | + Assert.Equal(dataFrame.Columns.Count, readIn.Columns.Count); |
| 751 | + Assert.Equal(1F, readIn[1, 0]); |
| 752 | + Assert.Equal(1F, readIn[1, 1]); |
| 753 | + Assert.Equal(1F, readIn[1, 2]); |
| 754 | + Assert.Equal(1F, readIn[1, 3]); |
| 755 | + Assert.Equal(1F, readIn[1, 4]); |
| 756 | + Assert.Equal(1F, readIn[1, 5]); |
| 757 | + Assert.Equal(1F, readIn[1, 6]); |
| 758 | + Assert.Equal(1F, readIn[1, 7]); |
| 759 | + Assert.Equal(1F, readIn[1, 8]); |
| 760 | + Assert.Equal(1F, readIn[1, 9]); |
| 761 | + Assert.Equal(1F, readIn[1, 10]); |
| 762 | + } |
606 | 763 | }
|
607 | 764 | }
|
0 commit comments