Skip to content

rootCircle/cpast_mono

Repository files navigation

cpast_mono - Code Testing and Analysis Tool

Crates.io GitHub repo size GitHub Workflow Status (with event) GitHub Actions Workflow Status codecov

Introduction

Have you ever found yourself stuck in the middle of a coding contest, frustrated by a bug or an elusive edge case that just won’t reveal itself? Or maybe you’ve spent countless hours comparing outputs manually, only to find that the real problem was a tricky test case you hadn’t considered. Well, I’ve been there, and I have good news: there’s a solution that can change the way you approach competitive programming forever.

Introducing cpast—the game-changing tool designed specifically for competitive programmers and developers who want to enhance their coding efficiency and solve problems faster. Written in Rust for speed and reliability, cpast simplifies the process of comparing outputs from different code files, regardless of the programming language. This allows you to focus on crafting the best solution to your problem without worrying about the technicalities of cross-language compatibility.

Here’s the best part: with cpast, all you need is your solution file and the input format, and you can debug your code to perfection without having to look at or rely on anyone else’s code. No more peeking at other people's solutions to figure out what went wrong. Now, you can independently find those tricky cases that make all the difference, allowing you to learn and improve your problem-solving skills honestly and effectively.

Checkout the blog post here

Usecases

  1. Debugging your CP/DSA questions.
  2. Live hacking in during/post Codeforces contests.
  3. Generate testcases for problem setters.
  4. Reinforcement learning for large language models and stress testing their code generation accuracy.

Getting Started

output.mp4

Installation

There are two ways to use cpast:

  1. Local Installation: Install cpast locally and get it running on your machine. For running cpast locally, refer to cpast README.

  2. cpast_api: Use cpast_api, which utilizes clex and ccode_runner in parallel for optimized performance and speed. For running cpast API locally, refer to cpast_api README.

For development it's recommended(optional) to install mold linker for faster compilation times.

CLI Usage

Here's a simple example of how to use cpast:

test

cpast test -c correct.cpp -t incorrect.cpp -g "(N) (?:N){\1}" --iterations 100
  • correct.cpp should contain the correct code.
  • incorrect.cpp should contain the incorrect code.
  • (N) (?:N){\1} is the language generator.
  • 100 is the number of test iterations.

generate

cpast generate "S[10,@CH_UPPER@]"
  • Generates string of length 10, of uppercase characters only

Language Specification

At the heart of cpast is clex, a powerful custom language generator that gives you complete control over input patterns. Imagine regex, but specifically designed for generating random test cases. With clex, you can easily define and automate complex input scenarios to stress-test your code, uncover hidden bugs, and identify edge cases that might otherwise go unnoticed.

For more information on the clex language and its usage, please refer to the Grammar Rules for Clex Generator.

Workspace Meta

We welcome you to the cpast mono-repo, where you can find all the tools and components that make up the cpast ecosystem. Here’s a brief overview of the different components you’ll find in this workspace:

Component Description Status
cpast_api Backend for cpast, handles server-side operations and API requests. 🚧 Work in Progress
cpast CLI interface for cpast, used locally to run tests and generate inputs. ✅ Active
ccode_runner Runs arbitrary program code on local devices/server side, compiles/interprets code, and sends output. 🔄 Needs Change
cpastord Integration of cpast for Discord, allowing users to run cpast commands within Discord. ❌ Abandoned
clex Parser and generator for the clex language, generates random input for programs based on clex syntax. ✅ Active
cscrapper Scrapes question descriptions from competitive programming sites like Codeforces and CodeChef. 🔄 Needs Improvement
clex_llm Generates clex language from input format, constraints, and problem descriptions using LLM. 🤔 Under Consideration

Meta