Skip to content

Commit 01fe483

Browse files
T-GroCopilot
andauthored
Add regression test for #9382: SRTP stress test with matrix inverse (#19469)
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1 parent cbab748 commit 01fe483

1 file changed

Lines changed: 45 additions & 0 deletions

File tree

tests/FSharp.Compiler.ComponentTests/ConstraintSolver/MemberConstraints.fs

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,3 +113,48 @@ ignore ["1" .. "42"]
113113
|> shouldFail
114114
|> withSingleDiagnostic
115115
(Error 1, Line 2, Col 9, Line 2, Col 12, "The type 'string' does not support the operator 'op_Range'")
116+
117+
// https://github.com/dotnet/fsharp/issues/9382
118+
[<Fact>]
119+
let ``Issue 9382 - SRTP stress test with matrix inverse should compile`` () =
120+
FSharp
121+
"""
122+
type Matrix<'a> =
123+
{ m11: 'a; m12: 'a; m13: 'a
124+
m21: 'a; m22: 'a; m23: 'a
125+
m31: 'a; m32: 'a; m33: 'a }
126+
127+
static member inline (/) (m, s) =
128+
{ m11 = m.m11 / s; m12 = m.m12 / s; m13 = m.m13 / s
129+
m21 = m.m21 / s; m22 = m.m22 / s; m23 = m.m23 / s
130+
m31 = m.m31 / s; m32 = m.m32 / s; m33 = m.m33 / s }
131+
132+
static member inline (*) (a, b) =
133+
{ m11 = a.m11 * b.m11 + a.m12 * b.m21 + a.m13 * b.m31
134+
m12 = a.m11 * b.m12 + a.m12 * b.m22 + a.m13 * b.m32
135+
m13 = a.m11 * b.m13 + a.m12 * b.m23 + a.m13 * b.m33
136+
m21 = a.m21 * b.m11 + a.m22 * b.m21 + a.m23 * b.m31
137+
m22 = a.m21 * b.m12 + a.m22 * b.m22 + a.m23 * b.m32
138+
m23 = a.m21 * b.m13 + a.m22 * b.m23 + a.m23 * b.m33
139+
m31 = a.m31 * b.m11 + a.m32 * b.m21 + a.m33 * b.m31
140+
m32 = a.m31 * b.m12 + a.m32 * b.m22 + a.m33 * b.m32
141+
m33 = a.m31 * b.m13 + a.m32 * b.m23 + a.m33 * b.m33 }
142+
143+
let inline determinant m =
144+
m.m11 * m.m22 * m.m33 + m.m12 * m.m23 * m.m31 + m.m13 * m.m21 * m.m32
145+
- m.m13 * m.m22 * m.m31 - m.m12 * m.m21 * m.m33 - m.m11 * m.m23 * m.m32
146+
147+
let inline inverse m =
148+
{ m11 = m.m22 * m.m33 - m.m32 * m.m23
149+
m12 = m.m13 * m.m32 - m.m12 * m.m33
150+
m13 = m.m12 * m.m23 - m.m13 * m.m22
151+
m21 = m.m23 * m.m31 - m.m21 * m.m33
152+
m22 = m.m11 * m.m33 - m.m13 * m.m31
153+
m23 = m.m21 * m.m13 - m.m11 * m.m23
154+
m31 = m.m21 * m.m32 - m.m31 * m.m22
155+
m32 = m.m31 * m.m12 - m.m11 * m.m32
156+
m33 = m.m11 * m.m22 - m.m21 * m.m12 }
157+
/ (determinant m)
158+
"""
159+
|> typecheck
160+
|> shouldSucceed

0 commit comments

Comments
 (0)