Skip to main content

A Python tester for the 42 push_swap project with controlled disorder generation and performance grading.

Project description

ft_ps_tester

A Python-based tester for the 42 push_swap project. It generates controlled random sequences with specific disorder levels, runs your push_swap executable, validates the output, and grades performance against 42 thresholds.


Features

  • Controlled disorder generation — creates sequences with precise inversion percentages.
  • Four test modes — simple, medium, complex, and adaptive.
  • Output validation — simulates operations to verify sorting correctness.
  • Performance grading — compares operation counts against 42 thresholds (excellent / good / pass / fail).
  • Failure report — concise summary of timeouts, invalid operations, and limit exceedances.

Requirements

  • Python 3
  • A compiled push_swap executable that accepts arguments and prints operations to stdout

Installation

Option 1: Install from PyPI (recommended)

pip install ft_ps_tester

Then run from anywhere inside your push_swap project:

ft_ps_tester ./push_swap

Option 2: Install from source

Clone this repository:

git clone https://github.com/italoalmeida0/ft_ps_tester.git
cd ft_ps_tester

Install in editable / development mode:

pip install -e .

Or install normally:

pip install .

Make sure your push_swap binary is compiled and executable:

make
chmod +x push_swap

Usage

Full test suite (recommended)

Tests 100 and 500 elements across all four modes (100 tests each):

python3 ft_ps_tester.py ./push_swap

Single test run

Test a specific size and mode:

python3 ft_ps_tester.py ./push_swap <size> <mode>

Example:

python3 ft_ps_tester.py ./push_swap 500 complex

Modes / Flags

Your push_swap must support the following flags (passed as --<mode> before the numbers):

Mode Disorder range Description
simple 15.0% – 19.9% Nearly sorted sequences
medium 20.0% – 49.9% Moderately shuffled sequences
complex 50.0% – 55.0% Heavily shuffled sequences
adaptive 15.0% – 55.0% Random disorder across the full spectrum

Note: If your push_swap does not implement these flags, the tester will still work if your program ignores unknown flags and simply sorts the provided numbers. However, for accurate mode-based testing, your push_swap should parse and use the flag to adjust its algorithm.


Grading Thresholds

Size Excellent Good Pass
100 < 700 < 1500 ≤ 2000
500 < 5500 < 8000 ≤ 12000

Results are shown with color-coded grades:

  • EXCELLENT — green
  • GOOD — blue
  • PASS — yellow
  • FAIL — red

Example Output

Running FULL TEST SUITE for ./push_swap

>> Testing Size: 100 | Mode: SIMPLE  ..................................................
>> Testing Size: 100 | Mode: MEDIUM  ..................................................
>> Testing Size: 100 | Mode: COMPLEX ..................................................
>> Testing Size: 100 | Mode: ADAPTIVE..................................................
>> Testing Size: 500 | Mode: SIMPLE  ..................................................
>> Testing Size: 500 | Mode: MEDIUM  ..................................................
>> Testing Size: 500 | Mode: COMPLEX ..................................................
>> Testing Size: 500 | Mode: ADAPTIVE..................................................

========================================================================================
PERFORMANCE SUMMARY
========================================================================================
SIZE   | MODE     | MAX (GRADE)        | MIN (GRADE)        | AVG (GRADE)        | FAILS
----------------------------------------------------------------------------------------
100    | SIMPLE   | 450 (EXCELLENT)    | 320 (EXCELLENT)    | 380 (EXCELLENT)    | 0
100    | MEDIUM   | 1200 (GOOD)        | 900 (EXCELLENT)    | 1050 (GOOD)        | 0
...

License

This project is licensed under the MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ft_ps_tester-1.0.0.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ft_ps_tester-1.0.0-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file ft_ps_tester-1.0.0.tar.gz.

File metadata

  • Download URL: ft_ps_tester-1.0.0.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for ft_ps_tester-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0c0d2061423b6c0fd13cd12dbbe49466988059b79b83115a170830abb2749ba7
MD5 a3c2026c6c0999e7c69d1bf691ed55f5
BLAKE2b-256 0f909fd4385dc1d01a716d8eec5ac2e81e70a4fb59738103c9ff39bb87c46edd

See more details on using hashes here.

File details

Details for the file ft_ps_tester-1.0.0-py3-none-any.whl.

File metadata

  • Download URL: ft_ps_tester-1.0.0-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.0

File hashes

Hashes for ft_ps_tester-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 8bf4836edfd45f513351bcff88315022f6242442ac06bcfe78a3feb6f0468ba9
MD5 c99060b2b8ff9364de1fa77615435453
BLAKE2b-256 acab81fa7af07fb7c0da9226f8fe004be66c9b7768c352de7c742cfb4dfa18de

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page