GithubHelp home page GithubHelp logo

classicvalues / swift-stress-tester Goto Github PK

View Code? Open in Web Editor NEW

This project forked from apple/swift-stress-tester

0.0 1.0 0.0 768 KB

Stress testing utilities for Swift's tooling

Home Page: https://swift.org

License: Apache License 2.0

Swift 95.69% Python 3.21% Shell 1.10%

swift-stress-tester's Introduction

Swift logo

Swift Stress Tester

This project aims to provide stress testing utilities to help find reproducible crashes and other failures in tools that process Swift source code, such as the Swift compiler and SourceKit. These utilities will ideally be written in Swift and make use the SwiftSyntax and/or SwiftLang libraries to parse, generate and modify Swift source inputs.

Current tools

Tool Description build-script Flag Package Name
sk‑stress‑test a utility for exercising a range of SourceKit functionality, such as code completion and local refactorings, at all applicable locations in a set of Swift source files. --skstresstester SourceKitStressTester
swift‑evolve a utility to randomly modify Swift source files in ways libraries are permitted to evolve without breaking ABI compatibility. --swiftevolve SwiftEvolve

Building

The tools in this repository can be built in several different ways:

Using Swift's build-script

If you want to build the tools to use a locally built sourcekitd and SwiftLang, use the Swift repository's build-script to build and test the stress tester by passing --skstresstester, its dependencies and the desired tools' flags as extra options. To build and run tests, for example, you would run:

$ ./swift/utils/build-script --test --skip-build-benchmark --skip-test-cmark --skip-test-swift --install-swift --llbuild --install-llbuild --skip-test-llbuild --swiftpm --install-swiftpm --skip-test-swiftpm --skstresstester --swiftevolve --release

For local development

For local development, you'll first need to download and install a recent swift.org development snapshot toolchain that matches the latest commit on main in the SwiftSyntax. This is because the Stress Tester depends on the latest version of SwiftSyntax and SwiftSyntax integrates into the latest version of the compiler.

The toolchain is installed into /Library/Developer/Toolchains/ if installed for all users. Note that the $TOOLCHAIN_DIR variables below should include /usr at the end of their path, eg. TOOLCHAIN_DIR=/Library/Developer/Toolchains/swift-DEVELOPMENT-SNAPSHOT-<...>.xctoolchain/usr.

Via Xcode

To generate an Xcode project that's set up correctly, run build-script-helper.py, passing the path to the downloaded toolchain via the --toolchain option, the tool's package name in the --package-dir option, and the generate-xcodeproj action:

$ ./build-script-helper.py --package-dir SourceKitStressTester --toolchain $TOOLCHAIN_DIR generate-xcodeproj --no-local-deps

If you have the SwiftSyntax and SwiftPM repositories already checked out next to the stress tester's repository, you can omit the --no-local-deps option to use the existing checkouts instead of fetching the dependencies using SwiftPM.

This will generate SourceKitStressTester/SourceKitStressTester.xcodeproj. Open it and select the toolchain you installed from the Xcode > Toolchains menu, before building the SourceKitStressTester-Package scheme.

Via command line

To build, run build-script-helper.py, passing the path to the downloaded toolchain via the --toolchain option and the tool's package name in the --package-dir option.

$ ./build-script-helper.py --package-dir SourceKitStressTester --toolchain $TOOLCHAIN_DIR

If you have the SwiftSyntax and SwiftPM repositories already checked out next to the stress tester's repository, you can omit the --no-local-deps option to use the existing checkouts instead of fetching the dependencies using SwiftPM.

To run the tests, repeat the above command, but additionally, pass the test action:

$ ./Utilities/build-script-helper.py test --package-dir SourceKitStressTester --toolchain $TOOLCHAIN_DIR

Running

Building will create either one or two executables, depending on the package you build. These will be in the package directory's .build/debug subdirectory if building on the command line or via the Swift repo's build-script, and under Products/Debug in the Xcode project's DerivedData directory if building there. They are also available in the usr/bin directory of the recent trunk and swift 5.0 development toolchains from swift.org, if you're just interested in running them, rather than building them locally.

See the individual packages' README files for information about how to run and use their executables.

License

Copyright © 2014 - 2018 Apple Inc. and the Swift project authors. Licensed under Apache License v2.0 with Runtime Library Exception.

See http://swift.org/LICENSE.txt for license information.

swift-stress-tester's People

Contributors

aciidb0mb3r avatar ahoppen avatar akyrtzi avatar beccadax avatar benlangmuir avatar bnbarham avatar classicvalues avatar finagolfin avatar lorentey avatar mend-bolt-for-github[bot] avatar nathawes avatar nkcsgexi avatar rintaro avatar shahmishal avatar tkremenek avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.