Files
carbon-lang/explorer/testdata/assoc_const/rewrite_interface_params.carbon
T
Jon Ross-Perkins 82f33ff384 Use new test framework in explorer to reduce per-test overhead (#2811)
Isolating test execution time (no build time included):

- Linux, `lit` test-per-file: Elapsed time: 28.214s, Critical Path: 13.97s
- Linux, `cc_test`-per-file: Elapsed time: 11.534s, Critical Path: 6.05s
- Linux, merged `cc_test` with 50 shards: Elapsed time: 11.677s, Critical Path: 11.17s
- Mac, `lit` test-per-file: Elapsed time: 295.686s, Critical Path: 20.00s
- Mac, `cc_test`-per-file: Elapsed time: 55.788s, Critical Path: 3.81s
- Mac, merged `cc_test` with 50 shards: Elapsed time: 16.269s, Critical Path: 7.54s

In GH actions:

- [Before](https://github.com/carbon-language/carbon-lang/actions/runs/4866602695/jobs/8678306144?pr=2799):
  - test / test (ubuntu-22.04, fastbuild) (pull_request_target) Successful in 20m
  - test / test (ubuntu-22.04, opt) (pull_request_target) Successful in 15m
  - test / test (macos-12, fastbuild) (pull_request_target) Successful in 36m
  - test / test (macos-12, opt) (pull_request_target) Successful in 21m
- [After](https://github.com/carbon-language/carbon-lang/actions/runs/4875154751/jobs/8697004066?pr=2811):
  - test / test (ubuntu-22.04, fastbuild) (pull_request_target) Successful in 10m
  - test / test (ubuntu-22.04, opt) (pull_request_target) Successful in 9m
  - test / test (macos-12, fastbuild) (pull_request_target) Successful in 12m
  - test / test (macos-12, opt) (pull_request_target) Successful in 9m

I'm still leaving a handful of `lit` tests to test end-to-end binary execution. This is why testdata directories are split (`lit` tests next to the `explorer` binary, the `cc_test`s next to `ParseAndExecute`).
2023-05-15 16:23:59 -07:00

45 lines
1.4 KiB
Plaintext

// Part of the Carbon Language project, under the Apache License v2.0 with LLVM
// Exceptions. See /LICENSE for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
// AUTOUPDATE
// CHECK:STDOUT: result: 0
package ExplorerTest api;
interface HasTypes {
let A:! type;
let B:! type;
let C:! type;
let D:! type;
let E:! type;
let F:! type;
}
interface HasParams(A:! type, B:! type, C:! type, D:! type) {
let V:! HasTypes;
}
// Here we discover that there is a rewrite for `HasParams(...).V` only after
// substitution converts each one to `HasParam(X, X, X, X).V`.
fn F[X:! (HasTypes & HasParams(.Self, .Self, .Self, .Self)) where
.Self impls HasParams(.A, .A, .A, .A) and
.Self impls HasParams(.B, .B, .B, .B) and
.Self impls HasParams(.C, .C, .C, .C) and
.Self impls HasParams(.D, .D, .D, .D) and
.Self impls HasParams(.E, .E, .E, .E) and
.F = .Self.(HasParams(.E, .E, .E, .E).V).A and
.E = .Self.(HasParams(.D, .D, .D, .D).V).A and
.D = .Self.(HasParams(.C, .C, .C, .C).V).A and
.C = .Self.(HasParams(.B, .B, .B, .B).V).A and
.B = .Self.(HasParams(.A, .A, .A, .A).V).A and
.A = .Self and .V = .Self](x: X) -> X.F { return x; }
impl i32 as HasTypes
where .A = .B and .B = .C and .C = .D and .D = .E and .E = .F and .F = i32 {}
impl i32 as HasParams(i32, i32, i32, i32) where .V = i32 {}
fn Main() -> i32 {
return F(0);
}