-- Copyright (C) 2001 Bill Billowitch. -- Some of the work to develop this test suite was done with Air Force -- support. The Air Force and Bill Billowitch assume no -- responsibilities for this software. -- This file is part of VESTs (Vhdl tESTs). -- VESTs is free software; you can redistribute it and/or modify it -- under the terms of the GNU General Public License as published by the -- Free Software Foundation; either version 2 of the License, or (at -- your option) any later version. -- VESTs is distributed in the hope that it will be useful, but WITHOUT -- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or -- FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License -- for more details. -- You should have received a copy of the GNU General Public License -- along with VESTs; if not, write to the Free Software Foundation, -- Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- --------------------------------------------------------------------- -- -- $Id: tc493.vhd,v 1.2 2001-10-26 16:29:55 paw Exp $ -- $Revision: 1.2 $ -- -- --------------------------------------------------------------------- ENTITY c03s02b02x00p01n01i00493ent IS END c03s02b02x00p01n01i00493ent; ARCHITECTURE c03s02b02x00p01n01i00493arch OF c03s02b02x00p01n01i00493ent IS type etype is (one,two,three,four,five,six,seven); type TR is record i : integer; b : bit; bo : boolean; bv : bit_vector (0 to 3); r : real; t : time; e : etype; c : character; end record; type T1 is record t : time; b : bit; i : integer; bo : boolean; r : real; bv : bit_vector (0 to 3); e : etype; c : character; end record; function FUNC1(recd1: TR) return T1 is variable recd2:T1; begin recd2.bv := recd1.bv; recd2.b := recd1.b; recd2.bo := recd1.bo; recd2.i := recd1.i; recd2.r := recd1.r; recd2.t := recd1.t; recd2.e := recd1.e; recd2.c := recd1.c; return recd2; end FUNC1; function FUNC2(recd1: TR) return integer is begin return recd1.i; end; function FUNC3(recd1: TR) return bit is begin return recd1.b; end; function FUNC4(recd1: TR) return boolean is begin return recd1.bo; end; function FUNC5(recd1: TR) return bit_vector is begin return recd1.bv; end; function FUNC6(recd1: TR) return real is begin return recd1.r; end; function FUNC7(recd1: TR) return time is begin return recd1.t; end; function FUNC8(recd1: TR) return etype is begin return recd1.e; end; function FUNC9(recd1: TR) return character is begin return recd1.c; end; BEGIN TESTING: PROCESS variable var1: TR; variable var2: T1; variable OkayCount: integer := 0; BEGIN wait for 1 ns; var2 := (bv=>"0000",b=>'0',bo=>false,i=>0,r=>0.0,t=>1 ms,e=>one,c=>'a'); var1 := (bv=>"0001",b=>'1',bo=>true,i=>777,r=>333.767,t=>44 ms,e=>seven,c=>'%'); var2 := FUNC1(var1); if var2 = (bv=>"0001",b=>'1',bo=>true,i=>777,r=>333.767,t=>44 ms,e=>seven,c=>'%') then OkayCount := OkayCount + 1; else assert false report "bad return on FUNC1" severity note; end if; var2 := (bv=>"0000",b=>'0',bo=>false,i=>0,r=>0.0,t=>1 ms,e=>one,c=>'a'); if var2 = (bv=>"0000",b=>'0',bo=>false,i=>0,r=>0.0,t=>1 ms,e=>one,c=>'a') then OkayCount := OkayCount + 1; end if; var2.i := FUNC2(var1);wait for 1 ns;assert var2.i=777 report "i no good" severity note; var2.b := FUNC3(var1);wait for 1 ns;assert var2.b='1' report "b no good" severity note; var2.bo := FUNC4(var1);wait for 1 ns;assert var2.bo=true report "bo no good" severity note; var2.bv := FUNC5(var1);wait for 1 ns;assert var2.bv="0001" report "bv no good" severity note; var2.r := FUNC6(var1);wait for 1 ns;assert var2.r=333.767 report "r no good" severity note; var2.t := FUNC7(var1);wait for 1 ns;assert var2.t=44 ms report "t no good" severity note; var2.e := FUNC8(var1);wait for 1 ns;assert var2.e=seven report "e no good" severity note; var2.c := FUNC9(var1);wait for 1 ns;assert var2.c='%' report "c no good" severity note; if var2 = (bv=>"0001",b=>'1',bo=>true,i=>777,r=>333.767,t=>44 ms,e=>seven,c=>'%') then OkayCount := OkayCount + 1; else assert false report "bad return on FUNC2-9" severity note; end if; wait for 1 ns; assert NOT( OkayCount = 3 ) report "***PASSED TEST: c03s02b02x00p01n01i00493" severity NOTE; assert ( OkayCount = 3 ) report "***FAILED TEST: c03s02b02x00p01n01i00493 - Problem assigning record subelements in function." severity ERROR; wait; END PROCESS TESTING; END c03s02b02x00p01n01i00493arch;