From 8628baf18b3c4bda0e84d03ffa4f792a8fd927f3 Mon Sep 17 00:00:00 2001 From: Mark Pizzolato Date: Thu, 12 May 2022 13:14:01 -0700 Subject: [PATCH] SCP: Add support for optional device unit tests Some simulators and/or devices may want to provide specific testing activities outside of full simulator execution which often will require external, potentially complicated setup. --- doc/simh.doc | Bin 335872 -> 317952 bytes scp.c | 61 +++++++++++++++++++++++++++++++++++++++++++++++++-- sim_defs.h | 2 ++ 3 files changed, 61 insertions(+), 2 deletions(-) diff --git a/doc/simh.doc b/doc/simh.doc index c68887b6c66d520c0081266230fb0ae034f09e35..f31937ae04981c249010f8388f404b208b708852 100644 GIT binary patch delta 60766 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 diff --git a/scp.c b/scp.c index 110a8e0a..66ea5d94 100644 --- a/scp.c +++ b/scp.c @@ -572,6 +572,7 @@ t_stat set_runlimit (int32 flag, CONST char *cptr); t_stat sim_set_asynch (int32 flag, CONST char *cptr); static const char *_get_dbg_verb (uint32 dbits, DEVICE* dptr, UNIT *uptr); static t_stat sim_sanity_check_register_declarations (DEVICE **devices); +static t_stat sim_device_unit_tests (const char *cptr); static void fix_writelock_mtab (DEVICE *dptr); static t_stat _sim_debug_flush (void); @@ -2717,6 +2718,7 @@ char **targv = NULL; int32 i, sw; t_bool lookswitch; t_bool register_check = FALSE; +t_bool device_unit_tests = FALSE; t_stat stat = SCPE_OK; CTAB *docmdp = NULL; @@ -2738,10 +2740,19 @@ sim_prog_name = argv [0]; /* save a pointer to the if (argc > 1) { /* Check for special argument to invoke register test */ if (sim_strcasecmp (argv[1], "RegisterSanityCheck") == 0) { register_check = TRUE; - --argc; /* Remove special argument to avoid confusion later */ + /* Remove special argument to avoid confusion later */ for (i = 1; i < argc; i++) argv[i] = argv[i+1]; - argv[i+1] = NULL; + --argc; + } + } +if (argc > 1) { /* Check for special argument to invoke register test */ + if (sim_strcasecmp (argv[1], "DeviceUnitTests") == 0) { + device_unit_tests = TRUE; + /* Remove special argument to avoid confusion later */ + for (i = 1; i < argc; i++) + argv[i] = argv[i+1]; + --argc; } } for (i = 1; i < argc; i++) { /* loop thru args */ @@ -2891,6 +2902,36 @@ if ((stat = sim_brk_init ()) != SCPE_OK) { /* always check for register definition problems */ sim_sanity_check_register_declarations (NULL); +if (device_unit_tests) { + int i; + DEVICE *dptr; + int devices_with_tests = 0; + + /* This test is explicitly run after the above reset_all_p() so that + the simulator is in its well initialized state before testing. */ + for (i = 0; (dptr = sim_devices[i]) != NULL; i++) { + if (dptr->unit_test) + ++devices_with_tests; + } + if (devices_with_tests == 0) { + sim_printf ("*** No device unit tests in this %s simulator.\n", sim_name); + sim_exit_status = EXIT_SUCCESS; + goto cleanup_and_exit; + } + sim_printf (" Running device unit tests on %s simulator.\n", sim_name); + if ((stat = sim_device_unit_tests (argv[1])) != SCPE_OK) { + sim_printf ("Simulator device unit tests error\n"); + if (sim_ttisatty()) + read_line_p ("Hit Return to exit: ", cbuf, sizeof (cbuf) - 1, stdin); + sim_exit_status = EXIT_FAILURE; + goto cleanup_and_exit; + } + sim_printf ("*** Good device unit tests in %s simulator.\n", sim_name); + if (argc < 2) { /* No remaining command arguments? */ + sim_exit_status = EXIT_SUCCESS; /* then we're done */ + goto cleanup_and_exit; + } + } signal (SIGINT, int_handler); if (!sim_quiet) { printf ("\n"); @@ -16175,6 +16216,22 @@ MClose (f); return stat; } +static t_stat sim_device_unit_tests (const char *cptr) +{ +int i; +DEVICE *dptr; +t_stat stat = SCPE_OK; + +for (i = 0; (dptr = sim_devices[i]) != NULL; i++) { + if (dptr->unit_test != NULL) { + sim_printf ("Running Unit Test for %s device:\n", dptr->name); + stat = dptr->unit_test (dptr, cptr); + } + } +return stat; +} + + uint8 treg8; uint16 treg16; uint32 treg32; diff --git a/sim_defs.h b/sim_defs.h index 256e7d97..272575f2 100644 --- a/sim_defs.h +++ b/sim_defs.h @@ -522,6 +522,8 @@ struct DEVICE { const char *(*description)(DEVICE *dptr); /* Device Description */ BRKTYPTAB *brk_types; /* Breakpoint types */ void *type_ctx; /* Device Type/Library Context */ + t_stat (*unit_test)(DEVICE *dptr, const char *cptr); + /* Device Unit Test Routine */ }; /* Device flags */