======Testing====== \index{Testing} Once a new module has been written, or if something new should be tried, a new testing-module should be written. A testing-module usually consists of a simple chain with some output that tells the user whether the test has succeeded or not. It is the first step towards writing a Radio and using a new or modified module in real-time. =====Files===== \index{Testing!Files} If you want to start a new test, create a new directory under //Test/// and add the name to the line DIRS = FirstChain Memory ... of the file //Test/Makefile//. Like this your test will be automatically built when using //make whole//. Next //cd// in your new directory and copy some files: cp ../../Conventions/test_template.c ../../Conventions/Makefile.module . The //test_template.c// should be renamed to something fitting the pattern //test_*.c//, and this name should be appended to the line MODULE_NAME == of the //Makefile// (which has been renamed from //Makefile.module//). Now you are ready to modify your //test_*.c// file and test it out, using make make user You can also have a look into different files that you find in the directory //Testing/*// to see different techniques on how to do strange things. =====Main===== \index{Testing!Main} The main-part of the module is in the function //start_it//. It is called once when the module is loaded. For a small testing-module you want to make perhaps only a small chain, something like swr_chain_create( NEW_SPC_VAR( ''random'', rnd ), NEW_SPC( ''modulator'' ), NEW_SPC( ''demodulator'' ), NEW_SPC_VAR( ''sink'', sink ), CHAIN_END ); This leads to an empty chain, because all modules (with the exception of the //STFA// and the //block// module) have an input- and output-size of 0. So we need to set one module to a given size: swr_sdb_set_config_int( sink, ''size'', 128 ); And while we're at it, we can tell the //sink// module, that it should count the occurences of the different values: swr_sdb_set_config_int( sink, ''flag'', 2 ); For further explanation, you can turn to the explanation of the //sink// module. Now that the chain has been created and configured, it still needs to be activated at least once, so that something happens: swr_sdb_seng_msg( rnd, SUBS_MSG_USER, NULL, -1 ); Which sends a user-defined message to the //random// module. It will now traverse the whole chain and the //sink// module will output the occurances of the different values. To compile and start it, type the following commands: make make user As the size of the sink-input is only 128, this will not be very representativ for the random-number generator. You may increase the size of the sink-input to something like 65536 or even more, to see how the random-number generator works.