aboutsummaryrefslogtreecommitdiffstats
path: root/testsuite/gna/bug7751
diff options
context:
space:
mode:
authorTristan Gingold <tgingold@free.fr>2013-12-18 05:53:22 +0100
committerTristan Gingold <tgingold@free.fr>2013-12-18 05:53:22 +0100
commitbd4aff0f670351c0652cf24e9b04361dc0e3a01c (patch)
treeafcc1050ac74fc64b5756e2550bc32ea61d1e7bb /testsuite/gna/bug7751
parent5fde24d46fae799e6c0723850097a8fccd64d747 (diff)
downloadghdl-bd4aff0f670351c0652cf24e9b04361dc0e3a01c.tar.gz
ghdl-bd4aff0f670351c0652cf24e9b04361dc0e3a01c.tar.bz2
ghdl-bd4aff0f670351c0652cf24e9b04361dc0e3a01c.zip
Add initial testsuite, using regression tests from bugs or support
reported on gna.org
Diffstat (limited to 'testsuite/gna/bug7751')
-rw-r--r--testsuite/gna/bug7751/7751_tests.vhd119
-rwxr-xr-xtestsuite/gna/bug7751/testsuite.sh10
2 files changed, 129 insertions, 0 deletions
diff --git a/testsuite/gna/bug7751/7751_tests.vhd b/testsuite/gna/bug7751/7751_tests.vhd
new file mode 100644
index 000000000..8feebc074
--- /dev/null
+++ b/testsuite/gna/bug7751/7751_tests.vhd
@@ -0,0 +1,119 @@
+entity top is
+end top;
+
+architecture sim of top is
+
+-------------- static value ----------------------
+
+ -- static value : enumeration
+ constant boolstr : string := "false";
+ constant off : boolean := boolean'value("FALSE");
+ -- static value : integer
+ constant numstr : string := "5";
+ -- static value : float
+ constant fpstr1 : string := "123.4567";
+ constant fpstr2 : string := "123.4567e-3";
+ constant fpstr3 : string := "-123.4567e4";
+
+ constant fp0 : real := real'value("123.4567");
+ constant fp1 : real := real'value(fpstr1);
+ constant fp2 : real := real'value(fpstr2);
+ constant fp3 : real := real'value(fpstr3);
+
+ -- static value : physical
+ constant t_val_static : time := time'value("123 ns");
+
+-------------- static image ----------------------
+
+ -- static image : enumeration
+ constant bool_img1 : string := boolean'image(False);
+ constant bool_img2 : string := boolean'image(True);
+
+ -- static image : integer
+ constant int_img : string := integer'image(123);
+
+ -- static image : float
+ constant fpimg0 : string := real'image(fp0);
+ constant fpimg1 : string := real'image(fp1);
+ constant fpimg2 : string := real'image(fp2);
+ constant fpimg3 : string := real'image(fp3);
+
+ constant t_img_static : string := time'image(456 ps);
+ -- physical types always evaluated at runtime...
+
+-------------- runtime value ----------------------
+ -- runtime integer
+ signal my_int : integer := 5;
+ signal my_str1 : string(1 to 1) := "5";
+ -- runtime boolean
+ signal my_bool : boolean := true;
+
+ -- runtime float
+ signal my_flt : real := 0.0;
+
+-------------- runtime image ----------------------
+ -- runtime(signal) physical
+ signal t : time := time'value("789 US");
+
+ function t_img (t : time) return string is
+ begin
+ return time'image(t);
+ end t_img;
+
+
+begin
+-- Value tests : static enumeration expressions.
+ Assert boolean'value("FALSE") report "Bool Assertion triggered" severity NOTE;
+ Assert boolean'value(boolstr) report "Bool Assertion triggered" severity NOTE;
+-- Value tests : static integer expressions.
+ Assert 2 + 2 = natural'value("5") report "Integer Assertion triggered" severity NOTE;
+ Assert 2 + 2 = natural'value(numstr) report "Integer Assertion triggered" severity NOTE;
+-- Value tests : static real expressions.
+ Assert false report "real'value(""123.4567"" = " & real'image(fp0) severity NOTE;
+-- Value tests : static physical expressions. Use time and at least one other phys unit.
+ Assert false report "123 ns is " & time'image(t_val_static) severity note;
+-- To check compiler error diagnosis, uncomment these.
+-- Assert boolean'value(79) report "Assertion triggered" severity NOTE;
+-- Assert boolean'value(False) report "Assertion triggered" severity NOTE;
+-- Assert boolean'value("SILLY") report "Assertion triggered" severity NOTE;
+
+
+-- Image tests : static enumeration expressions.
+ Assert false report "Boolean can be " & boolean'image(True) & " or " & boolean'image(False) severity Note;
+ Assert false report "Static Boolean can be " & bool_img1 & " or " & bool_img2 severity Note;
+-- Image tests : static integer expressions.
+ Assert false report "Integer image of 123 is " & int_img severity note;
+-- Image tests : static real expressions.
+ Assert false report "123.4567" & " = " & fpimg0 severity note;
+ Assert false report "123.4567" & " = " & real'image(fp0) severity note;
+ Assert false report "124.4567" & " = " & real'image(fp0 + 1.0) severity note;
+ -- These assert despite nominally equal values.
+ Assert fp0 = real'value(fpimg0) report "123.4567" & " = " & fpimg0 severity note;
+ Assert fp1 = real'value(fpimg1) report fpstr1 & " = " & fpimg1 severity note;
+ Assert fp2 = real'value(fpimg2) report fpstr2 & " = " & fpimg2 severity note;
+ Assert fp3 = real'value(fpimg3) report fpstr3 & " = " & fpimg3 severity note;
+ -- So verify that the differences are not actually 0
+ Assert false report "fp0 - real'value(fpimg0) = " & real'image(fp0 - real'value(fpimg0)) severity note;
+ Assert false report "fp1 - real'value(fpimg1) = " & real'image(fp1 - real'value(fpimg1)) severity note;
+ Assert false report "fp2 - real'value(fpimg2) = " & real'image(fp2 - real'value(fpimg2)) severity note;
+ Assert false report "fp3 - real'value(fpimg3) = " & real'image(fp3 - real'value(fpimg3)) severity note;
+ -- Image tests : static physical expressions
+ Assert false report "456 ps is " & t_img_static severity note;
+
+-- Value tests : runtime expressions
+ Assert boolean'value("FALSE") report "Assertion triggered" severity NOTE;
+ Assert boolean'value(boolstr) report "Assertion triggered" severity NOTE;
+ Assert my_bool report "Boolean my_bool = " & boolean'image(my_bool) severity NOTE;
+
+ my_str1(1) <= '6' after 1 ns, '4' after 2 ns;
+ my_flt <= fp0 after 3 ns;
+ my_bool <= False after 4 ns;
+ Assert my_flt = 0.0 report "my_flt = " & real'image(my_flt) severity note;
+ Assert 2 + 2 = natural'value(my_str1) report "RT Assertion 1 triggered" severity NOTE;
+ Assert 2 + 2 /= natural'value(my_str1) report "RT Assertion 2 triggered" severity NOTE;
+ Assert my_bool report "Boolean my_bool = " & boolean'image(my_bool) severity NOTE;
+
+-- Image tests : runtime physical expressions.
+ Assert false report "Time " & t_img(123 us) severity note;
+
+end sim;
diff --git a/testsuite/gna/bug7751/testsuite.sh b/testsuite/gna/bug7751/testsuite.sh
new file mode 100755
index 000000000..c927f8f83
--- /dev/null
+++ b/testsuite/gna/bug7751/testsuite.sh
@@ -0,0 +1,10 @@
+#! /bin/sh
+
+. ../../testenv.sh
+
+analyze 7751_tests.vhd
+elab_simulate top
+
+clean
+
+echo "Test successful"