Reorganize tests into a real spec suite

This commit is contained in:
2024-08-04 19:18:43 -03:00
parent 57c160173c
commit e7c2053222
693 changed files with 136 additions and 116 deletions

View File

@ -0,0 +1,157 @@
# Examine tokens emitted by the SV lexer for a trivial module.
# Not intended to stress any particular corner of the language.
---input---
// Adder flops the sum of its inputs
module Adder #(
parameter int N = 42
) (
output logic [N-1:0] y,
output logic co,
input logic [N-1:0] a,
input logic [N-1:0] b,
input logic ci,
input logic clk
);
always_ff @(posedge clk) begin
{co, y} <= a + b + ci;
end
endmodule : Adder
---tokens---
'// Adder flops the sum of its inputs\n' Comment.Single
'module' Keyword
' ' Text.Whitespace
'Adder' Name
' ' Text.Whitespace
'#' Punctuation
'(' Punctuation
'\n ' Text.Whitespace
'parameter' Keyword
' ' Text.Whitespace
'int' Keyword.Type
' ' Text.Whitespace
'N' Name
' ' Text.Whitespace
'=' Operator
' ' Text.Whitespace
'42' Literal.Number.Integer
'\n' Text.Whitespace
')' Punctuation
' ' Text.Whitespace
'(' Punctuation
'\n ' Text.Whitespace
'output' Keyword
' ' Text.Whitespace
'logic' Keyword.Type
' ' Text.Whitespace
'[' Punctuation
'N' Name
'-' Operator
'1' Literal.Number.Integer
':' Operator
'0' Literal.Number.Integer
']' Punctuation
' ' Text.Whitespace
'y' Name
',' Punctuation
'\n ' Text.Whitespace
'output' Keyword
' ' Text.Whitespace
'logic' Keyword.Type
' ' Text.Whitespace
'co' Name
',' Punctuation
'\n\n ' Text.Whitespace
'input' Keyword
' ' Text.Whitespace
'logic' Keyword.Type
' ' Text.Whitespace
'[' Punctuation
'N' Name
'-' Operator
'1' Literal.Number.Integer
':' Operator
'0' Literal.Number.Integer
']' Punctuation
' ' Text.Whitespace
'a' Name
',' Punctuation
'\n ' Text.Whitespace
'input' Keyword
' ' Text.Whitespace
'logic' Keyword.Type
' ' Text.Whitespace
'[' Punctuation
'N' Name
'-' Operator
'1' Literal.Number.Integer
':' Operator
'0' Literal.Number.Integer
']' Punctuation
' ' Text.Whitespace
'b' Name
',' Punctuation
'\n ' Text.Whitespace
'input' Keyword
' ' Text.Whitespace
'logic' Keyword.Type
' ' Text.Whitespace
'ci' Name
',' Punctuation
'\n\n ' Text.Whitespace
'input' Keyword
' ' Text.Whitespace
'logic' Keyword.Type
' ' Text.Whitespace
'clk' Name
'\n' Text.Whitespace
')' Punctuation
';' Punctuation
'\n ' Text.Whitespace
'always_ff' Keyword
' ' Text.Whitespace
'@' Punctuation
'(' Punctuation
'posedge' Keyword
' ' Text.Whitespace
'clk' Name
')' Punctuation
' ' Text.Whitespace
'begin' Keyword
'\n ' Text.Whitespace
'{' Punctuation
'co' Name
',' Punctuation
' ' Text.Whitespace
'y' Name
'}' Punctuation
' ' Text.Whitespace
'<' Operator
'=' Operator
' ' Text.Whitespace
'a' Name
' ' Text.Whitespace
'+' Operator
' ' Text.Whitespace
'b' Name
' ' Text.Whitespace
'+' Operator
' ' Text.Whitespace
'ci' Name
';' Punctuation
'\n ' Text.Whitespace
'end' Keyword
'\n' Text.Whitespace
'endmodule' Keyword
' ' Text.Whitespace
':' Operator
' ' Text.Whitespace
'Adder' Name
'\n' Text.Whitespace

View File

@ -0,0 +1,89 @@
# Most of the interesting types of class declarations
---input---
class Foo;
endclass
class Bar;
endclass : Bar
class Fiz extends Buz;
endclass : Fiz
class Free #(parameter type T = byte) extends Beer #(T);
endclass : Free
---tokens---
'class' Keyword.Declaration
' ' Text.Whitespace
'Foo' Name.Class
';' Punctuation
'\n' Text.Whitespace
'endclass' Keyword.Declaration
'\n\n' Text.Whitespace
'class' Keyword.Declaration
' ' Text.Whitespace
'Bar' Name.Class
';' Punctuation
'\n' Text.Whitespace
'endclass' Keyword.Declaration
' ' Text.Whitespace
':' Punctuation
' ' Text.Whitespace
'Bar' Name.Class
'\n\n' Text.Whitespace
'class' Keyword.Declaration
' ' Text.Whitespace
'Fiz' Name.Class
' ' Text.Whitespace
'extends' Keyword.Declaration
' ' Text.Whitespace
'Buz' Name.Class
';' Punctuation
'\n' Text.Whitespace
'endclass' Keyword.Declaration
' ' Text.Whitespace
':' Punctuation
' ' Text.Whitespace
'Fiz' Name.Class
'\n\n' Text.Whitespace
'class' Keyword.Declaration
' ' Text.Whitespace
'Free' Name.Class
' ' Text.Whitespace
'#' Punctuation
'(' Punctuation
'parameter' Keyword
' ' Text.Whitespace
'type' Keyword.Type
' ' Text.Whitespace
'T' Name
' ' Text.Whitespace
'=' Operator
' ' Text.Whitespace
'byte' Keyword.Type
')' Punctuation
' ' Text.Whitespace
'extends' Keyword.Declaration
' ' Text.Whitespace
'Beer' Name.Class
' ' Text.Whitespace
'#' Punctuation
'(' Punctuation
'T' Name
')' Punctuation
';' Punctuation
'\n' Text.Whitespace
'endclass' Keyword.Declaration
' ' Text.Whitespace
':' Punctuation
' ' Text.Whitespace
'Free' Name.Class
'\n' Text.Whitespace

View File

@ -0,0 +1,158 @@
# Believe it or not, SystemVerilog supports spaces before and after the base
# specifier (ie 'b, 'd, 'h). See IEEE 1800-2017 Section 5.7.1 for examples.
---input---
8'b10101010
8 'b10101010
8'b 10101010
8'sb10101010
8'Sb10101010
8'B10101010
8'b1010_1010
8'b10xXzZ?10
24'o01234567
24 'o01234567
24'o 01234567
24'so01234567
24'So01234567
24'O01234567
24'o0123_4567
24'o01xXzZ?7
32'd27182818
32 'd27182818
32'd 27182818
32'sd27182818
32'Sd27182818
32'D27182818
32'd2718_2818
32'd27xXzZ?8
32'hdeadbeef
32 'hdeadbeef
32'h deadbeef
32'shdeadbeef
32'Shdeadbeef
32'Hdeadbeef
32'hdead_beef
32'hdexXzZ?f
'0 '1 'x 'X 'z 'Z
42 1234_5678
---tokens---
"8'b10101010" Literal.Number.Bin
'\n' Text.Whitespace
"8 'b10101010" Literal.Number.Bin
'\n' Text.Whitespace
"8'b 10101010" Literal.Number.Bin
'\n' Text.Whitespace
"8'sb10101010" Literal.Number.Bin
'\n' Text.Whitespace
"8'Sb10101010" Literal.Number.Bin
'\n' Text.Whitespace
"8'B10101010" Literal.Number.Bin
'\n' Text.Whitespace
"8'b1010_1010" Literal.Number.Bin
'\n' Text.Whitespace
"8'b10xXzZ?10" Literal.Number.Bin
'\n\n' Text.Whitespace
"24'o01234567" Literal.Number.Oct
'\n' Text.Whitespace
"24 'o01234567" Literal.Number.Oct
'\n' Text.Whitespace
"24'o 01234567" Literal.Number.Oct
'\n' Text.Whitespace
"24'so01234567" Literal.Number.Oct
'\n' Text.Whitespace
"24'So01234567" Literal.Number.Oct
'\n' Text.Whitespace
"24'O01234567" Literal.Number.Oct
'\n' Text.Whitespace
"24'o0123_4567" Literal.Number.Oct
'\n' Text.Whitespace
"24'o01xXzZ?7" Literal.Number.Oct
'\n\n' Text.Whitespace
"32'd27182818" Literal.Number.Integer
'\n' Text.Whitespace
"32 'd27182818" Literal.Number.Integer
'\n' Text.Whitespace
"32'd 27182818" Literal.Number.Integer
'\n' Text.Whitespace
"32'sd27182818" Literal.Number.Integer
'\n' Text.Whitespace
"32'Sd27182818" Literal.Number.Integer
'\n' Text.Whitespace
"32'D27182818" Literal.Number.Integer
'\n' Text.Whitespace
"32'd2718_2818" Literal.Number.Integer
'\n' Text.Whitespace
"32'd27xXzZ?8" Literal.Number.Integer
'\n\n' Text.Whitespace
"32'hdeadbeef" Literal.Number.Hex
'\n' Text.Whitespace
"32 'hdeadbeef" Literal.Number.Hex
'\n' Text.Whitespace
"32'h deadbeef" Literal.Number.Hex
'\n' Text.Whitespace
"32'shdeadbeef" Literal.Number.Hex
'\n' Text.Whitespace
"32'Shdeadbeef" Literal.Number.Hex
'\n' Text.Whitespace
"32'Hdeadbeef" Literal.Number.Hex
'\n' Text.Whitespace
"32'hdead_beef" Literal.Number.Hex
'\n' Text.Whitespace
"32'hdexXzZ?f" Literal.Number.Hex
'\n\n' Text.Whitespace
"'0" Literal.Number
' ' Text.Whitespace
"'1" Literal.Number
' ' Text.Whitespace
"'x" Literal.Number
' ' Text.Whitespace
"'X" Literal.Number
' ' Text.Whitespace
"'z" Literal.Number
' ' Text.Whitespace
"'Z" Literal.Number
'\n\n' Text.Whitespace
'42' Literal.Number.Integer
' ' Text.Whitespace
'1234_5678' Literal.Number.Integer
'\n' Text.Whitespace

View File

@ -0,0 +1,213 @@
# See 1800-2017 Table 11-2: Operator Precedence and Associativity
# Note that the duplicates (unary/binary) have been removed,
# ie '+', '-', '&', '|', '^', '~^', '^~'
# Note: This is a inconsistent mix of operator and punctuation
# Note: Operators would ideally be represented as one token: ':' ':' -> '::', '~' '&' -> '~&'
---input---
() [] :: .
+ - ! ~ & ~& | ~| ^ ~^ ^~ ++ --
**
* / %
<< >> <<< >>>
< <= > >= inside dist
== != === !== ==? !=?
&&
||
?:
-> <->
= += -= *= /= %= &= ^= |= <<= >>= <<<= >>>= := :/ <=
{} {{}}
---tokens---
'(' Punctuation
')' Punctuation
' ' Text.Whitespace
'[' Punctuation
']' Punctuation
' ' Text.Whitespace
':' Operator
':' Operator
' ' Text.Whitespace
'.' Punctuation
'\n' Text.Whitespace
'+' Operator
' ' Text.Whitespace
'-' Operator
' ' Text.Whitespace
'!' Operator
' ' Text.Whitespace
'~' Operator
' ' Text.Whitespace
'&' Operator
' ' Text.Whitespace
'~' Operator
'&' Operator
' ' Text.Whitespace
'|' Operator
' ' Text.Whitespace
'~' Operator
'|' Operator
' ' Text.Whitespace
'^' Operator
' ' Text.Whitespace
'~' Operator
'^' Operator
' ' Text.Whitespace
'^' Operator
'~' Operator
' ' Text.Whitespace
'+' Operator
'+' Operator
' ' Text.Whitespace
'-' Operator
'-' Operator
'\n' Text.Whitespace
'*' Operator
'*' Operator
'\n' Text.Whitespace
'*' Operator
' ' Text.Whitespace
'/' Operator
' ' Text.Whitespace
'%' Operator
'\n' Text.Whitespace
'<' Operator
'<' Operator
' ' Text.Whitespace
'>' Operator
'>' Operator
' ' Text.Whitespace
'<' Operator
'<' Operator
'<' Operator
' ' Text.Whitespace
'>' Operator
'>' Operator
'>' Operator
'\n' Text.Whitespace
'<' Operator
' ' Text.Whitespace
'<' Operator
'=' Operator
' ' Text.Whitespace
'>' Operator
' ' Text.Whitespace
'>' Operator
'=' Operator
' ' Text.Whitespace
'inside' Operator.Word
' ' Text.Whitespace
'dist' Operator.Word
'\n' Text.Whitespace
'=' Operator
'=' Operator
' ' Text.Whitespace
'!' Operator
'=' Operator
' ' Text.Whitespace
'=' Operator
'=' Operator
'=' Operator
' ' Text.Whitespace
'!' Operator
'=' Operator
'=' Operator
' ' Text.Whitespace
'=' Operator
'=' Operator
'?' Operator
' ' Text.Whitespace
'!' Operator
'=' Operator
'?' Operator
'\n' Text.Whitespace
'&' Operator
'&' Operator
'\n' Text.Whitespace
'|' Operator
'|' Operator
'\n' Text.Whitespace
'?' Operator
':' Operator
'\n' Text.Whitespace
'-' Operator
'>' Operator
' ' Text.Whitespace
'<' Operator
'-' Operator
'>' Operator
'\n' Text.Whitespace
'=' Operator
' ' Text.Whitespace
'+' Operator
'=' Operator
' ' Text.Whitespace
'-' Operator
'=' Operator
' ' Text.Whitespace
'*' Operator
'=' Operator
' ' Text.Whitespace
'/' Operator
'=' Operator
' ' Text.Whitespace
'%' Operator
'=' Operator
' ' Text.Whitespace
'&' Operator
'=' Operator
' ' Text.Whitespace
'^' Operator
'=' Operator
' ' Text.Whitespace
'|' Operator
'=' Operator
' ' Text.Whitespace
'<' Operator
'<' Operator
'=' Operator
' ' Text.Whitespace
'>' Operator
'>' Operator
'=' Operator
' ' Text.Whitespace
'<' Operator
'<' Operator
'<' Operator
'=' Operator
' ' Text.Whitespace
'>' Operator
'>' Operator
'>' Operator
'=' Operator
' ' Text.Whitespace
':' Operator
'=' Operator
' ' Text.Whitespace
':' Operator
'/' Operator
' ' Text.Whitespace
'<' Operator
'=' Operator
'\n' Text.Whitespace
'{' Punctuation
'}' Punctuation
' ' Text.Whitespace
'{' Punctuation
'{' Punctuation
'}' Punctuation
'}' Punctuation
'\n' Text.Whitespace