# FastOlympicCoding

FastOlympicCoding is a Sublime Text 3 plugin for competitive programming that provides a number of features to efficiently write, test, and debug programs.

# Features

- Add and modify tests to run them against the solution
- Stress Test the solution to find input where it produces an incorrect output
- Aliases for standard data types
- Real-time C++ compilation errors highlighting
- See the line where the program breaks down and inspect variable values (requires LLDB.framework be installed)

### Tech

FastOlympicCoding uses the following projects to work properly:

- Sublime Text 3 - A sophisticated text editor
- Sublime Text 3 Plugin API - Fulfilling API. Easy to use
- Python 3 - FastOlympicCoding runs on Python 3
- LLDB.framework - Easy accessible debugger
- C++ compiler - duh

# User Guide

- Installation
- Test Manager
- Settings
- Stress Testing
- Class Completion
- C++ Lint
- Debugger

### Installation

- Install via Package Control
- Install manually:
  download plugin into packages (`preferences — browse packages`)
  `Warning! rename plugin folder to FastOlympicCoding`

### TestManager

- press `accept` to memorize given output as correct.
- if the program output coincides with one of the correct outputs, then the test is folded

#### TestManager Keybindings

- ctrl+b (OSX) ctrl+alt+b (Linux + Win) compile and run
- ctrl+enter new test
- ctrl+c (OSX) ctrl+x (Linux + Win) kill process
- ctrl+shift+b (OSX) run with debugger
- ctrl+d delete test
- ctrl+super+up/ctrl+super+down (OSX) ctrl+shift+up/ctrl+shift+down (Linux + Win) swap tests
- cmd+k, cmd+p (OSX) ctrl+k, ctrl+p (Linux + Win) close/open right panel

### Settings

- to edit settings
  - press cmd+shift+p (OSX) ctrl+shift+p (Linux + Win) and type `Open Settings`
  - or `tools — FastOlympicCoding — settings`

### Stress Testing

- to stress test solution implement three following files:
  - `<name>.cpp` - program that works incorrect
  - `<name>__Good.cpp` - program that works correct
  - `<name>__Generator.cpp` - program that generates tests, you can read a seed for random in the input
- run `Make Stress` on the command palette

### ClassCompletion

- type aliases to substitute them with data types
- customize aliases in the settings file

### CppLint

- error highlighting works in real-time
- specify custom compile command in the settings file

### Debugger

- debugging tools available only for OSX
- ctrl+shift+b to run program with debugger
- point the cursor on the variable to see its value
- to select the stack frame type `FastOlympicCoding: Select Frame` on the command palette
- the only one dependency is xcode (you can install it with `xcode-select --install`)