@@ -567,6 +567,282 @@ func TestAt(t *testing.T) {
567
567
}
568
568
}
569
569
570
+ func testWriteFileViaSlice (t * testing.T , filename string , ft * FileTest ) {
571
+ f , err := CreateFile (filename , CLOBBER | NETCDF4 )
572
+ if err != nil {
573
+ t .Fatalf ("Create failed: %v\n " , err )
574
+ }
575
+ dims := make ([]Dim , len (ft .DimNames ))
576
+ for i , name := range ft .DimNames {
577
+ if dims [i ], err = f .AddDim (name , ft .DimLens [i ]); err != nil {
578
+ t .Fatalf ("PutDim failed: %v\n " , err )
579
+ }
580
+ }
581
+ v , err := f .AddVar (ft .VarName , ft .DataType , dims )
582
+ if err != nil {
583
+ t .Fatalf ("PutVar failed: %v\n " , err )
584
+ }
585
+ ft .putAttrs (t , v )
586
+
587
+ n , err := v .LenDims ()
588
+ if err != nil {
589
+ t .Fatalf ("Var.LenDims failed: %v\n " , err )
590
+ }
591
+ switch ft .DataType {
592
+ default :
593
+ t .Fatalf ("unexpected type %v\n " , ft .DataType )
594
+ case UINT64 :
595
+ err = testWriteUint64Slice (v , n )
596
+ case INT64 :
597
+ err = testWriteInt64Slice (v , n )
598
+ case DOUBLE :
599
+ err = testWriteFloat64Slice (v , n )
600
+ case UINT :
601
+ err = testWriteUint32Slice (v , n )
602
+ case INT :
603
+ err = testWriteInt32Slice (v , n )
604
+ case FLOAT :
605
+ err = testWriteFloat32Slice (v , n )
606
+ case USHORT :
607
+ err = testWriteUint16Slice (v , n )
608
+ case SHORT :
609
+ err = testWriteInt16Slice (v , n )
610
+ case UBYTE :
611
+ err = testWriteUint8Slice (v , n )
612
+ case BYTE :
613
+ err = testWriteInt8Slice (v , n )
614
+ case CHAR :
615
+ err = testWriteBytesSlice (v , n )
616
+ }
617
+ if err != nil {
618
+ t .Errorf ("%v: writing data failed: %v\n " , ft .DataType , err )
619
+ }
620
+ if err := f .Close (); err != nil {
621
+ t .Fatalf ("Close failed: %v\n " , err )
622
+ }
623
+ }
624
+
625
+ func testReadFileViaSlice (t * testing.T , filename string , ft * FileTest ) {
626
+ f , err := OpenFile (filename , NOWRITE )
627
+ if err != nil {
628
+ t .Fatalf ("Open failed: %v\n " , err )
629
+ }
630
+ for i , name := range ft .DimNames {
631
+ d , err := f .Dim (name )
632
+ if err != nil {
633
+ t .Fatalf ("GetDim failed: %v\n " , err )
634
+ }
635
+ s , err := d .Name ()
636
+ if err != nil {
637
+ t .Fatalf ("Dim.Name failed: %v\n " , err )
638
+ }
639
+ if err == nil && s != name {
640
+ t .Fatalf ("Dim name is %q; expected %q\n " , s , name )
641
+ }
642
+ n , err := d .Len ()
643
+ if err != nil {
644
+ t .Fatalf ("Dim.Len failed: %v\n " , err )
645
+ }
646
+ if err == nil && n != ft .DimLens [i ] {
647
+ t .Fatalf ("Dim length is %d; expected %d\n " , n , ft .DimLens [i ])
648
+ }
649
+ }
650
+ v , err := f .Var (ft .VarName )
651
+ if err != nil {
652
+ t .Errorf ("GetVar failed: %v\n " , err )
653
+ }
654
+ ft .getAttrs (t , v )
655
+
656
+ n , err := v .LenDims ()
657
+ if err != nil {
658
+ t .Fatalf ("Var.LenDims failed: %v\n " , err )
659
+ }
660
+ switch ft .DataType {
661
+ default :
662
+ t .Fatalf ("unexpected type %v\n " , ft .DataType )
663
+ case UINT64 :
664
+ err = testReadUint64Slice (v , n )
665
+ case INT64 :
666
+ err = testReadInt64Slice (v , n )
667
+ case DOUBLE :
668
+ err = testReadFloat64Slice (v , n )
669
+ case UINT :
670
+ err = testReadUint32Slice (v , n )
671
+ case INT :
672
+ err = testReadInt32Slice (v , n )
673
+ case FLOAT :
674
+ err = testReadFloat32Slice (v , n )
675
+ case USHORT :
676
+ err = testReadUint16Slice (v , n )
677
+ case SHORT :
678
+ err = testReadInt16Slice (v , n )
679
+ case UBYTE :
680
+ err = testReadUint8Slice (v , n )
681
+ case BYTE :
682
+ err = testReadInt8Slice (v , n )
683
+ case CHAR :
684
+ err = testReadBytesSlice (v , n )
685
+ }
686
+ if err != nil {
687
+ t .Fatalf ("reading data failed: %v\n " , err )
688
+ }
689
+ if err := f .Close (); err != nil {
690
+ t .Fatalf ("Close failed: %v\n " , err )
691
+ }
692
+ }
693
+
694
+ func TestSlice (t * testing.T ) {
695
+ for _ , ft := range getFileTests () {
696
+ f , err := ioutil .TempFile ("" , "netcdf_test" )
697
+ if err != nil {
698
+ t .Fatalf ("creating temporary file failed: %v\n " , err )
699
+ }
700
+ testWriteFileViaSlice (t , f .Name (), & ft )
701
+ testReadFileViaSlice (t , f .Name (), & ft )
702
+ if err := os .Remove (f .Name ()); err != nil {
703
+ t .Errorf ("removing temporary file failed: %v\n " , err )
704
+ }
705
+ }
706
+ }
707
+
708
+ func testWriteFileViaStridedSlice (t * testing.T , filename string , ft * FileTest ) {
709
+ f , err := CreateFile (filename , CLOBBER | NETCDF4 )
710
+ if err != nil {
711
+ t .Fatalf ("Create failed: %v\n " , err )
712
+ }
713
+ dims := make ([]Dim , len (ft .DimNames ))
714
+ for i , name := range ft .DimNames {
715
+ if dims [i ], err = f .AddDim (name , ft .DimLens [i ]); err != nil {
716
+ t .Fatalf ("PutDim failed: %v\n " , err )
717
+ }
718
+ }
719
+ v , err := f .AddVar (ft .VarName , ft .DataType , dims )
720
+ if err != nil {
721
+ t .Fatalf ("PutVar failed: %v\n " , err )
722
+ }
723
+ ft .putAttrs (t , v )
724
+
725
+ n , err := v .LenDims ()
726
+ if err != nil {
727
+ t .Fatalf ("Var.LenDims failed: %v\n " , err )
728
+ }
729
+ switch ft .DataType {
730
+ default :
731
+ t .Fatalf ("unexpected type %v\n " , ft .DataType )
732
+ case UINT64 :
733
+ err = testWriteUint64StridedSlice (v , n )
734
+ case INT64 :
735
+ err = testWriteInt64StridedSlice (v , n )
736
+ case DOUBLE :
737
+ err = testWriteFloat64StridedSlice (v , n )
738
+ case UINT :
739
+ err = testWriteUint32StridedSlice (v , n )
740
+ case INT :
741
+ err = testWriteInt32StridedSlice (v , n )
742
+ case FLOAT :
743
+ err = testWriteFloat32StridedSlice (v , n )
744
+ case USHORT :
745
+ err = testWriteUint16StridedSlice (v , n )
746
+ case SHORT :
747
+ err = testWriteInt16StridedSlice (v , n )
748
+ case UBYTE :
749
+ err = testWriteUint8StridedSlice (v , n )
750
+ case BYTE :
751
+ err = testWriteInt8StridedSlice (v , n )
752
+ case CHAR :
753
+ err = testWriteBytesStridedSlice (v , n )
754
+ }
755
+ if err != nil {
756
+ t .Errorf ("%v: writing data failed: %v\n " , ft .DataType , err )
757
+ }
758
+ if err := f .Close (); err != nil {
759
+ t .Fatalf ("Close failed: %v\n " , err )
760
+ }
761
+ }
762
+
763
+ func testReadFileViaStridedSlice (t * testing.T , filename string , ft * FileTest ) {
764
+ f , err := OpenFile (filename , NOWRITE )
765
+ if err != nil {
766
+ t .Fatalf ("Open failed: %v\n " , err )
767
+ }
768
+ for i , name := range ft .DimNames {
769
+ d , err := f .Dim (name )
770
+ if err != nil {
771
+ t .Fatalf ("GetDim failed: %v\n " , err )
772
+ }
773
+ s , err := d .Name ()
774
+ if err != nil {
775
+ t .Fatalf ("Dim.Name failed: %v\n " , err )
776
+ }
777
+ if err == nil && s != name {
778
+ t .Fatalf ("Dim name is %q; expected %q\n " , s , name )
779
+ }
780
+ n , err := d .Len ()
781
+ if err != nil {
782
+ t .Fatalf ("Dim.Len failed: %v\n " , err )
783
+ }
784
+ if err == nil && n != ft .DimLens [i ] {
785
+ t .Fatalf ("Dim length is %d; expected %d\n " , n , ft .DimLens [i ])
786
+ }
787
+ }
788
+ v , err := f .Var (ft .VarName )
789
+ if err != nil {
790
+ t .Errorf ("GetVar failed: %v\n " , err )
791
+ }
792
+ ft .getAttrs (t , v )
793
+
794
+ n , err := v .LenDims ()
795
+ if err != nil {
796
+ t .Fatalf ("Var.LenDims failed: %v\n " , err )
797
+ }
798
+ switch ft .DataType {
799
+ default :
800
+ t .Fatalf ("unexpected type %v\n " , ft .DataType )
801
+ case UINT64 :
802
+ err = testReadUint64StridedSlice (v , n )
803
+ case INT64 :
804
+ err = testReadInt64StridedSlice (v , n )
805
+ case DOUBLE :
806
+ err = testReadFloat64StridedSlice (v , n )
807
+ case UINT :
808
+ err = testReadUint32StridedSlice (v , n )
809
+ case INT :
810
+ err = testReadInt32StridedSlice (v , n )
811
+ case FLOAT :
812
+ err = testReadFloat32StridedSlice (v , n )
813
+ case USHORT :
814
+ err = testReadUint16StridedSlice (v , n )
815
+ case SHORT :
816
+ err = testReadInt16StridedSlice (v , n )
817
+ case UBYTE :
818
+ err = testReadUint8StridedSlice (v , n )
819
+ case BYTE :
820
+ err = testReadInt8StridedSlice (v , n )
821
+ case CHAR :
822
+ err = testReadBytesStridedSlice (v , n )
823
+ }
824
+ if err != nil {
825
+ t .Fatalf ("reading data failed: %v\n " , err )
826
+ }
827
+ if err := f .Close (); err != nil {
828
+ t .Fatalf ("Close failed: %v\n " , err )
829
+ }
830
+ }
831
+
832
+ func TestStridedSlice (t * testing.T ) {
833
+ for _ , ft := range getFileTests () {
834
+ f , err := ioutil .TempFile ("" , "netcdf_test" )
835
+ if err != nil {
836
+ t .Fatalf ("creating temporary file failed: %v\n " , err )
837
+ }
838
+ testWriteFileViaStridedSlice (t , f .Name (), & ft )
839
+ testReadFileViaStridedSlice (t , f .Name (), & ft )
840
+ if err := os .Remove (f .Name ()); err != nil {
841
+ t .Errorf ("removing temporary file failed: %v\n " , err )
842
+ }
843
+ }
844
+ }
845
+
570
846
func TestCompression (t * testing.T ) {
571
847
f , err := ioutil .TempFile ("" , "netcdf_test" )
572
848
if err != nil {
0 commit comments