Skip to content

Commit 900f08f

Browse files
committed
Add DAG tests
1 parent 6fa8ba9 commit 900f08f

File tree

2 files changed

+147
-1
lines changed

2 files changed

+147
-1
lines changed

Sources/FileCheck/FileCheck.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -265,7 +265,7 @@ extension UnsafeBufferPointer {
265265
func substring(in buffer : UnsafeBufferPointer<CChar>, with range : NSRange) -> String {
266266
precondition(range.location + range.length <= buffer.count)
267267
let ptr = buffer.substr(range.location, range.length)
268-
return String(bytesNoCopy: UnsafeMutableRawPointer(mutating: ptr.baseAddress!), length: range.length, encoding: .utf8, freeWhenDone: false)!
268+
return String(bytesNoCopy: UnsafeMutableRawPointer(mutating: ptr.baseAddress!), length: range.length, encoding: .utf8, freeWhenDone: false) ?? ""
269269
}
270270

271271
private func findFirstMatch(in inbuffer : UnsafeBufferPointer<CChar>, among prefixes : [String], with RE : NSRegularExpression, startingAt startLine: Int) -> (String, CheckType, Int, UnsafeBufferPointer<CChar>) {

Tests/FileCheckTests/DAGSpec.swift

Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
import FileCheck
2+
import XCTest
3+
import Foundation
4+
5+
class DAGSpec : XCTestCase {
6+
func testPrefixOrderInvariant() {
7+
XCTAssert(fileCheckOutput(of: .stdout, withPrefixes: ["BA", "AA"]) {
8+
// BA-DAG: this is the string to be {{matched}}
9+
print("this is the string to be matched")
10+
})
11+
12+
XCTAssert(fileCheckOutput(of: .stdout, withPrefixes: ["AB", "BB"]) {
13+
// BB-DAG: this is the string to be {{matched}}
14+
print("this is the string to be matched")
15+
})
16+
}
17+
18+
func testDAGWithInst() {
19+
XCTAssert(fileCheckOutput(of: .stdout, withPrefixes: ["CHECK-INSTDAG"]) {
20+
// CHECK-INSTDAG-DAG: add [[REG1:r[0-9]+]], r1, r2
21+
// CHECK-INSTDAG-DAG: add [[REG2:r[0-9]+]], r3, r4
22+
// CHECK-INSTDAG: mul r5, [[REG1]], [[REG2]]
23+
24+
// CHECK-INSTDAG-DAG: mul [[REG1:r[0-9]+]], r1, r2
25+
// CHECK-INSTDAG-DAG: mul [[REG2:r[0-9]+]], r3, r4
26+
// CHECK-INSTDAG: add r5, [[REG1]], [[REG2]]
27+
28+
// CHECK-INSTDAG-DAG: add [[REG1:r[0-9]+]], r1, r2
29+
// CHECK-INSTDAG-DAG: add [[REG2:r[0-9]+]], r3, r4
30+
// CHECK-INSTDAG-NOT: xor
31+
// CHECK-INSTDAG-DAG: mul r5, [[REG1]], [[REG2]]
32+
print("""
33+
add r10, r1, r2
34+
add r11, r3, r4
35+
mul r5, r10, r11
36+
37+
mul r11, r3, r4
38+
mul r10, r1, r2
39+
add r5, r10, r11
40+
41+
add r11, r3, r4
42+
add r10, r1, r2
43+
mul r5, r10, r11
44+
""")
45+
})
46+
}
47+
48+
func testDAGXFailWithInst() {
49+
XCTAssertFalse(fileCheckOutput(of: .stdout, withPrefixes: ["INSTDAG-XFAIL1"]) {
50+
// INSTDAG-XFAIL1: __x1
51+
// INSTDAG-XFAIL1-DAG: add [[REG1:r[0-9]+]], r1, r2
52+
// INSTDAG-XFAIL1-DAG: add [[REG2:r[0-9]+]], r3, r4
53+
// INSTDAG-XFAIL1: mul r5, [[REG1]], [[REG2]]
54+
// INSTDAG-XFAIL1: __x1
55+
print("""
56+
__x1
57+
add r10, r1, r2
58+
add r11, r3, r4
59+
mul r5, r10, r12
60+
__x1
61+
""")
62+
})
63+
64+
XCTAssertFalse(fileCheckOutput(of: .stdout, withPrefixes: ["INSTDAG-XFAIL2"]) {
65+
// INSTDAG-XFAIL2: __x2
66+
// INSTDAG-XFAIL2-DAG: mul [[REG1:r[0-9]+]], r1, r2
67+
// INSTDAG-XFAIL2-DAG: mul [[REG2:r[0-9]+]], r3, r4
68+
// INSTDAG-XFAIL2: add r5, [[REG1]], [[REG2]]
69+
// INSTDAG-XFAIL2: __x2
70+
print("""
71+
__x2
72+
mul r11, r3, r4
73+
mul r10, r1, r2
74+
add r5, r11, r11
75+
__x2
76+
""")
77+
})
78+
79+
XCTAssertFalse(fileCheckOutput(of: .stdout, withPrefixes: ["INSTDAG-XFAIL3"]) {
80+
// INSTDAG-XFAIL3: __x3
81+
// INSTDAG-XFAIL3-DAG: add [[REG1:r[0-9]+]], r1, r2
82+
// INSTDAG-XFAIL3-DAG: add [[REG2:r[0-9]+]], r3, r4
83+
// INSTDAG-XFAIL3-DAG: mul r5, [[REG1]], [[REG2]]
84+
// INSTDAG-XFAIL3: __x3
85+
print("""
86+
__x3
87+
add r11, r3, r4
88+
add r12, r1, r2
89+
mul r5, r10, r11
90+
__x3
91+
""")
92+
})
93+
94+
XCTAssertFalse(fileCheckOutput(of: .stdout, withPrefixes: ["INSTDAG-XFAIL4"]) {
95+
// INSTDAG-XFAIL4: __x4
96+
// INSTDAG-XFAIL4-DAG: add [[REG1:r[0-9]+]], r1, r2
97+
// INSTDAG-XFAIL4-DAG: add [[REG2:r[0-9]+]], r3, r4
98+
// INSTDAG-XFAIL4-NOT: not
99+
// INSTDAG-XFAIL4-DAG: mul r5, [[REG1]], [[REG2]]
100+
// INSTDAG-XFAIL4: __x4
101+
print("""
102+
__x4
103+
add r11, r3, r4
104+
add r12, r1, r2
105+
not
106+
mul r5, r12, r11
107+
__x4
108+
""")
109+
})
110+
111+
XCTAssertFalse(fileCheckOutput(of: .stdout, withPrefixes: ["INSTDAG-XFAIL5"]) {
112+
// INSTDAG-XFAIL5: __x5
113+
// INSTDAG-XFAIL5-DAG: add [[REG1:r[0-9]+]], r1, r2
114+
// INSTDAG-XFAIL5-DAG: add [[REG2:r[0-9]+]], r3, r4
115+
// INSTDAG-XFAIL5-NOT: not
116+
// INSTDAG-XFAIL5-DAG: mul r5, [[REG1]], [[REG2]]
117+
// INSTDAG-XFAIL5: __x5
118+
print("""
119+
__x5
120+
mul r5, r12, r11
121+
add r11, r3, r4
122+
add r12, r1, r2
123+
not
124+
__x5
125+
""")
126+
})
127+
128+
XCTAssertFalse(fileCheckOutput(of: .stdout, withPrefixes: ["INSTDAG-XFAIL6"]) {
129+
// INSTDAG-XFAIL6: __x6
130+
// INSTDAG-XFAIL6-DAG: add [[REG1:r[0-9]+]], r1, r2
131+
// INSTDAG-XFAIL6-DAG: add [[REG2:r[0-9]+]], r3, r4
132+
// INSTDAG-XFAIL6-NOT: not
133+
// INSTDAG-XFAIL6-DAG: mul r5, [[REG1]], [[REG2]]
134+
// INSTDAG-XFAIL6-DAG: mul r6, [[REG1]], [[REG2]]
135+
// INSTDAG-XFAIL6: __x6
136+
print("""
137+
__x6
138+
add r11, r3, r4
139+
mul r6, r12, r11
140+
add r12, r1, r2
141+
mul r5, r12, r11
142+
__x6
143+
""")
144+
})
145+
}
146+
}

0 commit comments

Comments
 (0)