diff options
Diffstat (limited to 'testsuite/vests/vhdl-93/billowitch/compliant/tc1309.vhd')
-rw-r--r-- | testsuite/vests/vhdl-93/billowitch/compliant/tc1309.vhd | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/testsuite/vests/vhdl-93/billowitch/compliant/tc1309.vhd b/testsuite/vests/vhdl-93/billowitch/compliant/tc1309.vhd new file mode 100644 index 000000000..1bf2b6417 --- /dev/null +++ b/testsuite/vests/vhdl-93/billowitch/compliant/tc1309.vhd @@ -0,0 +1,152 @@ + +-- 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: tc1309.vhd,v 1.2 2001-10-26 16:29:39 paw Exp $ +-- $Revision: 1.2 $ +-- +-- --------------------------------------------------------------------- + +package c08s04b00x00p07n01i01309pkg is + + -- Type declarations. + subtype BV2 is BIT_VECTOR( 0 to 1 ); + subtype CH2 is STRING( 1 to 2 ); + + -- Constant declarations. + constant BVC : BV2 := B"00"; + constant CHC : CH2 := "bb"; + + -- Function returns BV2. + function returnBV2 return BV2; + + -- Function returns CH2. + function returnCH2 return CH2; + +end c08s04b00x00p07n01i01309pkg; + +package body c08s04b00x00p07n01i01309pkg is + + -- Function returns BV2. + function returnBV2 return BV2 is + begin + return ( BVC ); + end returnBV2; + + -- Function returns CH2. + function returnCH2 return CH2 is + begin + return( CHC ); + end returnCH2; + +end c08s04b00x00p07n01i01309pkg; + +use work.c08s04b00x00p07n01i01309pkg.all; +ENTITY c08s04b00x00p07n01i01309ent IS +END c08s04b00x00p07n01i01309ent; + +ARCHITECTURE c08s04b00x00p07n01i01309arch OF c08s04b00x00p07n01i01309ent IS + -- Local signals. + signal S : BIT; + signal T : BIT; + + signal C1, C2 : CHARACTER; +BEGIN + TESTING: PROCESS + + -- local variables + variable BITV : BV2 := B"11"; + variable STRV : CH2 := "ab"; + variable ShouldBeTime : TIME; + + variable k : integer := 0; + + BEGIN + -- Assign with a variable as the expression. + ( S, T ) <= BITV after 10 ns; + ShouldBeTime := NOW + 10 ns; + wait on S,T; + if (ShouldBeTime /= Now or S /= BITV(0) or T /= BITV(1)) then + k := 1; + end if; + assert (ShouldBeTime = NOW); + assert ((S = BITV( 0 )) and (T = BITV( 1 ))); + + ( C1,C2 ) <= STRV after 10 ns; + ShouldBeTime := NOW + 10 ns; + wait on C1,C2; + if (ShouldBeTime /= Now or C1 /= STRV(1) or C2 /= STRV(2)) then + k := 1; + end if; + assert (ShouldBeTime = NOW); + assert ((C1 = STRV( 1 )) and (C2 = STRV( 2 ))); + + -- Assign with a function return value. + ( S, T ) <= returnBV2 after 10 ns; + ShouldBeTime := NOW + 10 ns; + wait on S,T; + if (ShouldBeTime /= Now or S /= BVC(0) or T /= BVC(1)) then + k := 1; + end if; + assert (ShouldBeTime = NOW); + assert ((S = BVC( 0 )) and (T = BVC( 1 ))); + + ( C1,C2 ) <= returnCH2 after 10 ns; + ShouldBeTime := NOW + 10 ns; + wait on C1,C2; + if (ShouldBeTime /= Now or C1 /= CHC(1) or C2 /= CHC(2)) then + k := 1; + end if; + assert (ShouldBeTime = NOW); + assert ((C1 = CHC( 1 )) and (C2 = CHC( 2 ))); + + -- Assign with a qualified expression. + ( S, T ) <= BV2'( '0', '1' ) after 10 ns; + ShouldBeTime := NOW + 10 ns; + wait on S,T; + if (ShouldBeTime /= Now or S /= '0' or T /= '1') then + k := 1; + end if; + assert (ShouldBeTime = NOW); + assert ((S = '0') and (T = '1')); + + ( C1,C2 ) <= CH2'( 'c', 'c' ) after 10 ns; + ShouldBeTime := NOW + 10 ns; + wait on C1,C2; + if (ShouldBeTime /= Now or C1 /= 'c' or C2 /= 'c') then + k := 1; + end if; + assert (ShouldBeTime = NOW); + assert ((C1 = 'c') and (C2 = 'c')); + + assert NOT( k = 0 ) + report "***PASSED TEST: c08s04b00x00p07n01i01309" + severity NOTE; + assert ( k = 0 ) + report "***FAILED TEST: c08s04b00x00p07n01i01309 - If the target of the signal assignment statement is in the form of an aggregate, then the type of the aggregate must be determinable from the context." + severity ERROR; + wait; + END PROCESS TESTING; + +END c08s04b00x00p07n01i01309arch; |