From 89da4c3650efd81bad015223b2206ee01486b2bd Mon Sep 17 00:00:00 2001 From: Kinara2020 Date: Thu, 18 Jun 2026 14:08:07 +0530 Subject: [PATCH] test: add pytest suite for FLAMES game core logic --- package-lock.json | 71 +--------------------------------------- tests/test_flames.py | 77 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 78 insertions(+), 70 deletions(-) create mode 100644 tests/test_flames.py diff --git a/package-lock.json b/package-lock.json index 92aeb48f..1d4932ba 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2,74 +2,5 @@ "name": "python-mini-project", "lockfileVersion": 3, "requires": true, - "packages": { - "": { - "devDependencies": { - "@playwright/test": "^1.60.0" - } - }, - "node_modules/@playwright/test": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.60.0.tgz", - "integrity": "sha512-O71yZIbAh/PxDMNGns37GHBIfrVkEVyn+AXyIa5dOTfb4/xNvRWV+Vv/NMbNCtODB/pO7vLlF2OTmMVLhmr7Ag==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright": "1.60.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/playwright": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.60.0.tgz", - "integrity": "sha512-hheHdokM8cdqCb0lcE3s+zT4t4W+vvjpGxsZlDnikarzx8tSzMebh3UiFtgqwFwnTnjYQcsyMF8ei2mCO/tpeA==", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "playwright-core": "1.60.0" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=18" - }, - "optionalDependencies": { - "fsevents": "2.3.2" - } - }, - "node_modules/playwright-core": { - "version": "1.60.0", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.60.0.tgz", - "integrity": "sha512-9bW6zvX/m0lEbgTKJ6YppOKx8H3VOPBMOCFh2irXFOT4BbHgrx5hPjwJYLT40Lu+4qtD36qKc/Hn56StUW57IA==", - "dev": true, - "license": "Apache-2.0", - "bin": { - "playwright-core": "cli.js" - }, - "engines": { - "node": ">=18" - } - } - } + "packages": {} } diff --git a/tests/test_flames.py b/tests/test_flames.py new file mode 100644 index 00000000..a2b5fe0e --- /dev/null +++ b/tests/test_flames.py @@ -0,0 +1,77 @@ +""" +Tests for FLAMES Game core logic. +""" + +def remove_common_chars(name1, name2): + name1_list = list(name1) + name2_list = list(name2) + for char in name1_list[:]: + if char in name2_list: + name1_list.remove(char) + name2_list.remove(char) + return name1_list, name2_list + + +def calculate_flames(count): + flames = ['F', 'L', 'A', 'M', 'E', 'S'] + index = 0 + while len(flames) > 1: + index = (index + count - 1) % len(flames) + flames.pop(index) + return flames[0] + + +def calculate_score(name1, name2, count): + total_len = len(name1) + len(name2) + matched_chars = total_len - count + return 30 + round((matched_chars / total_len) * 70) if total_len > 0 else 0 + + +# Tests +def test_remove_common_chars_basic(): + n1, n2 = remove_common_chars("alice", "bob") + assert len(n1) + len(n2) > 0 + + +def test_remove_common_chars_identical(): + n1, n2 = remove_common_chars("abc", "abc") + assert len(n1) + len(n2) == 0 + + +def test_flames_result_valid(): + result = calculate_flames(3) + assert result in ['F', 'L', 'A', 'M', 'E', 'S'] + + +def test_flames_count_one(): + result = calculate_flames(1) + assert result in ['F', 'L', 'A', 'M', 'E', 'S'] + + +def test_flames_count_six(): + result = calculate_flames(6) + assert result in ['F', 'L', 'A', 'M', 'E', 'S'] + + +def test_score_range(): + score = calculate_score("alice", "bob", 4) + assert 0 <= score <= 100 + + +def test_score_full_match(): + score = calculate_score("abc", "abc", 0) + assert score == 100 + + +def test_degenerate_case(): + n1, n2 = remove_common_chars("abc", "abc") + count = len(n1) + len(n2) + assert count == 0 + + +def test_flames_known_output(): + # "alice" vs "bob" — count = 4+1 = 5 remaining + n1, n2 = remove_common_chars("alice", "bob") + count = len(n1) + len(n2) + result = calculate_flames(count) + assert result in ['F', 'L', 'A', 'M', 'E', 'S'] \ No newline at end of file