@@ -525,35 +525,64 @@ TEST(ExternalIOTests, TestNonAvancingInput) {
525
525
struct TestItems {
526
526
std::string item;
527
527
int expectedIoStat;
528
- std::string expectedItemValue;
528
+ std::string expectedItemValue[ 2 ] ;
529
529
};
530
530
// Actual non advancing input IO test
531
531
TestItems inputItems[]{
532
- {std::string (4 , ' +' ), IostatOk, " ABCD" },
533
- {std::string (4 , ' +' ), IostatOk, " EFGH" },
534
- {std::string (4 , ' +' ), IostatEor, " " },
535
- {std::string (2 , ' +' ), IostatOk, " IJ" },
536
- {std::string (8 , ' +' ), IostatEor, " KLMNOP " },
537
- {std::string (10 , ' +' ), IostatEor, " QRSTUVWX " },
532
+ {std::string (4 , ' +' ), IostatOk, " ABCD" , " ABCD " },
533
+ {std::string (4 , ' +' ), IostatOk, " EFGH" , " EFGH " },
534
+ {std::string (4 , ' +' ), IostatEor, " ++++ " , " " },
535
+ {std::string (2 , ' +' ), IostatOk, " IJ" , " IJ " },
536
+ {std::string (8 , ' +' ), IostatEor, " ++++++++ " , " KLMNOP " },
537
+ {std::string (10 , ' +' ), IostatEor, " ++++++++++ " , " QRSTUVWX " },
538
538
};
539
539
540
+ // Test with PAD='NO'
540
541
int j{0 };
541
542
for (auto &inputItem : inputItems) {
542
- // READ(UNIT=unit, FMT=fmt, ADVANCE='NO', IOSTAT=iostat) inputItem
543
+ // READ(UNIT=unit, FMT=fmt, ADVANCE='NO', PAD='NO', IOSTAT=iostat) inputItem
543
544
io = IONAME (BeginExternalFormattedInput)(
544
545
fmt.data (), fmt.length (), nullptr , unit, __FILE__, __LINE__);
545
546
IONAME (EnableHandlers)(io, true , false , false , false , false );
546
547
ASSERT_TRUE (IONAME (SetAdvance)(io, " NO" , 2 )) << " SetAdvance(NO)" << j;
548
+ ASSERT_TRUE (IONAME (SetPad)(io, " NO" , 2 )) << " SetPad(NO)" << j;
547
549
bool result{
548
550
IONAME (InputAscii)(io, inputItem.item .data (), inputItem.item .length ())};
549
551
ASSERT_EQ (result, inputItem.expectedIoStat == IostatOk)
550
552
<< " InputAscii() " << j;
551
553
ASSERT_EQ (IONAME (EndIoStatement)(io), inputItem.expectedIoStat )
552
554
<< " EndIoStatement() for Read " << j;
553
- ASSERT_EQ (inputItem.item , inputItem.expectedItemValue )
555
+ ASSERT_EQ (inputItem.item , inputItem.expectedItemValue [0 ])
556
+ << " Input-item value after non advancing read " << j;
557
+ j++;
558
+ }
559
+
560
+ // REWIND(UNIT=unit)
561
+ io = IONAME (BeginRewind)(unit, __FILE__, __LINE__);
562
+ ASSERT_EQ (IONAME (EndIoStatement)(io), IostatOk)
563
+ << " EndIoStatement() for Rewind" ;
564
+
565
+ // Test again with PAD='YES'
566
+ j = 0 ;
567
+ for (auto &inputItem : inputItems) {
568
+ // READ(UNIT=unit, FMT=fmt, ADVANCE='NO', PAD='YES', IOSTAT=iostat)
569
+ // inputItem
570
+ io = IONAME (BeginExternalFormattedInput)(
571
+ fmt.data (), fmt.length (), nullptr , unit, __FILE__, __LINE__);
572
+ IONAME (EnableHandlers)(io, true , false , false , false , false );
573
+ ASSERT_TRUE (IONAME (SetAdvance)(io, " NO" , 2 )) << " SetAdvance(NO)" << j;
574
+ ASSERT_TRUE (IONAME (SetPad)(io, " YES" , 3 )) << " SetPad(YES)" << j;
575
+ bool result{
576
+ IONAME (InputAscii)(io, inputItem.item .data (), inputItem.item .length ())};
577
+ ASSERT_EQ (result, inputItem.expectedIoStat == IostatOk)
578
+ << " InputAscii() " << j;
579
+ ASSERT_EQ (IONAME (EndIoStatement)(io), inputItem.expectedIoStat )
580
+ << " EndIoStatement() for Read " << j;
581
+ ASSERT_EQ (inputItem.item , inputItem.expectedItemValue [1 ])
554
582
<< " Input-item value after non advancing read " << j;
555
583
j++;
556
584
}
585
+
557
586
// CLOSE(UNIT=unit)
558
587
io = IONAME (BeginClose)(unit, __FILE__, __LINE__);
559
588
ASSERT_EQ (IONAME (EndIoStatement)(io), IostatOk)
0 commit comments