Trace File Arguments Are Not Always Files

In practically all programming assignments, at least one command line argument is a file from which SIM should read random values from (in lieu of using a library specific pRNG). The [Assignments/TraceFiles|TraceFiles] page has sample files for use in development.

Beware that grader.sh scripts don't usually provide a static regular file as these argument! Instead they use input redirection to connect a program generating a possibly infinite sequence of values to your SIM. This means that if you attempt to read all random values into an array or list, your SIM is going to "hang" --- it will dutifully read in an infinite collection of doubles until you exhaust machine memory.

An easy way to manage this is to create a TraceFile object that accepts a filename as a constructor parameter and provides a single getRandom() member function that returns a floating point value. Of simply write a getRandom( tracefile ) global function that accepts an open file descriptor (object, pointer, handle, the terminology depends on the language) and returns the next double from the file.

Why are things so complicated you ask?

By using redirection as the source for your SIM random numbers, grader.sh can be written with tests to be sure the random numbers are being used properly,<<Footnote(Depending on the system being modeled)>> it is easy to incorporate pRNG streams into the mix without worrying about which language a student is using, and by providing fake sequence of random values...

$ ./SIM <(yes 0.5)

certain types of consistency checks can be automated without micro-managing how student programs are written.

Beware the VSCode IDE installed on alamode

The integrated terminal in the VSCode has been shown to be whacky when running Python code. If you choose to use this IDE, you are strongly advised to use a separate terminal window to test your SIM.