Pastey memstruct tests
- Posted by mattlewis (admin) Jun 30, 2011
with trace trace(3) include std/unittest.e include std/dll.e include std/machine.e set_test_verbosity( TEST_SHOW_ALL ) memstruct Var pointer symtab_entry declared_in end memstruct memstruct Block unsigned int first_line unsigned int last_line end memstruct memstruct private_block int task_number pointer private_block next object block[2] end memstruct memstruct Subp pointer object code pointer symtab_entry temps pointer private_block saved_privates pointer object block pointer int linetab unsigned int firstline unsigned int num_args int resident_task unsigned int stack_space end memstruct memunion U Var var Subp subp Block block end memunion memstruct symtab_entry object obj pointer symtab_entry next pointer symtab_entry next_in_block char mode char scope unsigned char file_no unsigned char dummy int token pointer char name U u end memstruct memstruct SymbolTable symtab_entry entries[5] end memstruct integer bits32 = sizeof( C_POINTER ) = 4 procedure basic() ? sizeof( symtab_entry ) atom symtab = allocate( 5 * sizeof( symtab_entry ) ) poke( symtab, repeat( 0, 5 * sizeof( symtab_entry ) ) ) symtab.symtab_entry.obj = 9 symtab.symtab_entry.obj += 5 symtab.symtab_entry.obj -= 2 symtab.symtab_entry.obj *= 6 symtab.symtab_entry.obj /= 3 test_equal("object read / write assignment / read", peek_pointer( symtab ), symtab.symtab_entry.obj ) symtab.symtab_entry[1].obj = 1 symtab.symtab_entry.next = symtab.symtab_entry[1] integer offset if bits32 then offset = 4 else offset = 8 end if test_equal("pointer read / write", peek_pointer( symtab + offset ), symtab.symtab_entry.next) symtab.symtab_entry.next.obj = -42 if bits32 then test_equal( "read / write following pointer (32)", peek4s( symtab + sizeof( symtab_entry)), symtab.symtab_entry.next.obj ) else test_equal( "read / write following pointer (64)", peek8s( symtab + sizeof( symtab_entry)), symtab.symtab_entry.next.obj ) end if symtab.symtab_entry.u.var.declared_in = 0x01010101 test_equal("read / write union member", 0x01010101, symtab.symtab_entry.u.var.declared_in ) -- object serialized = symtab.symtab_entry.u.* -- test_equal("serialize union", {1,1,1,1} & repeat( 0, sizeof( U ) - 4), serialized ) -- serialized = { -- symtab.symtab_entry.obj, -- symtab.symtab_entry.next, -- symtab.symtab_entry.next_in_block, -- symtab.symtab_entry.mode, -- symtab.symtab_entry.scope, -- symtab.symtab_entry.file_no, -- symtab.symtab_entry.dummy, -- symtab.symtab_entry.token, -- symtab.symtab_entry.name, -- symtab.symtab_entry.u.* -- } -- test_equal("serialize struct", serialized, symtab.symtab_entry.* ) -- -- test_equal( "sizeof arrays of structs", sizeof( symtab_entry ) * 5, sizeof( SymbolTable ) ) -- test_equal( "serialize array length", 5, length( symtab.SymbolTable.* ) ) end procedure basic() test_report()


