1// RUN: not llvm-tblgen %s 2>&1 | FileCheck %s 2 3// Test the assert statement at top level. 4 5// CHECK: assertion failed 6// CHECK-NOT: note: primary name is too short 7// CHECK: note: primary name is too long 8 9defvar Name = "Grace Brewster Murray Hopper"; 10 11assert !ge(!size(Name), 20), "primary name is too short: " # Name; 12assert !le(!size(Name), 20), "primary name is too long: " # Name; 13 14// CHECK: assertion failed 15// CHECK: note: first name is incorrect 16 17def Rec1 { 18 string name = "Fred Smith"; 19} 20 21assert !eq(!substr(Rec1.name, 0, 3), "Jane"), 22 !strconcat("first name is incorrect: ", Rec1.name); 23 24// CHECK: assertion failed 25// CHECK: note: record Rec2 is broken 26 27def Rec2 { 28 bit broken = true; 29} 30 31assert !not(Rec2.broken), "record Rec2 is broken"; 32 33// CHECK: assertion failed 34// CHECK: note: cube of 9 35 36class Cube<int n> { 37 int result = !mul(n, n, n); 38} 39 40assert !eq(Cube<9>.result, 81), "cube of 9 should be 729"; 41 42// Test the assert statement in a record definition. 43 44// CHECK: assertion failed 45// CHECK-NOT: primary first name is not "Grace" 46// CHECK: primary first name is not "Grack" 47// CHECK: assertion failed 48// CHECK: foo field should be 49 50def Rec10 { 51 assert !eq(!substr(Name, 0, 5), "Grace"), "primary first name is not \"Grace\""; 52 assert !eq(!substr(Name, 0, 5), "Grack"), "primary first name is not \"Grack\""; 53 string foo = "Foo"; 54 assert !eq(foo, "foo"), "foo field should be \"Foo\""; 55} 56 57// CHECK: assertion failed 58// CHECK: note: magic field is incorrect: 42 59 60def Rec11 { 61 int magic = 13; 62 assert !eq(magic, 13), "magic field is incorrect: " # magic; 63 let magic = 42; 64} 65 66// CHECK: assertion failed 67// CHECK: note: var field has wrong value 68 69def Rec12 { 70 defvar prefix = "foo_"; 71 string var = prefix # "snork"; 72 assert !eq(var, "foo_snorx"), "var field has wrong value: " # var; 73} 74 75// CHECK: assertion failed 76// CHECK: note: kind field has wrong value 77 78class Kind { 79 int kind = 7; 80} 81 82def Rec13 : Kind { 83 let kind = 8; 84 assert !eq(kind, 7), "kind field has wrong value: " # kind; 85} 86 87// CHECK: assertion failed 88// CHECK: note: double_result should be 89 90def Rec14 : Cube<3> { 91 int double_result = !mul(result, 2); 92 assert !eq(double_result, 53), "double_result should be 54"; 93} 94 95// Test the assert statement in a class definition. 96 97// Test the assert statement in a multiclass. 98 99