ut_codeobj.c

00001 /*
00002 # This file is Copyright 2003, 2006, 2007, 2009 Dean Hall.
00003 #
00004 # This file is part of the Python-on-a-Chip program.
00005 # Python-on-a-Chip is free software: you can redistribute it and/or modify
00006 # it under the terms of the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1.
00007 #
00008 # Python-on-a-Chip is distributed in the hope that it will be useful,
00009 # but WITHOUT ANY WARRANTY; without even the implied warranty of
00010 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
00011 # A copy of the GNU LESSER GENERAL PUBLIC LICENSE Version 2.1
00012 # is seen in the file COPYING up one directory from this.
00013 */
00014 
00015 
00022 #include "CuTest.h"
00023 #include "pm.h"
00024 
00025 
00026 /* BEGIN unit tests ported from Snarf */
00055 uint8_t const test_code_image0[] =
00056 {
00057 #if !defined(HAVE_CLOSURES) && !defined(HAVE_DEBUG_INFO)
00058     0x0A, 0xFD, 0x00, 0x00, 0x40, 0x01, 0x00, 0x04, 
00059     0x02, 0x03, 0x04, 0x00, 0x6D, 0x61, 0x69, 0x6E, 
00060     0x03, 0x04, 0x00, 0x74, 0x65, 0x73, 0x74, 0x04, 
00061     0x02, 0x0A, 0xCF, 0x00, 0x00, 0x43, 0x09, 0x05, 
00062     0x04, 0x01, 0x03, 0x04, 0x00, 0x6D, 0x61, 0x69, 
00063     0x6E, 0x04, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 
00064     0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 
00065     0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 
00066     0x04, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 
00067     0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 
00068     0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x04, 0x04, 
00069     0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 
00070     0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 
00071     0x00, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x7D, 
00072     0x00, 0x00, 0x64, 0x05, 0x00, 0x7D, 0x01, 0x00, 
00073     0x64, 0x06, 0x00, 0x7D, 0x02, 0x00, 0x78, 0x18, 
00074     0x00, 0x7C, 0x01, 0x00, 0x44, 0x5D, 0x10, 0x00, 
00075     0x7D, 0x03, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x03, 
00076     0x00, 0x37, 0x7D, 0x00, 0x00, 0x71, 0x19, 0x00, 
00077     0x57, 0x78, 0x18, 0x00, 0x7C, 0x02, 0x00, 0x44, 
00078     0x5D, 0x10, 0x00, 0x7D, 0x03, 0x00, 0x7C, 0x00, 
00079     0x00, 0x7C, 0x03, 0x00, 0x38, 0x7D, 0x00, 0x00, 
00080     0x71, 0x34, 0x00, 0x57, 0x78, 0x2D, 0x00, 0x7C, 
00081     0x01, 0x00, 0x44, 0x5D, 0x25, 0x00, 0x7D, 0x03, 
00082     0x00, 0x78, 0x1C, 0x00, 0x7C, 0x02, 0x00, 0x44, 
00083     0x5D, 0x14, 0x00, 0x7D, 0x04, 0x00, 0x7C, 0x00, 
00084     0x00, 0x7C, 0x03, 0x00, 0x7C, 0x04, 0x00, 0x14, 
00085     0x37, 0x7D, 0x00, 0x00, 0x71, 0x5C, 0x00, 0x57, 
00086     0x71, 0x4F, 0x00, 0x57, 0x7C, 0x00, 0x00, 0x53, 
00087     0x00, 0x64, 0x00, 0x00, 0x84, 0x00, 0x00, 0x5A, 
00088     0x00, 0x00, 0x65, 0x00, 0x00, 0x83, 0x00, 0x00, 
00089     0x01, 0x64, 0x01, 0x00, 0x53, 
00090 #endif
00091 #if defined(HAVE_CLOSURES) && !defined(HAVE_DEBUG_INFO)
00092 /* utco.py */
00093     0x0A, 0x03, 0x01, 0x00, 0x40, 0x01, 0x00, 0x00, 
00094     0x04, 0x02, 0x03, 0x04, 0x00, 0x6D, 0x61, 0x69, 
00095     0x6E, 0x03, 0x04, 0x00, 0x75, 0x74, 0x63, 0x6F, 
00096     0x04, 0x02, 0x0A, 0xD2, 0x00, 0x00, 0x43, 0x09, 
00097     0x05, 0x00, 0x04, 0x01, 0x03, 0x04, 0x00, 0x6D, 
00098     0x61, 0x69, 0x6E, 0x04, 0x07, 0x00, 0x01, 0x00, 
00099     0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 
00100     0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 
00101     0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00, 
00102     0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 
00103     0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 
00104     0x04, 0x04, 0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 
00105     0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
00106     0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 
00107     0x64, 0x01, 0x00, 0x7D, 0x00, 0x00, 0x64, 0x05, 
00108     0x00, 0x7D, 0x01, 0x00, 0x64, 0x06, 0x00, 0x7D, 
00109     0x02, 0x00, 0x78, 0x18, 0x00, 0x7C, 0x01, 0x00, 
00110     0x44, 0x5D, 0x10, 0x00, 0x7D, 0x03, 0x00, 0x7C, 
00111     0x00, 0x00, 0x7C, 0x03, 0x00, 0x37, 0x7D, 0x00, 
00112     0x00, 0x71, 0x19, 0x00, 0x57, 0x78, 0x18, 0x00, 
00113     0x7C, 0x02, 0x00, 0x44, 0x5D, 0x10, 0x00, 0x7D, 
00114     0x03, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x03, 0x00, 
00115     0x38, 0x7D, 0x00, 0x00, 0x71, 0x34, 0x00, 0x57, 
00116     0x78, 0x2D, 0x00, 0x7C, 0x01, 0x00, 0x44, 0x5D, 
00117     0x25, 0x00, 0x7D, 0x03, 0x00, 0x78, 0x1C, 0x00, 
00118     0x7C, 0x02, 0x00, 0x44, 0x5D, 0x14, 0x00, 0x7D, 
00119     0x04, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x03, 0x00, 
00120     0x7C, 0x04, 0x00, 0x14, 0x37, 0x7D, 0x00, 0x00, 
00121     0x71, 0x5C, 0x00, 0x57, 0x71, 0x4F, 0x00, 0x57, 
00122     0x7C, 0x00, 0x00, 0x53, 0x00, 0x04, 0x00, 0x64, 
00123     0x00, 0x00, 0x84, 0x00, 0x00, 0x5A, 0x00, 0x00, 
00124     0x65, 0x00, 0x00, 0x83, 0x00, 0x00, 0x01, 0x64, 
00125     0x01, 0x00, 0x53, 
00126 #endif
00127 #if !defined(HAVE_CLOSURES) && defined(HAVE_DEBUG_INFO)
00128 /* utco.py */
00129     0x0A, 0x3D, 0x01, 0x00, 0x40, 0x01, 0x00, 0x01, 
00130     0x00, 0x04, 0x02, 0x03, 0x04, 0x00, 0x6D, 0x61, 
00131     0x69, 0x6E, 0x03, 0x04, 0x00, 0x75, 0x74, 0x63, 
00132     0x6F, 0x03, 0x02, 0x00, 0x09, 0x12, 0x03, 0x08, 
00133     0x00, 0x75, 0x74, 0x63, 0x6F, 0x2E, 0x70, 0x79, 
00134     0x00, 0x04, 0x02, 0x0A, 0xFD, 0x00, 0x00, 0x43, 
00135     0x09, 0x05, 0x01, 0x00, 0x04, 0x01, 0x03, 0x04, 
00136     0x00, 0x6D, 0x61, 0x69, 0x6E, 0x03, 0x1E, 0x00, 
00137     0x00, 0x02, 0x06, 0x01, 0x06, 0x01, 0x06, 0x02, 
00138     0x07, 0x00, 0x06, 0x01, 0x0E, 0x02, 0x07, 0x00, 
00139     0x06, 0x01, 0x0E, 0x02, 0x07, 0x00, 0x06, 0x01, 
00140     0x07, 0x00, 0x06, 0x01, 0x16, 0x02, 0x03, 0x08, 
00141     0x00, 0x75, 0x74, 0x63, 0x6F, 0x2E, 0x70, 0x79, 
00142     0x00, 0x04, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, 
00143     0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 
00144     0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 
00145     0x04, 0x04, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 
00146     0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 
00147     0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x04, 0x04, 
00148     0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 
00149     0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 
00150     0x00, 0x00, 0x00, 0x00, 0x64, 0x01, 0x00, 0x7D, 
00151     0x00, 0x00, 0x64, 0x05, 0x00, 0x7D, 0x01, 0x00, 
00152     0x64, 0x06, 0x00, 0x7D, 0x02, 0x00, 0x78, 0x18, 
00153     0x00, 0x7C, 0x01, 0x00, 0x44, 0x5D, 0x10, 0x00, 
00154     0x7D, 0x03, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x03, 
00155     0x00, 0x37, 0x7D, 0x00, 0x00, 0x71, 0x19, 0x00, 
00156     0x57, 0x78, 0x18, 0x00, 0x7C, 0x02, 0x00, 0x44, 
00157     0x5D, 0x10, 0x00, 0x7D, 0x03, 0x00, 0x7C, 0x00, 
00158     0x00, 0x7C, 0x03, 0x00, 0x38, 0x7D, 0x00, 0x00, 
00159     0x71, 0x34, 0x00, 0x57, 0x78, 0x2D, 0x00, 0x7C, 
00160     0x01, 0x00, 0x44, 0x5D, 0x25, 0x00, 0x7D, 0x03, 
00161     0x00, 0x78, 0x1C, 0x00, 0x7C, 0x02, 0x00, 0x44, 
00162     0x5D, 0x14, 0x00, 0x7D, 0x04, 0x00, 0x7C, 0x00, 
00163     0x00, 0x7C, 0x03, 0x00, 0x7C, 0x04, 0x00, 0x14, 
00164     0x37, 0x7D, 0x00, 0x00, 0x71, 0x5C, 0x00, 0x57, 
00165     0x71, 0x4F, 0x00, 0x57, 0x7C, 0x00, 0x00, 0x53, 
00166     0x00, 0x64, 0x00, 0x00, 0x84, 0x00, 0x00, 0x5A, 
00167     0x00, 0x00, 0x65, 0x00, 0x00, 0x83, 0x00, 0x00, 
00168     0x01, 0x64, 0x01, 0x00, 0x53, 
00169 #endif
00170 #if defined(HAVE_CLOSURES) && defined(HAVE_DEBUG_INFO)
00171 /* utco.py */
00172     0x0A, 0x43, 0x01, 0x00, 0x40, 0x01, 0x00, 0x00, 
00173     0x01, 0x00, 0x04, 0x02, 0x03, 0x04, 0x00, 0x6D, 
00174     0x61, 0x69, 0x6E, 0x03, 0x04, 0x00, 0x75, 0x74, 
00175     0x63, 0x6F, 0x03, 0x02, 0x00, 0x09, 0x12, 0x03, 
00176     0x08, 0x00, 0x75, 0x74, 0x63, 0x6F, 0x2E, 0x70, 
00177     0x79, 0x00, 0x04, 0x02, 0x0A, 0x00, 0x01, 0x00, 
00178     0x43, 0x09, 0x05, 0x00, 0x01, 0x00, 0x04, 0x01, 
00179     0x03, 0x04, 0x00, 0x6D, 0x61, 0x69, 0x6E, 0x03, 
00180     0x1E, 0x00, 0x00, 0x02, 0x06, 0x01, 0x06, 0x01, 
00181     0x06, 0x02, 0x07, 0x00, 0x06, 0x01, 0x0E, 0x02, 
00182     0x07, 0x00, 0x06, 0x01, 0x0E, 0x02, 0x07, 0x00, 
00183     0x06, 0x01, 0x07, 0x00, 0x06, 0x01, 0x16, 0x02, 
00184     0x03, 0x08, 0x00, 0x75, 0x74, 0x63, 0x6F, 0x2E, 
00185     0x70, 0x79, 0x00, 0x04, 0x07, 0x00, 0x01, 0x00, 
00186     0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 
00187     0x01, 0x02, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 
00188     0x00, 0x00, 0x04, 0x04, 0x01, 0x00, 0x00, 0x00, 
00189     0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 
00190     0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 
00191     0x04, 0x04, 0x01, 0x03, 0x00, 0x00, 0x00, 0x01, 
00192     0x02, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 
00193     0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 
00194     0x64, 0x01, 0x00, 0x7D, 0x00, 0x00, 0x64, 0x05, 
00195     0x00, 0x7D, 0x01, 0x00, 0x64, 0x06, 0x00, 0x7D, 
00196     0x02, 0x00, 0x78, 0x18, 0x00, 0x7C, 0x01, 0x00, 
00197     0x44, 0x5D, 0x10, 0x00, 0x7D, 0x03, 0x00, 0x7C, 
00198     0x00, 0x00, 0x7C, 0x03, 0x00, 0x37, 0x7D, 0x00, 
00199     0x00, 0x71, 0x19, 0x00, 0x57, 0x78, 0x18, 0x00, 
00200     0x7C, 0x02, 0x00, 0x44, 0x5D, 0x10, 0x00, 0x7D, 
00201     0x03, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x03, 0x00, 
00202     0x38, 0x7D, 0x00, 0x00, 0x71, 0x34, 0x00, 0x57, 
00203     0x78, 0x2D, 0x00, 0x7C, 0x01, 0x00, 0x44, 0x5D, 
00204     0x25, 0x00, 0x7D, 0x03, 0x00, 0x78, 0x1C, 0x00, 
00205     0x7C, 0x02, 0x00, 0x44, 0x5D, 0x14, 0x00, 0x7D, 
00206     0x04, 0x00, 0x7C, 0x00, 0x00, 0x7C, 0x03, 0x00, 
00207     0x7C, 0x04, 0x00, 0x14, 0x37, 0x7D, 0x00, 0x00, 
00208     0x71, 0x5C, 0x00, 0x57, 0x71, 0x4F, 0x00, 0x57, 
00209     0x7C, 0x00, 0x00, 0x53, 0x00, 0x04, 0x00, 0x64, 
00210     0x00, 0x00, 0x84, 0x00, 0x00, 0x5A, 0x00, 0x00, 
00211     0x65, 0x00, 0x00, 0x83, 0x00, 0x00, 0x01, 0x64, 
00212     0x01, 0x00, 0x53, 
00213 #endif
00214 
00215 /* img-list-terminator */
00216     0xFF, 
00217 };
00218 
00219 
00225 void
00226 ut_co_loadFromImg_000(CuTest *tc)
00227 {
00228     PmReturn_t retval;
00229     uint8_t const *paddr = test_code_image0;
00230     uint8_t const *pimg = test_code_image0;
00231     pPmObj_t pcodeobject;
00232     uint16_t size;
00233 
00234     pm_init(MEMSPACE_RAM, C_NULL);
00235 
00236     /* Check the return value of the load function */
00237     retval = obj_loadFromImg(MEMSPACE_PROG, &pimg, &pcodeobject);
00238     CuAssertTrue(tc, retval == PM_RET_OK);
00239 
00240     /* Size occurs one byte after the type */
00241     paddr++;
00242     size = mem_getWord(MEMSPACE_PROG, &paddr);
00243 
00244     /* Check that pimg now points to one byte past the end of the image */
00245     CuAssertTrue(tc, pimg == (test_code_image0 + size));
00246     
00247 #ifdef HAVE_DEBUG_INFO
00248     CuAssertTrue(tc, ((pPmCo_t)pcodeobject)->co_filename != C_NULL);
00249     CuAssertTrue(tc, ((pPmCo_t)pcodeobject)->co_lnotab != C_NULL);
00250     CuAssertTrue(tc, ((pPmCo_t)pcodeobject)->co_firstlineno != 0xAAAA);
00251 #endif
00252 
00253 }
00254 /* END unit tests ported from Snarf */
00255 
00256 
00258 CuSuite *getSuite_testCodeObj(void)
00259 {
00260     CuSuite* suite = CuSuiteNew();
00261 
00262     SUITE_ADD_TEST(suite, ut_co_loadFromImg_000);
00263 
00264     return suite;
00265 }

Generated on Mon Oct 18 07:40:47 2010 for Python-on-a-chip by  doxygen 1.5.9