1--------------------------------
2--  Copyright 1992-2001 Future Parallel
3--  VLSI Design Lab
4--  Library: VFP
5--  Designer: Tim Pagden
6--  Opened: 02.06.2001
7--  Updated: 12.06.2001
8--  DNH: T:/author/dnh/integer_class.dnh
9--------------------------------
10
11entity integer_class_tb is
12--
13-- tests for integer_class package
14--
15end integer_class_tb;
16
17  use std.textio.all;
18library vfp;
19  use vfp.std_verification.all;
20  use vfp.integer_class.all;
21
22architecture tb0 of integer_class_tb is
23
24begin
25
26  process
27    --variable num_chars : integer;
28    variable j : integer;
29    variable k : integer;
30    variable tfi : boolean;
31    --variable bit_width : integer;
32    variable log_line : line;
33    file log_file : text open write_mode is "intclass.log";
34
35  begin
36    debug("Starting tests...");
37    log(log_file, "========  Start of integer_class tests  ========");
38    debug(3);
39    debug("int is ", 3);
40    log(log_file, 3);
41    log(log_file, "int is ", 3);
42    --tb_log(log_file, "==== strlen tests...");
43    --for i in 0 to 9 loop
44    --  log(log_file, string_length(10 ** i));
45    --  log(log_file, string_length(-(10 ** i)));
46    --end loop;
47    log(log_file, "==== binary_wordlength tests...");
48    for i in 0 to 31 loop
49      log(log_file, binary_wordlength(2 ** i));
50      log(log_file, binary_wordlength(-(2 ** i)));
51      --write(log_line, (2 ** i)); -- it's OK 2**31 -> -(2**31) automatically,
52      -- presumably simulator does a shift operation internally!
53    end loop;
54    log(log_file, "==== integer string length tests ...");
55    for i in 0 to 9 loop
56      log(log_file, (integer'IMAGE(10 ** i)))'LENGTH;
57      log(log_file, (integer'IMAGE(-(10 ** i))))'LENGTH;
58    end loop;
59    log(log_file, "==== next_greater_binary_power_minus_1 tests ...");
60    for i in 0 to 31 loop
61      log(log_file, next_greater_binary_power_minus_1(2 ** i));
62      log(log_file, next_greater_binary_power_minus_1(-(2 ** i)));
63    end loop;
64    --tb_log(log_file, "==== is_factor_of_32 tests ...");
65    --for i in 0 to 32 loop
66    --  tfi := is_factor_of_32(i);
67    --  if tfi then
68    --    write(log_line, i);
69    --    write(log_line, string'(" is a factor"));
70    --    -- sprintf("i,s", +integer, string)
71    --    -- unary + takes any operand and returns a string
72    --    -- sprintf("i,s", integer, string)
73    --    writeline(log_file, log_line);
74    --  else
75    --    write(log_line, i);
76    --    write(log_line, string'("..."));
77    --    writeline(log_file, log_line);
78    --  end if;
79    --end loop;
80    write(log_line, string'("==== is_power_of_2 tests ..."));
81    writeline(log_file, log_line);
82    for i in 0 to 31 loop
83      k := 2 ** i;
84      tfi := is_power_of_2(k);
85      if tfi then
86        write(log_line, string'("Correct, "));
87        write(log_line, k);
88        write(log_line, string'(" is a power of 2"));
89        writeline(log_file, log_line);
90      else
91        write(log_line, k);
92        write(log_line, string'(" has not been captured as a power of 2 - it should be!"));
93        writeline(log_file, log_line);
94      end if;
95    end loop;
96    write(log_line, string'("==== log_2 tests ..."));
97    writeline(log_file, log_line);
98    for i in 0 to 31 loop
99      k := (2 ** i)-1;
100      j := log_2(k);
101      write(log_line, k);
102      write(log_line, string'(" , "));
103      write(log_line, j);
104      writeline(log_file, log_line);
105      k := 2 ** i;
106      j := log_2(k);
107      write(log_line, k);
108      write(log_line, string'(" , "));
109      write(log_line, j);
110      writeline(log_file, log_line);
111      k := (2 ** i)+1;
112      j := log_2(k);
113      write(log_line, k);
114      write(log_line, string'(" , "));
115      write(log_line, j);
116      writeline(log_file, log_line);
117    end loop;
118    log(log_file, "========  End of integer_class tests  ========");
119    debug("Tests finished.");
120    wait;
121  end process;
122
123end tb0;
124
125configuration integer_class_tb_cfg_0 of integer_class_tb is
126  for tb0
127  end for;
128end integer_class_tb_cfg_0;
129
130