2424import org .apache .commons .cli .AlreadySelectedException ;
2525import org .apache .commons .cli .MissingOptionException ;
2626import org .apache .commons .cli .ParseException ;
27+ import org .apache .sysds .hops .OptimizerUtils ;
28+ import org .apache .sysds .runtime .instructions .fed .FEDInstruction ;
29+ import org .apache .sysds .runtime .lineage .LineageCacheConfig ;
2730import org .junit .Assert ;
2831import org .junit .Test ;
2932import org .apache .sysds .api .DMLOptions ;
3033import org .apache .sysds .common .Types .ExecMode ;
3134import org .apache .sysds .runtime .lineage .LineageCacheConfig .ReuseCacheType ;
3235import org .apache .sysds .utils .Explain ;
3336
37+ import static org .apache .sysds .api .DMLOptions .parseCLArguments ;
38+
3439@ net .jcip .annotations .NotThreadSafe
3540public class CLIOptionsParserTest {
3641
@@ -162,6 +167,7 @@ public void testLineageReuseP() throws Exception {
162167 Assert .assertEquals (ReuseCacheType .REUSE_PARTIAL , o .linReuseType );
163168 Assert .assertEquals (false , o .lineage_dedup );
164169 }
170+
165171 @ Test
166172 public void testLineageReuseH () throws Exception {
167173 String cl = "systemds -f test.dml -lineage reuse_hybrid" ;
@@ -450,4 +456,193 @@ public void testNVArgs4() throws Exception {
450456 Map <String , String > m = o .argVals ;
451457 Assert .assertEquals ("'def'" , m .get ("$abc" ));
452458 }
459+
460+ @ Test
461+ public void parseCLArgumentsLineageDAGHEIGHTTest () throws ParseException {
462+ String [] args = new String []{"-f" , "test" , "-lineage" , "policy_dagheight" };
463+ DMLOptions opts = parseCLArguments (args );
464+ Assert .assertTrue (opts .lineage && opts .linCachePolicy == LineageCacheConfig .LineageCachePolicy .DAGHEIGHT );
465+ }
466+
467+ @ Test
468+ public void parseCLIArgumentsLineageEstimateTest () throws ParseException {
469+ String [] args = new String []{"-f" , "test" , "-lineage" , "estimate" };
470+ DMLOptions opts = parseCLArguments (args );
471+ Assert .assertTrue (opts .lineage && opts .lineage_estimate );
472+ }
473+
474+ @ Test
475+ public void parseCLArgumentsGPUTest () throws ParseException {
476+ String [] args = new String []{"-f" , "test" , "-gpu" ,};
477+ DMLOptions opts = parseCLArguments (args );
478+ Assert .assertTrue (opts .gpu );
479+ }
480+
481+ @ Test
482+ public void parseCLArgumentsInvalidExplainTest () throws ParseException {
483+ String [] args = new String []{"-f" , "test" ,"-explain" ,"XYZ" };
484+ try {
485+ parseCLArguments (args );
486+ } catch (ParseException e ) {
487+ assert e .getMessage ().equals ("Invalid argument specified for -hops option, must be one of [hops, runtime, recompile_hops, recompile_runtime, codegen, codegen_recompile]" );
488+ }
489+ }
490+
491+ @ Test
492+ public void parseCLArgumentsExplainCodegenRecompileTest () throws ParseException {
493+ String [] args = new String []{"-f" , "test" ,"-explain" ,"codegen_recompile" };
494+ DMLOptions opts = parseCLArguments (args );
495+ Assert .assertEquals (opts .explainType , Explain .ExplainType .CODEGEN_RECOMPILE );
496+ }
497+
498+ @ Test
499+ public void parseCLArgumentsNGramsTest1 () throws ParseException {
500+ String [] args = new String []{"-f" , "test" , "-ngrams" ,};
501+ DMLOptions opts = parseCLArguments (args );
502+ Assert .assertTrue (opts .statsNGrams );
503+ }
504+
505+ @ Test
506+ public void parseCLArgumentsNGramsTest2 () throws ParseException {
507+ String [] args = new String []{"-f" , "test" , "-ngrams" ,"1" };
508+ DMLOptions opts = parseCLArguments (args );
509+ Assert .assertTrue (opts .statsNGrams );
510+ }
511+
512+ @ Test
513+ public void parseCLArgumentsNGramsTest3 () throws ParseException {
514+ String [] args = new String []{"-f" , "test" , "-ngrams" ,"1" ,"1" ,"FALSE" };
515+ DMLOptions opts = parseCLArguments (args );
516+ Assert .assertTrue (opts .statsNGrams );
517+ Assert .assertEquals (opts .statsNGramSizes [0 ], 1 );
518+ Assert .assertEquals (opts .statsTopKNGrams , 1 );
519+ Assert .assertFalse (opts .statsNGramsUseLineage );
520+ }
521+
522+ @ Test
523+ public void parseCLArgumentsNGramsTest4 () throws ParseException {
524+ String [] args = new String []{"-f" , "test" , "-ngrams" ,"1,3" ,"1" };
525+ DMLOptions opts = parseCLArguments (args );
526+ Assert .assertTrue (opts .statsNGrams );
527+ Assert .assertEquals (opts .statsNGramSizes [0 ], 1 );
528+ Assert .assertEquals (opts .statsNGramSizes [1 ], 3 );
529+ Assert .assertEquals (opts .statsTopKNGrams , 1 );
530+ Assert .assertTrue (opts .statsNGramsUseLineage );
531+ }
532+
533+ @ Test
534+ public void parseCLArgumentsNGramsTest5 () throws ParseException {
535+ String [] args = new String []{"-f" , "test" ,"-ngrams" ,"1,2" ,"b" };
536+ try {
537+ parseCLArguments (args );
538+ } catch (ParseException e ) {
539+ assert e .getMessage ().equals ("Invalid argument specified for -ngrams option, must be a valid integer" );
540+ }
541+ }
542+
543+ @ Test
544+ public void parseCLArgumentsFEDStatsTest1 () throws ParseException {
545+ String [] args = new String []{"-f" , "test" , "-fedStats" ,};
546+ DMLOptions opts = parseCLArguments (args );
547+ Assert .assertTrue (opts .fedStats );
548+ }
549+
550+ @ Test
551+ public void parseCLArgumentsFEDStatsTest2 () throws ParseException {
552+ String [] args = new String []{"-f" , "test" , "-fedStats" , "21" };
553+ DMLOptions opts = parseCLArguments (args );
554+ Assert .assertTrue (opts .fedStats );
555+ Assert .assertEquals (21 , opts .fedStatsCount );
556+ }
557+
558+ @ Test
559+ public void parseCLArgumentsFEDStatsTest3 () {
560+ String [] args = new String []{"-f" , "test" , "-fedStats" , "xyz" };
561+ try {
562+ parseCLArguments (args );
563+ } catch (ParseException e ) {
564+ assert e .getMessage ().equals ("Invalid argument specified for -fedStats option, must be a valid integer" );
565+ }
566+ }
567+
568+ @ Test
569+ public void parseCLArgumentsFEDMonitoringTest1 () {
570+ String [] args = new String []{"-fedMonitoring" };
571+ try {
572+ parseCLArguments (args );
573+ } catch (ParseException e ) {
574+ assert e .getMessage ().equals ("No port [integer] specified for -fedMonitoring option" );
575+ }
576+ }
577+
578+ @ Test
579+ public void parseCLArgumentsFEDMonitoringTest2 () {
580+ String [] args = new String []{"-fedMonitoring" ,"21" , "-fedMonitoringAddress" };
581+ try {
582+ parseCLArguments (args );
583+ } catch (ParseException e ) {
584+ assert e .getMessage ().equals ("No address [String] specified for -fedMonitoringAddress option" );
585+ }
586+ }
587+
588+ @ Test
589+ public void parseCLArgumentsFEDMonitoringTest3 () throws ParseException {
590+ String [] args = new String []{"-fedMonitoring" , "21" };
591+ DMLOptions opts = parseCLArguments (args );
592+ Assert .assertTrue (opts .fedMonitoring );
593+ Assert .assertEquals (21 , opts .fedMonitoringPort );
594+ }
595+
596+ @ Test
597+ public void parseCLArgumentsFEDMonitoringTest4 () throws ParseException {
598+ String [] args = new String []{"-fedMonitoring" , "21" , "-fedMonitoringAddress" , "xyz" };
599+ DMLOptions opts = parseCLArguments (args );
600+ Assert .assertTrue (opts .fedMonitoring );
601+ Assert .assertEquals (21 , opts .fedMonitoringPort );
602+ Assert .assertEquals ("xyz" , opts .fedMonitoringAddress );
603+ }
604+
605+ @ Test
606+ public void parseCLArgumentsFEDCompilationTest1 () throws ParseException {
607+ String [] args = new String []{"-f" , "test" , "-federatedCompilation" };
608+ DMLOptions opts = parseCLArguments (args );
609+ Assert .assertTrue (opts .federatedCompilation );
610+ }
611+
612+ @ Test
613+ public void parseCLArgumentsFEDCompilationTest2 () throws ParseException {
614+ String [] args = new String []{"-f" , "test" , "-federatedCompilation" , "1=NONE" };
615+ DMLOptions opts = parseCLArguments (args );
616+ Assert .assertTrue (opts .federatedCompilation );
617+ Assert .assertEquals (OptimizerUtils .FEDERATED_SPECS .get (1 ), FEDInstruction .FederatedOutput .NONE );
618+ }
619+
620+ @ Test
621+ public void parseCLArgumentsFEDCompilationTest3 () {
622+ String [] args = new String []{"-f" ,"test" , "-federatedCompilation" ,"1=n=n" };
623+ try {
624+ parseCLArguments (args );
625+ throw new AssertionError ("Test should have resulted in Exception" );
626+ } catch (ParseException e ){
627+ Assert .assertEquals ("Invalid argument specified for -federatedCompilation option, must be a list of space separated K=V pairs, where K is a line number of the DML script and V is a federated output value" ,e .getMessage ());
628+ }
629+ }
630+
631+ @ Test
632+ public void parseCLArgumentsFEDNoRuntimeConversionTest () throws ParseException {
633+ String [] args = new String []{"-f" , "test" , "-noFedRuntimeConversion" };
634+ DMLOptions opts = parseCLArguments (args );
635+ Assert .assertTrue (opts .noFedRuntimeConversion );
636+ }
637+
638+ @ Test
639+ public void testDMLOptionToString () throws ParseException {
640+ String cl = "systemds -f test.dml -exec spark" ;
641+ String [] args = cl .split (" " );
642+ DMLOptions o = DMLOptions .parseCLArguments (args );
643+ String oString = o .toString ();
644+ Assert .assertTrue (oString .contains ("script='null'" ));
645+ Assert .assertTrue (oString .contains ("filePath='test.dml'" ));
646+ Assert .assertTrue (oString .contains ("execMode=SPARK" ));
647+ }
453648}
0 commit comments