@@ -442,34 +442,14 @@ struct test_result {
442
442
}
443
443
};
444
444
445
- // Forward declarations for the visitor pattern
446
- struct message_visitor ;
447
-
448
- // Base class for all message types that can be printed
449
- struct message_data {
450
- virtual ~message_data () {}
451
- virtual void accept (message_visitor& visitor) const = 0;
452
- };
453
-
454
- // Message visitor interface
455
- struct message_visitor {
456
- virtual ~message_visitor () {}
457
- virtual void visit (const struct test_operation_info & info) = 0;
458
- virtual void visit (const struct test_summary_info & info) = 0;
459
- virtual void visit (const struct testing_start_info & info) = 0;
460
- virtual void visit (const struct backend_init_info & info) = 0;
461
- virtual void visit (const struct backend_status_info & info) = 0;
462
- virtual void visit (const struct overall_summary_info & info) = 0;
463
- };
464
-
465
445
// Printer classes for different output formats
466
446
enum class test_status_t {
467
447
NOT_SUPPORTED,
468
448
OK,
469
449
FAIL
470
450
};
471
451
472
- struct test_operation_info : public message_data {
452
+ struct test_operation_info {
473
453
std::string op_name;
474
454
std::string op_params;
475
455
std::string backend_name;
@@ -501,10 +481,6 @@ struct test_operation_info : public message_data {
501
481
test_status_t status = test_status_t ::OK, const std::string& failure_reason = " " )
502
482
: op_name(op_name), op_params(op_params), backend_name(backend_name), status(status), failure_reason(failure_reason) {}
503
483
504
- void accept (message_visitor& visitor) const override {
505
- visitor.visit (*this );
506
- }
507
-
508
484
// Set error information
509
485
void set_error (const std::string& component, const std::string& details) {
510
486
has_error = true ;
@@ -550,32 +526,24 @@ struct test_operation_info : public message_data {
550
526
}
551
527
};
552
528
553
- struct test_summary_info : public message_data {
529
+ struct test_summary_info {
554
530
size_t tests_passed;
555
531
size_t tests_total;
556
532
bool is_backend_summary = false ; // true for backend summary, false for test summary
557
533
558
534
test_summary_info () = default ;
559
535
test_summary_info (size_t tests_passed, size_t tests_total, bool is_backend_summary = false )
560
536
: tests_passed(tests_passed), tests_total(tests_total), is_backend_summary(is_backend_summary) {}
561
-
562
- void accept (message_visitor& visitor) const override {
563
- visitor.visit (*this );
564
- }
565
537
};
566
538
567
- struct testing_start_info : public message_data {
539
+ struct testing_start_info {
568
540
size_t device_count;
569
541
570
542
testing_start_info () = default ;
571
543
testing_start_info (size_t device_count) : device_count(device_count) {}
572
-
573
- void accept (message_visitor& visitor) const override {
574
- visitor.visit (*this );
575
- }
576
544
};
577
545
578
- struct backend_init_info : public message_data {
546
+ struct backend_init_info {
579
547
size_t device_index;
580
548
size_t total_devices;
581
549
std::string device_name;
@@ -593,75 +561,39 @@ struct backend_init_info : public message_data {
593
561
: device_index(device_index), total_devices(total_devices), device_name(device_name), skipped(skipped),
594
562
skip_reason (skip_reason), description(description), memory_total_mb(memory_total_mb),
595
563
memory_free_mb(memory_free_mb), has_memory_info(has_memory_info) {}
596
-
597
- void accept (message_visitor& visitor) const override {
598
- visitor.visit (*this );
599
- }
600
564
};
601
565
602
- struct backend_status_info : public message_data {
566
+ struct backend_status_info {
603
567
std::string backend_name;
604
568
test_status_t status;
605
569
606
570
backend_status_info () = default ;
607
571
backend_status_info (const std::string& backend_name, test_status_t status)
608
572
: backend_name(backend_name), status(status) {}
609
-
610
- void accept (message_visitor& visitor) const override {
611
- visitor.visit (*this );
612
- }
613
573
};
614
574
615
- struct overall_summary_info : public message_data {
575
+ struct overall_summary_info {
616
576
size_t backends_passed;
617
577
size_t backends_total;
618
578
bool all_passed;
619
579
620
580
overall_summary_info () = default ;
621
581
overall_summary_info (size_t backends_passed, size_t backends_total, bool all_passed)
622
582
: backends_passed(backends_passed), backends_total(backends_total), all_passed(all_passed) {}
623
-
624
- void accept (message_visitor& visitor) const override {
625
- visitor.visit (*this );
626
- }
627
583
};
628
584
629
- struct printer : public message_visitor {
585
+ struct printer {
630
586
virtual ~printer () {}
631
587
FILE * fout = stdout;
632
588
virtual void print_header () {}
633
589
virtual void print_test_result (const test_result & result) = 0;
634
590
virtual void print_footer () {}
635
-
636
- void print_message (const message_data& data) {
637
- data.accept (*this );
638
- }
639
-
640
- // Default implementations for all visit methods (no-op)
641
- // Derived classes can override only the ones they care about
642
- void visit (const test_operation_info& info) override {
643
- (void )info;
644
- }
645
-
646
- void visit (const test_summary_info& info) override {
647
- (void )info;
648
- }
649
-
650
- void visit (const testing_start_info& info) override {
651
- (void )info;
652
- }
653
-
654
- void visit (const backend_init_info& info) override {
655
- (void )info;
656
- }
657
-
658
- void visit (const backend_status_info& info) override {
659
- (void )info;
660
- }
661
-
662
- void visit (const overall_summary_info& info) override {
663
- (void )info;
664
- }
591
+ virtual void print_operation (const test_operation_info & info) { (void ) info; }
592
+ virtual void print_summary (const test_summary_info & info) { (void ) info; }
593
+ virtual void print_testing_start (const testing_start_info & info) { (void ) info; }
594
+ virtual void print_backend_init (const backend_init_info & info) { (void ) info; }
595
+ virtual void print_backend_status (const backend_status_info & info) { (void ) info; }
596
+ virtual void print_overall_summary (const overall_summary_info & info) { (void ) info; }
665
597
};
666
598
667
599
struct console_printer : public printer {
@@ -674,7 +606,7 @@ struct console_printer : public printer {
674
606
}
675
607
676
608
// Visitor pattern implementations
677
- void visit (const test_operation_info& info) override {
609
+ void print_operation (const test_operation_info& info) override {
678
610
printf (" %s(%s): " , info.op_name .c_str (), info.op_params .c_str ());
679
611
fflush (stdout);
680
612
@@ -729,15 +661,15 @@ struct console_printer : public printer {
729
661
}
730
662
}
731
663
732
- void visit (const test_summary_info& info) override {
664
+ void print_summary (const test_summary_info& info) override {
733
665
if (info.is_backend_summary ) {
734
666
printf (" %zu/%zu backends passed\n " , info.tests_passed , info.tests_total );
735
667
} else {
736
668
printf (" %zu/%zu tests passed\n " , info.tests_passed , info.tests_total );
737
669
}
738
670
}
739
671
740
- void visit (const backend_status_info& info) override {
672
+ void print_backend_status (const backend_status_info& info) override {
741
673
printf (" Backend %s: " , info.backend_name .c_str ());
742
674
if (info.status == test_status_t ::OK) {
743
675
printf (" \033 [1;32mOK\033 [0m\n " );
@@ -746,11 +678,11 @@ struct console_printer : public printer {
746
678
}
747
679
}
748
680
749
- void visit (const testing_start_info& info) override {
681
+ void print_testing_start (const testing_start_info& info) override {
750
682
printf (" Testing %zu devices\n\n " , info.device_count );
751
683
}
752
684
753
- void visit (const backend_init_info& info) override {
685
+ void print_backend_init (const backend_init_info& info) override {
754
686
printf (" Backend %zu/%zu: %s\n " , info.device_index + 1 , info.total_devices , info.device_name .c_str ());
755
687
756
688
if (info.skipped ) {
@@ -769,7 +701,7 @@ struct console_printer : public printer {
769
701
printf (" \n " );
770
702
}
771
703
772
- void visit (const overall_summary_info& info) override {
704
+ void print_overall_summary (const overall_summary_info& info) override {
773
705
printf (" %zu/%zu backends passed\n " , info.backends_passed , info.backends_total );
774
706
if (info.all_passed ) {
775
707
printf (" \033 [1;32mOK\033 [0m\n " );
@@ -1331,12 +1263,12 @@ struct test_case {
1331
1263
}
1332
1264
1333
1265
if (out->type != GGML_TYPE_F32) {
1334
- output_printer->print_message (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend), test_status_t ::NOT_SUPPORTED, out->name + std::string (" ->type != FP32" )));
1266
+ output_printer->print_operation (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend), test_status_t ::NOT_SUPPORTED, out->name + std::string (" ->type != FP32" )));
1335
1267
return true ;
1336
1268
}
1337
1269
1338
1270
// Print operation info first
1339
- output_printer->print_message (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend)));
1271
+ output_printer->print_operation (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend)));
1340
1272
1341
1273
// check if the backend supports the ops
1342
1274
bool supported = true ;
@@ -1364,7 +1296,7 @@ struct test_case {
1364
1296
}
1365
1297
1366
1298
if (!supported) {
1367
- output_printer->print_message (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend), test_status_t ::NOT_SUPPORTED, failure_reason));
1299
+ output_printer->print_operation (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend), test_status_t ::NOT_SUPPORTED, failure_reason));
1368
1300
return true ;
1369
1301
}
1370
1302
@@ -1377,7 +1309,7 @@ struct test_case {
1377
1309
if (ngrads > grad_nmax ()) {
1378
1310
test_operation_info info (op_desc (out), vars (), ggml_backend_name (backend));
1379
1311
info.set_large_tensor_skip ();
1380
- output_printer->print_message (info);
1312
+ output_printer->print_operation (info);
1381
1313
return true ;
1382
1314
}
1383
1315
@@ -1400,12 +1332,12 @@ struct test_case {
1400
1332
1401
1333
for (ggml_tensor * t = ggml_get_first_tensor (ctx.get ()); t != NULL ; t = ggml_get_next_tensor (ctx.get (), t)) {
1402
1334
if (!ggml_backend_supports_op (backend, t)) {
1403
- output_printer->print_message (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend), test_status_t ::NOT_SUPPORTED, ggml_backend_name (backend)));
1335
+ output_printer->print_operation (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend), test_status_t ::NOT_SUPPORTED, ggml_backend_name (backend)));
1404
1336
supported = false ;
1405
1337
break ;
1406
1338
}
1407
1339
if ((t->flags & GGML_TENSOR_FLAG_PARAM) && t->type != GGML_TYPE_F32) {
1408
- output_printer->print_message (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend), test_status_t ::NOT_SUPPORTED, std::string (t->name ) + " ->type != FP32" ));
1340
+ output_printer->print_operation (test_operation_info (op_desc (out), vars (), ggml_backend_name (backend), test_status_t ::NOT_SUPPORTED, std::string (t->name ) + " ->type != FP32" ));
1409
1341
supported = false ;
1410
1342
break ;
1411
1343
}
@@ -1419,7 +1351,7 @@ struct test_case {
1419
1351
if (buf == NULL ) {
1420
1352
test_operation_info info (op_desc (out), vars (), ggml_backend_name (backend));
1421
1353
info.set_error (" allocation" , " " );
1422
- output_printer->print_message (info);
1354
+ output_printer->print_operation (info);
1423
1355
return false ;
1424
1356
}
1425
1357
@@ -1459,7 +1391,7 @@ struct test_case {
1459
1391
if (!std::isfinite (ga[i])) {
1460
1392
test_operation_info info (op_desc (out), vars (), ggml_backend_name (backend));
1461
1393
info.set_gradient_info (i, bn, ga[i]);
1462
- output_printer->print_message (info);
1394
+ output_printer->print_operation (info);
1463
1395
ok = false ;
1464
1396
break ;
1465
1397
}
@@ -1529,7 +1461,7 @@ struct test_case {
1529
1461
if (err > max_maa_err ()) {
1530
1462
test_operation_info info (op_desc (out), vars (), ggml_backend_name (backend));
1531
1463
info.set_maa_error (err, max_maa_err ());
1532
- output_printer->print_message (info);
1464
+ output_printer->print_operation (info);
1533
1465
ok = false ;
1534
1466
break ;
1535
1467
}
@@ -1544,7 +1476,7 @@ struct test_case {
1544
1476
final_info.set_compare_failure ();
1545
1477
}
1546
1478
final_info.status = ok ? test_status_t ::OK : test_status_t ::FAIL;
1547
- output_printer->print_message (final_info);
1479
+ output_printer->print_operation (final_info);
1548
1480
1549
1481
if (ok) {
1550
1482
return true ;
@@ -5582,7 +5514,7 @@ static bool test_backend(ggml_backend_t backend, test_mode mode, const char * op
5582
5514
if (backend_cpu == NULL ) {
5583
5515
test_operation_info info (" " , " " , " CPU" );
5584
5516
info.set_error (" backend" , " Failed to initialize CPU backend" );
5585
- output_printer->print_message (info);
5517
+ output_printer->print_operation (info);
5586
5518
return false ;
5587
5519
}
5588
5520
@@ -5592,7 +5524,7 @@ static bool test_backend(ggml_backend_t backend, test_mode mode, const char * op
5592
5524
n_ok++;
5593
5525
}
5594
5526
}
5595
- output_printer->print_message (test_summary_info (n_ok, test_cases.size (), false ));
5527
+ output_printer->print_summary (test_summary_info (n_ok, test_cases.size (), false ));
5596
5528
5597
5529
ggml_backend_free (backend_cpu);
5598
5530
@@ -5608,7 +5540,7 @@ static bool test_backend(ggml_backend_t backend, test_mode mode, const char * op
5608
5540
n_ok++;
5609
5541
}
5610
5542
}
5611
- output_printer->print_message (test_summary_info (n_ok, test_cases.size (), false ));
5543
+ output_printer->print_summary (test_summary_info (n_ok, test_cases.size (), false ));
5612
5544
5613
5545
return n_ok == test_cases.size ();
5614
5546
}
@@ -5695,21 +5627,21 @@ int main(int argc, char ** argv) {
5695
5627
output_printer->print_header ();
5696
5628
}
5697
5629
5698
- output_printer->print_message (testing_start_info (ggml_backend_dev_count ()));
5630
+ output_printer->print_testing_start (testing_start_info (ggml_backend_dev_count ()));
5699
5631
5700
5632
size_t n_ok = 0 ;
5701
5633
5702
5634
for (size_t i = 0 ; i < ggml_backend_dev_count (); i++) {
5703
5635
ggml_backend_dev_t dev = ggml_backend_dev_get (i);
5704
5636
5705
5637
if (backend_filter != NULL && strcmp (backend_filter, ggml_backend_dev_name (dev)) != 0 ) {
5706
- output_printer->print_message (backend_init_info (i, ggml_backend_dev_count (), ggml_backend_dev_name (dev), true , " Skipping" ));
5638
+ output_printer->print_backend_init (backend_init_info (i, ggml_backend_dev_count (), ggml_backend_dev_name (dev), true , " Skipping" ));
5707
5639
n_ok++;
5708
5640
continue ;
5709
5641
}
5710
5642
5711
5643
if (backend_filter == NULL && ggml_backend_dev_type (dev) == GGML_BACKEND_DEVICE_TYPE_CPU && mode != MODE_GRAD) {
5712
- output_printer->print_message (backend_init_info (i, ggml_backend_dev_count (), ggml_backend_dev_name (dev), true , " Skipping CPU backend" ));
5644
+ output_printer->print_backend_init (backend_init_info (i, ggml_backend_dev_count (), ggml_backend_dev_name (dev), true , " Skipping CPU backend" ));
5713
5645
n_ok++;
5714
5646
continue ;
5715
5647
}
@@ -5726,14 +5658,14 @@ int main(int argc, char ** argv) {
5726
5658
5727
5659
size_t free, total; // NOLINT
5728
5660
ggml_backend_dev_memory (dev, &free, &total);
5729
- output_printer->print_message (backend_init_info (i, ggml_backend_dev_count (), ggml_backend_dev_name (dev), false , " " , ggml_backend_dev_description (dev), total / 1024 / 1024 , free / 1024 / 1024 , true ));
5661
+ output_printer->print_backend_init (backend_init_info (i, ggml_backend_dev_count (), ggml_backend_dev_name (dev), false , " " , ggml_backend_dev_description (dev), total / 1024 / 1024 , free / 1024 / 1024 , true ));
5730
5662
5731
5663
bool ok = test_backend (backend, mode, op_name_filter, params_filter, output_printer.get ());
5732
5664
5733
5665
if (ok) {
5734
5666
n_ok++;
5735
5667
}
5736
- output_printer->print_message (backend_status_info (ggml_backend_name (backend), ok ? test_status_t ::OK : test_status_t ::FAIL));
5668
+ output_printer->print_backend_status (backend_status_info (ggml_backend_name (backend), ok ? test_status_t ::OK : test_status_t ::FAIL));
5737
5669
5738
5670
ggml_backend_free (backend);
5739
5671
}
@@ -5744,7 +5676,7 @@ int main(int argc, char ** argv) {
5744
5676
output_printer->print_footer ();
5745
5677
}
5746
5678
5747
- output_printer->print_message (overall_summary_info (n_ok, ggml_backend_dev_count (), n_ok == ggml_backend_dev_count ()));
5679
+ output_printer->print_overall_summary (overall_summary_info (n_ok, ggml_backend_dev_count (), n_ok == ggml_backend_dev_count ()));
5748
5680
5749
5681
if (n_ok != ggml_backend_dev_count ()) {
5750
5682
return 1 ;
0 commit comments