@tyvm/knowhow 0.0.32 → 0.0.34
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/autodoc/plugins/downloader/downloader.mdx +2 -2
- package/benchmarks/.dockerignore +7 -0
- package/benchmarks/README.md +166 -0
- package/benchmarks/docker/Dockerfile +68 -0
- package/benchmarks/example-config.yml +27 -0
- package/benchmarks/jest.config.js +13 -0
- package/benchmarks/package-lock.json +4297 -0
- package/benchmarks/package.json +39 -0
- package/benchmarks/results/4542435/2025-08-05/lms/lms-openai-gpt-oss-20b.json +2814 -0
- package/benchmarks/results/4542435/2025-08-05/lms/lms-qwen-qwen3-30b-a3b-2507.json +2014 -0
- package/benchmarks/results/4fb9125/2025-08-07/anthropic/anthropic-claude-sonnet-4-20250514.json +3121 -0
- package/benchmarks/results/5766aee/2025-08-02/lms-qwen/qwen3-coder-30b.json +98 -0
- package/benchmarks/results/6d73808/2025-08-07/openai/openai-gpt-5.json +3256 -0
- package/benchmarks/results/77bf0a6/2025-08-02/lms-qwen/qwen3-30b-a3b-2507.json +4298 -0
- package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3031 -0
- package/benchmarks/results/8c0d445/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +2990 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json +3256 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3007 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-2025-04-14.json +3256 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-mini-2025-04-14.json +3036 -0
- package/benchmarks/results/ac6b2ab/2025-08-03/openai/openai-gpt-4.1-nano-2025-04-14.json +3280 -0
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-30b-a3b-2507.json +1920 -0
- package/benchmarks/results/adff675/2025-08-04/lms/lms-qwen-qwen3-coder-30b.json +3281 -0
- package/benchmarks/results/b502ed9/2025-08-03/lms-qwen/qwen3-coder-30b.json +2896 -0
- package/benchmarks/results/d1a8129/2025-08-03/lms/lms-qwen-qwen3-coder-30b.json +3011 -0
- package/benchmarks/results/e60471c/2025-08-03/lms/qwen3-30b-a3b-2507.json +3003 -0
- package/benchmarks/scripts/build-and-run.sh +47 -0
- package/benchmarks/scripts/clone-exercism.sh +92 -0
- package/benchmarks/scripts/validate.sh +48 -0
- package/benchmarks/src/__tests__/runner.test.ts +27 -0
- package/benchmarks/src/cli.ts +90 -0
- package/benchmarks/src/evaluators/EvaluatorRegistry.ts +64 -0
- package/benchmarks/src/evaluators/JavaScriptEvaluator.ts +183 -0
- package/benchmarks/src/evaluators/index.ts +3 -0
- package/benchmarks/src/evaluators/types.ts +22 -0
- package/benchmarks/src/index.ts +3 -0
- package/benchmarks/src/providers.ts +13 -0
- package/benchmarks/src/runner.ts +824 -0
- package/benchmarks/src/types.ts +63 -0
- package/benchmarks/tsconfig.json +19 -0
- package/jest.config.js +2 -1
- package/leaderboard/README.md +148 -0
- package/leaderboard/app/api/benchmark-data/route.ts +131 -0
- package/leaderboard/app/api/benchmark-detail/route.ts +172 -0
- package/leaderboard/app/details/[model]/[provider]/[language]/page.tsx +501 -0
- package/leaderboard/app/exercise/[model]/[provider]/[language]/[exercise]/page.tsx +375 -0
- package/leaderboard/app/globals.css +27 -0
- package/leaderboard/app/layout.tsx +21 -0
- package/leaderboard/app/page.tsx +170 -0
- package/leaderboard/components/LeaderboardTable.tsx +168 -0
- package/leaderboard/components/PerformanceChart.tsx +109 -0
- package/leaderboard/next-env.d.ts +5 -0
- package/leaderboard/next.config.js +4 -0
- package/leaderboard/package-lock.json +6363 -0
- package/leaderboard/package.json +28 -0
- package/leaderboard/postcss.config.js +6 -0
- package/leaderboard/tailwind.config.js +17 -0
- package/leaderboard/tsconfig.json +28 -0
- package/leaderboard/types/benchmark.ts +67 -0
- package/leaderboard/utils/dataProcessor.ts +33 -0
- package/package.json +2 -1
- package/src/agents/base/base.ts +147 -21
- package/src/agents/base/prompt.ts +28 -0
- package/src/agents/index.ts +3 -0
- package/src/agents/patcher/patcher.ts +6 -4
- package/src/agents/setup/setup.ts +56 -0
- package/src/agents/tools/agentCall.ts +6 -2
- package/src/agents/tools/aiClient.ts +74 -8
- package/src/agents/tools/execCommand.ts +13 -14
- package/src/agents/tools/executeScript/README.md +16 -0
- package/src/agents/tools/index.ts +2 -0
- package/src/agents/tools/list.ts +73 -16
- package/src/agents/tools/startAgentTask.ts +109 -0
- package/src/agents/tools/textSearch.ts +1 -1
- package/src/agents/tools/visionTool.ts +31 -2
- package/src/agents/tools/ycmd/client.ts +608 -0
- package/src/agents/tools/ycmd/definitions.ts +294 -0
- package/src/agents/tools/ycmd/detection.ts +211 -0
- package/src/agents/tools/ycmd/index.ts +11 -0
- package/src/agents/tools/ycmd/installer.ts +251 -0
- package/src/agents/tools/ycmd/server.ts +535 -0
- package/src/agents/tools/ycmd/serverManager.ts +316 -0
- package/src/agents/tools/ycmd/tools/completion.ts +113 -0
- package/src/agents/tools/ycmd/tools/diagnostics.ts +155 -0
- package/src/agents/tools/ycmd/tools/getLocations.ts +173 -0
- package/src/agents/tools/ycmd/tools/goto.ts +169 -0
- package/src/agents/tools/ycmd/tools/refactor.ts +204 -0
- package/src/agents/tools/ycmd/tools/signature.ts +174 -0
- package/src/agents/tools/ycmd/tools/start.ts +95 -0
- package/src/agents/tools/ycmd/utils/pathUtils.ts +59 -0
- package/src/ai.ts +15 -0
- package/src/chat/CliChatService.ts +277 -0
- package/src/chat/modules/AgentModule.ts +980 -0
- package/src/chat/modules/AskModule.ts +98 -0
- package/src/chat/modules/BaseChatModule.ts +66 -0
- package/src/chat/modules/InternalChatModule.ts +174 -0
- package/src/chat/modules/SearchModule.ts +166 -0
- package/src/chat/modules/SetupModule.ts +185 -0
- package/src/chat/modules/SystemModule.ts +120 -0
- package/src/chat/modules/VoiceModule.ts +70 -0
- package/src/chat/modules/index.js +5 -0
- package/src/chat/types.ts +97 -0
- package/src/chat.ts +9 -1
- package/src/chat2.ts +62 -0
- package/src/cli.ts +264 -35
- package/src/clients/anthropic.ts +14 -7
- package/src/clients/gemini.ts +15 -7
- package/src/clients/http.ts +17 -7
- package/src/clients/index.ts +117 -4
- package/src/clients/knowhow.ts +7 -2
- package/src/clients/knowhowMcp.ts +118 -0
- package/src/clients/openai.ts +32 -8
- package/src/clients/types.ts +1 -0
- package/src/clients/xai.ts +17 -5
- package/src/config.ts +30 -5
- package/src/conversion.ts +4 -1
- package/src/embeddings.ts +79 -23
- package/src/login.ts +26 -9
- package/src/microphone.ts +0 -1
- package/src/plugins/downloader/downloader.ts +72 -24
- package/src/plugins/downloader/plugin.ts +3 -1
- package/src/plugins/plugins.ts +3 -0
- package/src/processors/CustomVariables.ts +425 -0
- package/src/processors/HarmonyToolProcessor.ts +264 -0
- package/src/processors/XmlToolCallProcessor.ts +533 -0
- package/src/processors/index.ts +3 -0
- package/src/prompts/KnowhowConfigExamples.ts +376 -0
- package/src/services/KnowhowClient.ts +49 -3
- package/src/services/Mcp.ts +42 -3
- package/src/services/McpServer.ts +14 -4
- package/src/services/McpWebsocketTransport.ts +21 -7
- package/src/services/MessageProcessor.ts +10 -5
- package/src/services/index.ts +5 -0
- package/src/services/script-execution/ScriptExecutor.ts +34 -1
- package/src/services/types.ts +17 -14
- package/src/types.ts +17 -0
- package/src/utils/index.ts +138 -0
- package/tests/XmlToolCallProcessor.test.ts +468 -0
- package/tests/manual/ycmd/debug_diagnostics_test.ts +127 -0
- package/tests/manual/ycmd/fixtures/debug_diagnostics.ts +26 -0
- package/tests/manual/ycmd/fixtures/file_change_test.ts +17 -0
- package/tests/manual/ycmd/minimal_advanced_test.ts +108 -0
- package/tests/manual/ycmd/simple_diagnostics_test.ts +61 -0
- package/tests/manual/ycmd/simple_test.ts +74 -0
- package/tests/manual/ycmd/test-typescript-sample.ts +34 -0
- package/tests/manual/ycmd/test_advanced_features.ts +407 -0
- package/tests/manual/ycmd/test_advanced_with_tools.ts +320 -0
- package/tests/manual/ycmd/test_comprehensive_typescript.ts +179 -0
- package/tests/manual/ycmd/test_diagnostics_file_changes.ts +249 -0
- package/tests/manual/ycmd/test_diagnostics_fix.ts +99 -0
- package/tests/manual/ycmd/test_diagnostics_simple.ts +100 -0
- package/tests/manual/ycmd/test_diagnostics_timing.ts +120 -0
- package/tests/manual/ycmd/test_discover_commands.ts +310 -0
- package/tests/manual/ycmd/test_endpoints.ts +115 -0
- package/tests/manual/ycmd/test_final_comprehensive.ts +218 -0
- package/tests/manual/ycmd/test_final_validation.ts +150 -0
- package/tests/manual/ycmd/test_implementation.js +42 -0
- package/tests/manual/ycmd/test_individual_ycmd_tool.ts +39 -0
- package/tests/manual/ycmd/test_server_manager.ts +52 -0
- package/tests/manual/ycmd/test_simple_debug.ts +86 -0
- package/tests/manual/ycmd/test_tsserver_workflow.js +83 -0
- package/tests/manual/ycmd/test_tsserver_workflow.ts +122 -0
- package/tests/manual/ycmd/test_typescript_simple.ts +48 -0
- package/tests/manual/ycmd/test_typescript_ycmd.ts +105 -0
- package/tests/manual/ycmd/test_workspace_config.ts +90 -0
- package/tests/manual/ycmd/test_ycmd_auto_start.ts +137 -0
- package/tests/manual/ycmd/test_ycmd_comprehensive.ts +73 -0
- package/tests/manual/ycmd/test_ycmd_connection.py +10 -0
- package/tests/manual/ycmd/test_ycmd_direct.ts +142 -0
- package/tests/manual/ycmd/test_ycmd_experiment.ts +48 -0
- package/tests/manual/ycmd/test_ycmd_final.ts +200 -0
- package/tests/manual/ycmd/test_ycmd_fixed.py +18 -0
- package/tests/manual/ycmd/test_ycmd_integration.ts +112 -0
- package/tests/manual/ycmd/test_ycmd_simple.ts +45 -0
- package/tests/manual/ycmd/test_ycmd_usage.py +27 -0
- package/tests/manual/ycmd/working_simple_test.ts +134 -0
- package/ts_build/src/agents/base/base.d.ts +14 -1
- package/ts_build/src/agents/base/base.js +91 -17
- package/ts_build/src/agents/base/base.js.map +1 -1
- package/ts_build/src/agents/base/prompt.d.ts +1 -1
- package/ts_build/src/agents/base/prompt.js +28 -0
- package/ts_build/src/agents/base/prompt.js.map +1 -1
- package/ts_build/src/agents/index.d.ts +2 -0
- package/ts_build/src/agents/index.js +2 -0
- package/ts_build/src/agents/index.js.map +1 -1
- package/ts_build/src/agents/patcher/patcher.js +6 -3
- package/ts_build/src/agents/patcher/patcher.js.map +1 -1
- package/ts_build/src/agents/setup/setup.d.ts +8 -0
- package/ts_build/src/agents/setup/setup.js +59 -0
- package/ts_build/src/agents/setup/setup.js.map +1 -0
- package/ts_build/src/agents/tools/agentCall.js +5 -2
- package/ts_build/src/agents/tools/agentCall.js.map +1 -1
- package/ts_build/src/agents/tools/aiClient.d.ts +6 -5
- package/ts_build/src/agents/tools/aiClient.js +37 -6
- package/ts_build/src/agents/tools/aiClient.js.map +1 -1
- package/ts_build/src/agents/tools/execCommand.d.ts +2 -2
- package/ts_build/src/agents/tools/execCommand.js +5 -6
- package/ts_build/src/agents/tools/execCommand.js.map +1 -1
- package/ts_build/src/agents/tools/executeScript/index.d.ts +1 -1
- package/ts_build/src/agents/tools/index.d.ts +2 -0
- package/ts_build/src/agents/tools/index.js +2 -0
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +66 -16
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/agents/tools/startAgentTask.d.ts +13 -0
- package/ts_build/src/agents/tools/startAgentTask.js +74 -0
- package/ts_build/src/agents/tools/startAgentTask.js.map +1 -0
- package/ts_build/src/agents/tools/startChatTask.d.ts +13 -0
- package/ts_build/src/agents/tools/startChatTask.js +73 -0
- package/ts_build/src/agents/tools/startChatTask.js.map +1 -0
- package/ts_build/src/agents/tools/textSearch.js +1 -1
- package/ts_build/src/agents/tools/textSearch.js.map +1 -1
- package/ts_build/src/agents/tools/visionTool.d.ts +1 -1
- package/ts_build/src/agents/tools/visionTool.js +23 -3
- package/ts_build/src/agents/tools/visionTool.js.map +1 -1
- package/ts_build/src/agents/tools/ycmd/client.d.ts +93 -0
- package/ts_build/src/agents/tools/ycmd/client.js +355 -0
- package/ts_build/src/agents/tools/ycmd/client.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/definitions.d.ts +345 -0
- package/ts_build/src/agents/tools/ycmd/definitions.js +298 -0
- package/ts_build/src/agents/tools/ycmd/definitions.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/detection.d.ts +11 -0
- package/ts_build/src/agents/tools/ycmd/detection.js +175 -0
- package/ts_build/src/agents/tools/ycmd/detection.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/index.d.ts +8 -0
- package/ts_build/src/agents/tools/ycmd/index.js +20 -0
- package/ts_build/src/agents/tools/ycmd/index.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/installer.d.ts +19 -0
- package/ts_build/src/agents/tools/ycmd/installer.js +196 -0
- package/ts_build/src/agents/tools/ycmd/installer.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/server.d.ts +35 -0
- package/ts_build/src/agents/tools/ycmd/server.js +363 -0
- package/ts_build/src/agents/tools/ycmd/server.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/serverManager.d.ts +39 -0
- package/ts_build/src/agents/tools/ycmd/serverManager.js +210 -0
- package/ts_build/src/agents/tools/ycmd/serverManager.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/completion.d.ts +22 -0
- package/ts_build/src/agents/tools/ycmd/tools/completion.js +72 -0
- package/ts_build/src/agents/tools/ycmd/tools/completion.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/diagnostics.d.ts +42 -0
- package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js +88 -0
- package/ts_build/src/agents/tools/ycmd/tools/diagnostics.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/getLocations.d.ts +22 -0
- package/ts_build/src/agents/tools/ycmd/tools/getLocations.js +142 -0
- package/ts_build/src/agents/tools/ycmd/tools/getLocations.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/goto.d.ts +20 -0
- package/ts_build/src/agents/tools/ycmd/tools/goto.js +101 -0
- package/ts_build/src/agents/tools/ycmd/tools/goto.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/refactor.d.ts +32 -0
- package/ts_build/src/agents/tools/ycmd/tools/refactor.js +123 -0
- package/ts_build/src/agents/tools/ycmd/tools/refactor.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/signature.d.ts +25 -0
- package/ts_build/src/agents/tools/ycmd/tools/signature.js +110 -0
- package/ts_build/src/agents/tools/ycmd/tools/signature.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/tools/start.d.ts +17 -0
- package/ts_build/src/agents/tools/ycmd/tools/start.js +65 -0
- package/ts_build/src/agents/tools/ycmd/tools/start.js.map +1 -0
- package/ts_build/src/agents/tools/ycmd/utils/pathUtils.d.ts +4 -0
- package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js +67 -0
- package/ts_build/src/agents/tools/ycmd/utils/pathUtils.js.map +1 -0
- package/ts_build/src/ai.d.ts +1 -0
- package/ts_build/src/ai.js +40 -1
- package/ts_build/src/ai.js.map +1 -1
- package/ts_build/src/chat/ChatCommandHandler.d.ts +36 -0
- package/ts_build/src/chat/ChatCommandHandler.js +268 -0
- package/ts_build/src/chat/ChatCommandHandler.js.map +1 -0
- package/ts_build/src/chat/ChatInputManager.d.ts +22 -0
- package/ts_build/src/chat/ChatInputManager.js +85 -0
- package/ts_build/src/chat/ChatInputManager.js.map +1 -0
- package/ts_build/src/chat/ChatManager.d.ts +49 -0
- package/ts_build/src/chat/ChatManager.js +271 -0
- package/ts_build/src/chat/ChatManager.js.map +1 -0
- package/ts_build/src/chat/ChatSession.d.ts +32 -0
- package/ts_build/src/chat/ChatSession.js +3 -0
- package/ts_build/src/chat/ChatSession.js.map +1 -0
- package/ts_build/src/chat/ChatSessionManager.d.ts +19 -0
- package/ts_build/src/chat/ChatSessionManager.js +188 -0
- package/ts_build/src/chat/ChatSessionManager.js.map +1 -0
- package/ts_build/src/chat/ChatStateManager.d.ts +58 -0
- package/ts_build/src/chat/ChatStateManager.js +156 -0
- package/ts_build/src/chat/ChatStateManager.js.map +1 -0
- package/ts_build/src/chat/CliChatService.d.ts +35 -0
- package/ts_build/src/chat/CliChatService.js +201 -0
- package/ts_build/src/chat/CliChatService.js.map +1 -0
- package/ts_build/src/chat/InterruptibleInput.d.ts +20 -0
- package/ts_build/src/chat/InterruptibleInput.js +109 -0
- package/ts_build/src/chat/InterruptibleInput.js.map +1 -0
- package/ts_build/src/chat/interfaces/ChatModule.d.ts +6 -0
- package/ts_build/src/chat/interfaces/ChatModule.js +3 -0
- package/ts_build/src/chat/interfaces/ChatModule.js.map +1 -0
- package/ts_build/src/chat/modules/AgentModule.d.ts +56 -0
- package/ts_build/src/chat/modules/AgentModule.js +705 -0
- package/ts_build/src/chat/modules/AgentModule.js.map +1 -0
- package/ts_build/src/chat/modules/AskModule.d.ts +10 -0
- package/ts_build/src/chat/modules/AskModule.js +63 -0
- package/ts_build/src/chat/modules/AskModule.js.map +1 -0
- package/ts_build/src/chat/modules/BaseChatModule.d.ts +14 -0
- package/ts_build/src/chat/modules/BaseChatModule.js +32 -0
- package/ts_build/src/chat/modules/BaseChatModule.js.map +1 -0
- package/ts_build/src/chat/modules/InternalChatModule.d.ts +24 -0
- package/ts_build/src/chat/modules/InternalChatModule.js +127 -0
- package/ts_build/src/chat/modules/InternalChatModule.js.map +1 -0
- package/ts_build/src/chat/modules/SearchModule.d.ts +12 -0
- package/ts_build/src/chat/modules/SearchModule.js +119 -0
- package/ts_build/src/chat/modules/SearchModule.js.map +1 -0
- package/ts_build/src/chat/modules/SetupModule.d.ts +15 -0
- package/ts_build/src/chat/modules/SetupModule.js +147 -0
- package/ts_build/src/chat/modules/SetupModule.js.map +1 -0
- package/ts_build/src/chat/modules/SystemModule.d.ts +14 -0
- package/ts_build/src/chat/modules/SystemModule.js +90 -0
- package/ts_build/src/chat/modules/SystemModule.js.map +1 -0
- package/ts_build/src/chat/modules/VoiceModule.d.ts +11 -0
- package/ts_build/src/chat/modules/VoiceModule.js +57 -0
- package/ts_build/src/chat/modules/VoiceModule.js.map +1 -0
- package/ts_build/src/chat/types.d.ts +83 -0
- package/ts_build/src/chat/types.js +3 -0
- package/ts_build/src/chat/types.js.map +1 -0
- package/ts_build/src/chat.js +7 -1
- package/ts_build/src/chat.js.map +1 -1
- package/ts_build/src/chat2.d.ts +3 -0
- package/ts_build/src/chat2.js +47 -0
- package/ts_build/src/chat2.js.map +1 -0
- package/ts_build/src/cli.js +218 -37
- package/ts_build/src/cli.js.map +1 -1
- package/ts_build/src/clients/anthropic.d.ts +5 -2
- package/ts_build/src/clients/anthropic.js +12 -7
- package/ts_build/src/clients/anthropic.js.map +1 -1
- package/ts_build/src/clients/gemini.d.ts +6 -3
- package/ts_build/src/clients/gemini.js +13 -7
- package/ts_build/src/clients/gemini.js.map +1 -1
- package/ts_build/src/clients/http.d.ts +1 -0
- package/ts_build/src/clients/http.js +12 -5
- package/ts_build/src/clients/http.js.map +1 -1
- package/ts_build/src/clients/index.d.ts +10 -0
- package/ts_build/src/clients/index.js +74 -4
- package/ts_build/src/clients/index.js.map +1 -1
- package/ts_build/src/clients/knowhow.d.ts +3 -1
- package/ts_build/src/clients/knowhow.js +8 -2
- package/ts_build/src/clients/knowhow.js.map +1 -1
- package/ts_build/src/clients/knowhowMcp.d.ts +20 -0
- package/ts_build/src/clients/knowhowMcp.js +86 -0
- package/ts_build/src/clients/knowhowMcp.js.map +1 -0
- package/ts_build/src/clients/openai.d.ts +5 -2
- package/ts_build/src/clients/openai.js +29 -8
- package/ts_build/src/clients/openai.js.map +1 -1
- package/ts_build/src/clients/types.d.ts +1 -0
- package/ts_build/src/clients/xai.d.ts +5 -2
- package/ts_build/src/clients/xai.js +15 -5
- package/ts_build/src/clients/xai.js.map +1 -1
- package/ts_build/src/config.js +24 -3
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/conversion.js +6 -4
- package/ts_build/src/conversion.js.map +1 -1
- package/ts_build/src/embeddings.d.ts +2 -1
- package/ts_build/src/embeddings.js +62 -17
- package/ts_build/src/embeddings.js.map +1 -1
- package/ts_build/src/login.d.ts +1 -1
- package/ts_build/src/login.js +21 -7
- package/ts_build/src/login.js.map +1 -1
- package/ts_build/src/microphone.js.map +1 -1
- package/ts_build/src/plugins/downloader/downloader.d.ts +4 -5
- package/ts_build/src/plugins/downloader/downloader.js +55 -26
- package/ts_build/src/plugins/downloader/downloader.js.map +1 -1
- package/ts_build/src/plugins/downloader/plugin.js +5 -3
- package/ts_build/src/plugins/downloader/plugin.js.map +1 -1
- package/ts_build/src/plugins/plugins.js +3 -0
- package/ts_build/src/plugins/plugins.js.map +1 -1
- package/ts_build/src/processors/CustomVariables.d.ts +32 -0
- package/ts_build/src/processors/CustomVariables.js +297 -0
- package/ts_build/src/processors/CustomVariables.js.map +1 -0
- package/ts_build/src/processors/HarmonyToolProcessor.d.ts +15 -0
- package/ts_build/src/processors/HarmonyToolProcessor.js +154 -0
- package/ts_build/src/processors/HarmonyToolProcessor.js.map +1 -0
- package/ts_build/src/processors/XmlToolCallProcessor.d.ts +14 -0
- package/ts_build/src/processors/XmlToolCallProcessor.js +357 -0
- package/ts_build/src/processors/XmlToolCallProcessor.js.map +1 -0
- package/ts_build/src/processors/index.d.ts +3 -0
- package/ts_build/src/processors/index.js +7 -1
- package/ts_build/src/processors/index.js.map +1 -1
- package/ts_build/src/prompts/KnowhowConfigExamples.d.ts +2 -0
- package/ts_build/src/prompts/KnowhowConfigExamples.js +379 -0
- package/ts_build/src/prompts/KnowhowConfigExamples.js.map +1 -0
- package/ts_build/src/services/KnowhowClient.d.ts +22 -0
- package/ts_build/src/services/KnowhowClient.js +14 -2
- package/ts_build/src/services/KnowhowClient.js.map +1 -1
- package/ts_build/src/services/Mcp.d.ts +1 -0
- package/ts_build/src/services/Mcp.js +20 -3
- package/ts_build/src/services/Mcp.js.map +1 -1
- package/ts_build/src/services/McpServer.d.ts +1 -1
- package/ts_build/src/services/McpServer.js +8 -4
- package/ts_build/src/services/McpServer.js.map +1 -1
- package/ts_build/src/services/McpWebsocketTransport.js +17 -7
- package/ts_build/src/services/McpWebsocketTransport.js.map +1 -1
- package/ts_build/src/services/MessageProcessor.d.ts +1 -1
- package/ts_build/src/services/MessageProcessor.js +4 -4
- package/ts_build/src/services/MessageProcessor.js.map +1 -1
- package/ts_build/src/services/index.d.ts +2 -0
- package/ts_build/src/services/index.js +4 -0
- package/ts_build/src/services/index.js.map +1 -1
- package/ts_build/src/services/script-execution/ScriptExecutor.d.ts +1 -0
- package/ts_build/src/services/script-execution/ScriptExecutor.js +23 -0
- package/ts_build/src/services/script-execution/ScriptExecutor.js.map +1 -1
- package/ts_build/src/services/types.d.ts +2 -6
- package/ts_build/src/services/types.js +4 -4
- package/ts_build/src/services/types.js.map +1 -1
- package/ts_build/src/types.d.ts +11 -0
- package/ts_build/src/types.js +8 -0
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/utils/index.d.ts +2 -0
- package/ts_build/src/utils/index.js +102 -1
- package/ts_build/src/utils/index.js.map +1 -1
- package/ts_build/tests/XmlToolCallProcessor.test.d.ts +1 -0
- package/ts_build/tests/XmlToolCallProcessor.test.js +376 -0
- package/ts_build/tests/XmlToolCallProcessor.test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js +114 -0
- package/ts_build/tests/manual/ycmd/debug_diagnostics_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js +104 -0
- package/ts_build/tests/manual/ycmd/minimal_advanced_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js +74 -0
- package/ts_build/tests/manual/ycmd/simple_diagnostics_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/simple_test.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/simple_test.js +82 -0
- package/ts_build/tests/manual/ycmd/simple_test.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test-typescript-sample.d.ts +14 -0
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js +20 -0
- package/ts_build/tests/manual/ycmd/test-typescript-sample.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_advanced_features.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_advanced_features.js +297 -0
- package/ts_build/tests/manual/ycmd/test_advanced_features.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.d.ts +3 -0
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js +262 -0
- package/ts_build/tests/manual/ycmd/test_advanced_with_tools.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js +186 -0
- package/ts_build/tests/manual/ycmd/test_comprehensive_typescript.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js +174 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_file_changes.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js +106 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_fix.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js +104 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_simple.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js +119 -0
- package/ts_build/tests/manual/ycmd/test_diagnostics_timing.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_discover_commands.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_discover_commands.js +243 -0
- package/ts_build/tests/manual/ycmd/test_discover_commands.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_endpoints.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_endpoints.js +120 -0
- package/ts_build/tests/manual/ycmd/test_endpoints.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js +221 -0
- package/ts_build/tests/manual/ycmd/test_final_comprehensive.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_final_validation.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_final_validation.js +160 -0
- package/ts_build/tests/manual/ycmd/test_final_validation.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js +37 -0
- package/ts_build/tests/manual/ycmd/test_individual_ycmd_tool.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_server_manager.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_server_manager.js +38 -0
- package/ts_build/tests/manual/ycmd/test_server_manager.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_simple_debug.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_simple_debug.js +99 -0
- package/ts_build/tests/manual/ycmd/test_simple_debug.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js +128 -0
- package/ts_build/tests/manual/ycmd/test_tsserver_workflow.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_simple.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js +66 -0
- package/ts_build/tests/manual/ycmd/test_typescript_simple.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js +105 -0
- package/ts_build/tests/manual/ycmd/test_typescript_ycmd.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_workspace_config.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_workspace_config.js +89 -0
- package/ts_build/tests/manual/ycmd/test_workspace_config.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js +130 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_auto_start.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.d.ts +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js +83 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_comprehensive.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js +149 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_direct.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.d.ts +15 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js +58 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_experiment.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_final.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js +195 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_final.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.d.ts +3 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js +110 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_integration.js.map +1 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js +36 -0
- package/ts_build/tests/manual/ycmd/test_ycmd_simple.js.map +1 -0
- package/ts_build/tests/manual/ycmd/working_simple_test.d.ts +2 -0
- package/ts_build/tests/manual/ycmd/working_simple_test.js +134 -0
- package/ts_build/tests/manual/ycmd/working_simple_test.js.map +1 -0
- package/tsconfig.json +3 -1
package/benchmarks/results/8c0d445/2025-08-03/anthropic/anthropic-claude-sonnet-4-20250514.json
ADDED
|
@@ -0,0 +1,3031 @@
|
|
|
1
|
+
{
|
|
2
|
+
"config": {
|
|
3
|
+
"language": "javascript",
|
|
4
|
+
"maxExercises": 10,
|
|
5
|
+
"model": "claude-sonnet-4",
|
|
6
|
+
"provider": "anthropic",
|
|
7
|
+
"limits": {
|
|
8
|
+
"maxTurns": 30,
|
|
9
|
+
"maxTime": 300,
|
|
10
|
+
"maxCost": 1
|
|
11
|
+
},
|
|
12
|
+
"outputFile": "results.json"
|
|
13
|
+
},
|
|
14
|
+
"exercises": [
|
|
15
|
+
{
|
|
16
|
+
"exerciseName": "accumulate",
|
|
17
|
+
"status": "success",
|
|
18
|
+
"turns": 16,
|
|
19
|
+
"testResult": {
|
|
20
|
+
"passed": 5,
|
|
21
|
+
"failed": 0,
|
|
22
|
+
"total": 5,
|
|
23
|
+
"skipped": 0,
|
|
24
|
+
"success": true,
|
|
25
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":5,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":5,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202092172,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"accumulate()\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"accumulate() accumulation empty\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"accumulation empty\"},{\"ancestorTitles\":[\"accumulate()\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"accumulate() accumulate squares\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"accumulate squares\"},{\"ancestorTitles\":[\"accumulate()\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"accumulate() accumulate upcases\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"accumulate upcases\"},{\"ancestorTitles\":[\"accumulate()\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"accumulate() accumulate reversed strings\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"accumulate reversed strings\"},{\"ancestorTitles\":[\"accumulate()\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"accumulate() accumulate recursively\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"accumulate recursively\"}],\"endTime\":1754202092253,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/accumulate/accumulate.spec.js\",\"startTime\":1754202092181,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
26
|
+
"details": {
|
|
27
|
+
"numFailedTestSuites": 0,
|
|
28
|
+
"numFailedTests": 0,
|
|
29
|
+
"numPassedTestSuites": 1,
|
|
30
|
+
"numPassedTests": 5,
|
|
31
|
+
"numPendingTestSuites": 0,
|
|
32
|
+
"numPendingTests": 0,
|
|
33
|
+
"numRuntimeErrorTestSuites": 0,
|
|
34
|
+
"numTodoTests": 0,
|
|
35
|
+
"numTotalTestSuites": 1,
|
|
36
|
+
"numTotalTests": 5,
|
|
37
|
+
"openHandles": [],
|
|
38
|
+
"snapshot": {
|
|
39
|
+
"added": 0,
|
|
40
|
+
"didUpdate": false,
|
|
41
|
+
"failure": false,
|
|
42
|
+
"filesAdded": 0,
|
|
43
|
+
"filesRemoved": 0,
|
|
44
|
+
"filesRemovedList": [],
|
|
45
|
+
"filesUnmatched": 0,
|
|
46
|
+
"filesUpdated": 0,
|
|
47
|
+
"matched": 0,
|
|
48
|
+
"total": 0,
|
|
49
|
+
"unchecked": 0,
|
|
50
|
+
"uncheckedKeysByFile": [],
|
|
51
|
+
"unmatched": 0,
|
|
52
|
+
"updated": 0
|
|
53
|
+
},
|
|
54
|
+
"startTime": 1754202092172,
|
|
55
|
+
"success": true,
|
|
56
|
+
"testResults": [
|
|
57
|
+
{
|
|
58
|
+
"assertionResults": [
|
|
59
|
+
{
|
|
60
|
+
"ancestorTitles": [
|
|
61
|
+
"accumulate()"
|
|
62
|
+
],
|
|
63
|
+
"duration": 1,
|
|
64
|
+
"failureDetails": [],
|
|
65
|
+
"failureMessages": [],
|
|
66
|
+
"fullName": "accumulate() accumulation empty",
|
|
67
|
+
"invocations": 1,
|
|
68
|
+
"location": null,
|
|
69
|
+
"numPassingAsserts": 1,
|
|
70
|
+
"retryReasons": [],
|
|
71
|
+
"status": "passed",
|
|
72
|
+
"title": "accumulation empty"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"ancestorTitles": [
|
|
76
|
+
"accumulate()"
|
|
77
|
+
],
|
|
78
|
+
"duration": 0,
|
|
79
|
+
"failureDetails": [],
|
|
80
|
+
"failureMessages": [],
|
|
81
|
+
"fullName": "accumulate() accumulate squares",
|
|
82
|
+
"invocations": 1,
|
|
83
|
+
"location": null,
|
|
84
|
+
"numPassingAsserts": 1,
|
|
85
|
+
"retryReasons": [],
|
|
86
|
+
"status": "passed",
|
|
87
|
+
"title": "accumulate squares"
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
"ancestorTitles": [
|
|
91
|
+
"accumulate()"
|
|
92
|
+
],
|
|
93
|
+
"duration": 1,
|
|
94
|
+
"failureDetails": [],
|
|
95
|
+
"failureMessages": [],
|
|
96
|
+
"fullName": "accumulate() accumulate upcases",
|
|
97
|
+
"invocations": 1,
|
|
98
|
+
"location": null,
|
|
99
|
+
"numPassingAsserts": 1,
|
|
100
|
+
"retryReasons": [],
|
|
101
|
+
"status": "passed",
|
|
102
|
+
"title": "accumulate upcases"
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
"ancestorTitles": [
|
|
106
|
+
"accumulate()"
|
|
107
|
+
],
|
|
108
|
+
"duration": 0,
|
|
109
|
+
"failureDetails": [],
|
|
110
|
+
"failureMessages": [],
|
|
111
|
+
"fullName": "accumulate() accumulate reversed strings",
|
|
112
|
+
"invocations": 1,
|
|
113
|
+
"location": null,
|
|
114
|
+
"numPassingAsserts": 1,
|
|
115
|
+
"retryReasons": [],
|
|
116
|
+
"status": "passed",
|
|
117
|
+
"title": "accumulate reversed strings"
|
|
118
|
+
},
|
|
119
|
+
{
|
|
120
|
+
"ancestorTitles": [
|
|
121
|
+
"accumulate()"
|
|
122
|
+
],
|
|
123
|
+
"duration": 0,
|
|
124
|
+
"failureDetails": [],
|
|
125
|
+
"failureMessages": [],
|
|
126
|
+
"fullName": "accumulate() accumulate recursively",
|
|
127
|
+
"invocations": 1,
|
|
128
|
+
"location": null,
|
|
129
|
+
"numPassingAsserts": 1,
|
|
130
|
+
"retryReasons": [],
|
|
131
|
+
"status": "passed",
|
|
132
|
+
"title": "accumulate recursively"
|
|
133
|
+
}
|
|
134
|
+
],
|
|
135
|
+
"endTime": 1754202092253,
|
|
136
|
+
"message": "",
|
|
137
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/accumulate/accumulate.spec.js",
|
|
138
|
+
"startTime": 1754202092181,
|
|
139
|
+
"status": "passed",
|
|
140
|
+
"summary": ""
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
"wasInterrupted": false
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"timeElapsed": 59.498,
|
|
147
|
+
"cost": 0.10469383647000001,
|
|
148
|
+
"startTime": "2025-08-03T06:20:32.782Z",
|
|
149
|
+
"endTime": "2025-08-03T06:21:32.280Z",
|
|
150
|
+
"finalOutput": "I have successfully solved the accumulate coding exercise! Here's what I accomplished:\n\n## Implementation Summary\n\n**Problem**: Implement an `accumulate` function that applies an operation to each element of a collection and returns a new collection with the results, without using built-in map/collect functions.\n\n**Solution**: I implemented the `accumulate` function in `accumulate.js`:\n\n```javascript\nexport const accumulate = (collection, operation) => {\n // Handle empty collection\n if (!collection || collection.length === 0) {\n return [];\n }\n\n // Create a new array to store results\n const result = [];\n for (let i = 0; i < collection.length; i++) {\n result.push(operation(collection[i]));\n }\n return result;\n};\n```\n\n## Key Features\n\n1. **Handles empty collections**: Returns an empty array when given an empty or null collection\n2. **Uses basic tools only**: Implements the functionality with a simple for loop, avoiding built-in higher-order functions as required\n3. **Works recursively**: Supports nested `accumulate` calls\n4. **Applies operations correctly**: Works with various operations like squaring numbers, uppercasing strings, reversing strings, etc.\n\n## Testing Results\n\n✅ **All 5 tests pass**:\n- `accumulation empty` - Handles empty arrays\n- `accumulate squares` - Squares numbers [1,2,3] → [1,4,9]\n- `accumulate upcases` - Converts to uppercase ['hello','world'] → ['HELLO','WORLD'] \n- `accumulate reversed strings` - Reverses strings ['the','quick'] → ['eht','kciuq']\n- `accumulate recursively` - Handles nested accumulate calls for complex transformations\n\n## Additional Work Done\n\n1. **Unskipped all tests**: Changed `xtest` to `test` for all test cases as requested\n2. **Fixed linting issues**: Removed unused `xtest` import to ensure clean code\n3. **Verified functionality**: All tests pass and no linting errors remain\n\nThe solution successfully meets all requirements and restrictions, implementing the accumulate operation from scratch using basic programming constructs."
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"exerciseName": "acronym",
|
|
154
|
+
"status": "success",
|
|
155
|
+
"turns": 15,
|
|
156
|
+
"testResult": {
|
|
157
|
+
"passed": 9,
|
|
158
|
+
"failed": 0,
|
|
159
|
+
"total": 9,
|
|
160
|
+
"skipped": 0,
|
|
161
|
+
"success": true,
|
|
162
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":9,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":9,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202144105,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Acronyms are produced from\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Acronyms are produced from title cased phrases\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"title cased phrases\"},{\"ancestorTitles\":[\"Acronyms are produced from\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Acronyms are produced from other title cased phrases\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"other title cased phrases\"},{\"ancestorTitles\":[\"Acronyms are produced from\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Acronyms are produced from phrases with punctuation\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"phrases with punctuation\"},{\"ancestorTitles\":[\"Acronyms are produced from\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Acronyms are produced from phrases with all uppercase words\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"phrases with all uppercase words\"},{\"ancestorTitles\":[\"Acronyms are produced from\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Acronyms are produced from phrases with punctuation without whitespace\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"phrases with punctuation without whitespace\"},{\"ancestorTitles\":[\"Acronyms are produced from\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Acronyms are produced from long phrases\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"long phrases\"},{\"ancestorTitles\":[\"Acronyms are produced from\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Acronyms are produced from phrases with consecutive delimiters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"phrases with consecutive delimiters\"},{\"ancestorTitles\":[\"Acronyms are produced from\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Acronyms are produced from phrases with apostrophes\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"phrases with apostrophes\"},{\"ancestorTitles\":[\"Acronyms are produced from\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Acronyms are produced from phrases with underscore emphasis\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"phrases with underscore emphasis\"}],\"endTime\":1754202144252,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/acronym/acronym.spec.js\",\"startTime\":1754202144125,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
163
|
+
"details": {
|
|
164
|
+
"numFailedTestSuites": 0,
|
|
165
|
+
"numFailedTests": 0,
|
|
166
|
+
"numPassedTestSuites": 1,
|
|
167
|
+
"numPassedTests": 9,
|
|
168
|
+
"numPendingTestSuites": 0,
|
|
169
|
+
"numPendingTests": 0,
|
|
170
|
+
"numRuntimeErrorTestSuites": 0,
|
|
171
|
+
"numTodoTests": 0,
|
|
172
|
+
"numTotalTestSuites": 1,
|
|
173
|
+
"numTotalTests": 9,
|
|
174
|
+
"openHandles": [],
|
|
175
|
+
"snapshot": {
|
|
176
|
+
"added": 0,
|
|
177
|
+
"didUpdate": false,
|
|
178
|
+
"failure": false,
|
|
179
|
+
"filesAdded": 0,
|
|
180
|
+
"filesRemoved": 0,
|
|
181
|
+
"filesRemovedList": [],
|
|
182
|
+
"filesUnmatched": 0,
|
|
183
|
+
"filesUpdated": 0,
|
|
184
|
+
"matched": 0,
|
|
185
|
+
"total": 0,
|
|
186
|
+
"unchecked": 0,
|
|
187
|
+
"uncheckedKeysByFile": [],
|
|
188
|
+
"unmatched": 0,
|
|
189
|
+
"updated": 0
|
|
190
|
+
},
|
|
191
|
+
"startTime": 1754202144105,
|
|
192
|
+
"success": true,
|
|
193
|
+
"testResults": [
|
|
194
|
+
{
|
|
195
|
+
"assertionResults": [
|
|
196
|
+
{
|
|
197
|
+
"ancestorTitles": [
|
|
198
|
+
"Acronyms are produced from"
|
|
199
|
+
],
|
|
200
|
+
"duration": 1,
|
|
201
|
+
"failureDetails": [],
|
|
202
|
+
"failureMessages": [],
|
|
203
|
+
"fullName": "Acronyms are produced from title cased phrases",
|
|
204
|
+
"invocations": 1,
|
|
205
|
+
"location": null,
|
|
206
|
+
"numPassingAsserts": 1,
|
|
207
|
+
"retryReasons": [],
|
|
208
|
+
"status": "passed",
|
|
209
|
+
"title": "title cased phrases"
|
|
210
|
+
},
|
|
211
|
+
{
|
|
212
|
+
"ancestorTitles": [
|
|
213
|
+
"Acronyms are produced from"
|
|
214
|
+
],
|
|
215
|
+
"duration": 0,
|
|
216
|
+
"failureDetails": [],
|
|
217
|
+
"failureMessages": [],
|
|
218
|
+
"fullName": "Acronyms are produced from other title cased phrases",
|
|
219
|
+
"invocations": 1,
|
|
220
|
+
"location": null,
|
|
221
|
+
"numPassingAsserts": 1,
|
|
222
|
+
"retryReasons": [],
|
|
223
|
+
"status": "passed",
|
|
224
|
+
"title": "other title cased phrases"
|
|
225
|
+
},
|
|
226
|
+
{
|
|
227
|
+
"ancestorTitles": [
|
|
228
|
+
"Acronyms are produced from"
|
|
229
|
+
],
|
|
230
|
+
"duration": 1,
|
|
231
|
+
"failureDetails": [],
|
|
232
|
+
"failureMessages": [],
|
|
233
|
+
"fullName": "Acronyms are produced from phrases with punctuation",
|
|
234
|
+
"invocations": 1,
|
|
235
|
+
"location": null,
|
|
236
|
+
"numPassingAsserts": 1,
|
|
237
|
+
"retryReasons": [],
|
|
238
|
+
"status": "passed",
|
|
239
|
+
"title": "phrases with punctuation"
|
|
240
|
+
},
|
|
241
|
+
{
|
|
242
|
+
"ancestorTitles": [
|
|
243
|
+
"Acronyms are produced from"
|
|
244
|
+
],
|
|
245
|
+
"duration": 0,
|
|
246
|
+
"failureDetails": [],
|
|
247
|
+
"failureMessages": [],
|
|
248
|
+
"fullName": "Acronyms are produced from phrases with all uppercase words",
|
|
249
|
+
"invocations": 1,
|
|
250
|
+
"location": null,
|
|
251
|
+
"numPassingAsserts": 1,
|
|
252
|
+
"retryReasons": [],
|
|
253
|
+
"status": "passed",
|
|
254
|
+
"title": "phrases with all uppercase words"
|
|
255
|
+
},
|
|
256
|
+
{
|
|
257
|
+
"ancestorTitles": [
|
|
258
|
+
"Acronyms are produced from"
|
|
259
|
+
],
|
|
260
|
+
"duration": 0,
|
|
261
|
+
"failureDetails": [],
|
|
262
|
+
"failureMessages": [],
|
|
263
|
+
"fullName": "Acronyms are produced from phrases with punctuation without whitespace",
|
|
264
|
+
"invocations": 1,
|
|
265
|
+
"location": null,
|
|
266
|
+
"numPassingAsserts": 1,
|
|
267
|
+
"retryReasons": [],
|
|
268
|
+
"status": "passed",
|
|
269
|
+
"title": "phrases with punctuation without whitespace"
|
|
270
|
+
},
|
|
271
|
+
{
|
|
272
|
+
"ancestorTitles": [
|
|
273
|
+
"Acronyms are produced from"
|
|
274
|
+
],
|
|
275
|
+
"duration": 0,
|
|
276
|
+
"failureDetails": [],
|
|
277
|
+
"failureMessages": [],
|
|
278
|
+
"fullName": "Acronyms are produced from long phrases",
|
|
279
|
+
"invocations": 1,
|
|
280
|
+
"location": null,
|
|
281
|
+
"numPassingAsserts": 1,
|
|
282
|
+
"retryReasons": [],
|
|
283
|
+
"status": "passed",
|
|
284
|
+
"title": "long phrases"
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
"ancestorTitles": [
|
|
288
|
+
"Acronyms are produced from"
|
|
289
|
+
],
|
|
290
|
+
"duration": 0,
|
|
291
|
+
"failureDetails": [],
|
|
292
|
+
"failureMessages": [],
|
|
293
|
+
"fullName": "Acronyms are produced from phrases with consecutive delimiters",
|
|
294
|
+
"invocations": 1,
|
|
295
|
+
"location": null,
|
|
296
|
+
"numPassingAsserts": 1,
|
|
297
|
+
"retryReasons": [],
|
|
298
|
+
"status": "passed",
|
|
299
|
+
"title": "phrases with consecutive delimiters"
|
|
300
|
+
},
|
|
301
|
+
{
|
|
302
|
+
"ancestorTitles": [
|
|
303
|
+
"Acronyms are produced from"
|
|
304
|
+
],
|
|
305
|
+
"duration": 0,
|
|
306
|
+
"failureDetails": [],
|
|
307
|
+
"failureMessages": [],
|
|
308
|
+
"fullName": "Acronyms are produced from phrases with apostrophes",
|
|
309
|
+
"invocations": 1,
|
|
310
|
+
"location": null,
|
|
311
|
+
"numPassingAsserts": 1,
|
|
312
|
+
"retryReasons": [],
|
|
313
|
+
"status": "passed",
|
|
314
|
+
"title": "phrases with apostrophes"
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
"ancestorTitles": [
|
|
318
|
+
"Acronyms are produced from"
|
|
319
|
+
],
|
|
320
|
+
"duration": 1,
|
|
321
|
+
"failureDetails": [],
|
|
322
|
+
"failureMessages": [],
|
|
323
|
+
"fullName": "Acronyms are produced from phrases with underscore emphasis",
|
|
324
|
+
"invocations": 1,
|
|
325
|
+
"location": null,
|
|
326
|
+
"numPassingAsserts": 1,
|
|
327
|
+
"retryReasons": [],
|
|
328
|
+
"status": "passed",
|
|
329
|
+
"title": "phrases with underscore emphasis"
|
|
330
|
+
}
|
|
331
|
+
],
|
|
332
|
+
"endTime": 1754202144252,
|
|
333
|
+
"message": "",
|
|
334
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/acronym/acronym.spec.js",
|
|
335
|
+
"startTime": 1754202144125,
|
|
336
|
+
"status": "passed",
|
|
337
|
+
"summary": ""
|
|
338
|
+
}
|
|
339
|
+
],
|
|
340
|
+
"wasInterrupted": false
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
"timeElapsed": 51.981,
|
|
344
|
+
"cost": 0.07389665476875001,
|
|
345
|
+
"startTime": "2025-08-03T06:21:32.280Z",
|
|
346
|
+
"endTime": "2025-08-03T06:22:24.261Z",
|
|
347
|
+
"finalOutput": "I have successfully solved the acronym coding exercise! Here's what I accomplished:\n\n## Implementation Summary\n\n**Problem**: Convert phrases to their acronyms by taking the first letter of each word, handling punctuation correctly.\n\n**Solution**: I implemented the `parse` function in `acronym.js` with the following logic:\n\n1. **Replace hyphens with spaces** - Since hyphens are word separators like whitespace\n2. **Remove all other punctuation** - Using regex to keep only letters, numbers, and spaces\n3. **Split by whitespace** - Handle multiple consecutive spaces/delimiters\n4. **Take first letter of each word** - Convert to uppercase and join\n\n```javascript\nexport const parse = (phrase) => {\n // Replace hyphens with spaces since they are word separators\n // Remove all other punctuation except letters, numbers, and spaces\n const cleanedPhrase = phrase\n .replace(/-/g, ' ') // Replace hyphens with spaces\n .replace(/[^a-zA-Z0-9\\s]/g, ''); // Remove all punctuation except letters, numbers, and spaces\n \n // Split by whitespace, filter out empty strings, and take first letter of each word\n return cleanedPhrase\n .split(/\\s+/)\n .filter(word => word.length > 0)\n .map(word => word[0].toUpperCase())\n .join('');\n};\n```\n\n## Results\n\n✅ **All 9 tests are now passing**, including:\n- Basic phrases: \"Portable Network Graphics\" → \"PNG\"\n- Punctuation handling: \"First In, First Out\" → \"FIFO\" \n- Hyphenated words: \"Complementary metal-oxide semiconductor\" → \"CMOS\"\n- Complex cases with apostrophes, underscores, consecutive delimiters\n\n✅ **Unskipped all tests** so they run automatically\n\n✅ **No linting errors** - Code follows project style guidelines\n\nThe solution correctly handles all the edge cases specified in the requirements and passes the complete test suite."
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"exerciseName": "affine-cipher",
|
|
351
|
+
"status": "success",
|
|
352
|
+
"turns": 16,
|
|
353
|
+
"testResult": {
|
|
354
|
+
"passed": 16,
|
|
355
|
+
"failed": 0,
|
|
356
|
+
"total": 16,
|
|
357
|
+
"skipped": 0,
|
|
358
|
+
"success": true,
|
|
359
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":16,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":16,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202207965,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher encode encode yes\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode yes\"},{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher encode encode no\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode no\"},{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher encode encode OMG\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode OMG\"},{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher encode encode O M G\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode O M G\"},{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher encode encode mindblowingly\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode mindblowingly\"},{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher encode encode numbers\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode numbers\"},{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher encode encode deep thought\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode deep thought\"},{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher encode encode all the letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode all the letters\"},{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":5,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher encode encode with a not coprime to m\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode with a not coprime to m\"},{\"ancestorTitles\":[\"Affine cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher decode decode exercism\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode exercism\"},{\"ancestorTitles\":[\"Affine cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher decode decode a sentence\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode a sentence\"},{\"ancestorTitles\":[\"Affine cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher decode decode numbers\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode numbers\"},{\"ancestorTitles\":[\"Affine cipher\",\"decode\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher decode decode all the letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode all the letters\"},{\"ancestorTitles\":[\"Affine cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher decode decode with no spaces in input\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode with no spaces in input\"},{\"ancestorTitles\":[\"Affine cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher decode decode with too many spaces\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode with too many spaces\"},{\"ancestorTitles\":[\"Affine cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Affine cipher decode decode with a not coprime to m\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode with a not coprime to m\"}],\"endTime\":1754202208066,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/affine-cipher/affine-cipher.spec.js\",\"startTime\":1754202207976,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
360
|
+
"details": {
|
|
361
|
+
"numFailedTestSuites": 0,
|
|
362
|
+
"numFailedTests": 0,
|
|
363
|
+
"numPassedTestSuites": 1,
|
|
364
|
+
"numPassedTests": 16,
|
|
365
|
+
"numPendingTestSuites": 0,
|
|
366
|
+
"numPendingTests": 0,
|
|
367
|
+
"numRuntimeErrorTestSuites": 0,
|
|
368
|
+
"numTodoTests": 0,
|
|
369
|
+
"numTotalTestSuites": 1,
|
|
370
|
+
"numTotalTests": 16,
|
|
371
|
+
"openHandles": [],
|
|
372
|
+
"snapshot": {
|
|
373
|
+
"added": 0,
|
|
374
|
+
"didUpdate": false,
|
|
375
|
+
"failure": false,
|
|
376
|
+
"filesAdded": 0,
|
|
377
|
+
"filesRemoved": 0,
|
|
378
|
+
"filesRemovedList": [],
|
|
379
|
+
"filesUnmatched": 0,
|
|
380
|
+
"filesUpdated": 0,
|
|
381
|
+
"matched": 0,
|
|
382
|
+
"total": 0,
|
|
383
|
+
"unchecked": 0,
|
|
384
|
+
"uncheckedKeysByFile": [],
|
|
385
|
+
"unmatched": 0,
|
|
386
|
+
"updated": 0
|
|
387
|
+
},
|
|
388
|
+
"startTime": 1754202207965,
|
|
389
|
+
"success": true,
|
|
390
|
+
"testResults": [
|
|
391
|
+
{
|
|
392
|
+
"assertionResults": [
|
|
393
|
+
{
|
|
394
|
+
"ancestorTitles": [
|
|
395
|
+
"Affine cipher",
|
|
396
|
+
"encode"
|
|
397
|
+
],
|
|
398
|
+
"duration": 1,
|
|
399
|
+
"failureDetails": [],
|
|
400
|
+
"failureMessages": [],
|
|
401
|
+
"fullName": "Affine cipher encode encode yes",
|
|
402
|
+
"invocations": 1,
|
|
403
|
+
"location": null,
|
|
404
|
+
"numPassingAsserts": 1,
|
|
405
|
+
"retryReasons": [],
|
|
406
|
+
"status": "passed",
|
|
407
|
+
"title": "encode yes"
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
"ancestorTitles": [
|
|
411
|
+
"Affine cipher",
|
|
412
|
+
"encode"
|
|
413
|
+
],
|
|
414
|
+
"duration": 0,
|
|
415
|
+
"failureDetails": [],
|
|
416
|
+
"failureMessages": [],
|
|
417
|
+
"fullName": "Affine cipher encode encode no",
|
|
418
|
+
"invocations": 1,
|
|
419
|
+
"location": null,
|
|
420
|
+
"numPassingAsserts": 1,
|
|
421
|
+
"retryReasons": [],
|
|
422
|
+
"status": "passed",
|
|
423
|
+
"title": "encode no"
|
|
424
|
+
},
|
|
425
|
+
{
|
|
426
|
+
"ancestorTitles": [
|
|
427
|
+
"Affine cipher",
|
|
428
|
+
"encode"
|
|
429
|
+
],
|
|
430
|
+
"duration": 0,
|
|
431
|
+
"failureDetails": [],
|
|
432
|
+
"failureMessages": [],
|
|
433
|
+
"fullName": "Affine cipher encode encode OMG",
|
|
434
|
+
"invocations": 1,
|
|
435
|
+
"location": null,
|
|
436
|
+
"numPassingAsserts": 1,
|
|
437
|
+
"retryReasons": [],
|
|
438
|
+
"status": "passed",
|
|
439
|
+
"title": "encode OMG"
|
|
440
|
+
},
|
|
441
|
+
{
|
|
442
|
+
"ancestorTitles": [
|
|
443
|
+
"Affine cipher",
|
|
444
|
+
"encode"
|
|
445
|
+
],
|
|
446
|
+
"duration": 1,
|
|
447
|
+
"failureDetails": [],
|
|
448
|
+
"failureMessages": [],
|
|
449
|
+
"fullName": "Affine cipher encode encode O M G",
|
|
450
|
+
"invocations": 1,
|
|
451
|
+
"location": null,
|
|
452
|
+
"numPassingAsserts": 1,
|
|
453
|
+
"retryReasons": [],
|
|
454
|
+
"status": "passed",
|
|
455
|
+
"title": "encode O M G"
|
|
456
|
+
},
|
|
457
|
+
{
|
|
458
|
+
"ancestorTitles": [
|
|
459
|
+
"Affine cipher",
|
|
460
|
+
"encode"
|
|
461
|
+
],
|
|
462
|
+
"duration": 1,
|
|
463
|
+
"failureDetails": [],
|
|
464
|
+
"failureMessages": [],
|
|
465
|
+
"fullName": "Affine cipher encode encode mindblowingly",
|
|
466
|
+
"invocations": 1,
|
|
467
|
+
"location": null,
|
|
468
|
+
"numPassingAsserts": 1,
|
|
469
|
+
"retryReasons": [],
|
|
470
|
+
"status": "passed",
|
|
471
|
+
"title": "encode mindblowingly"
|
|
472
|
+
},
|
|
473
|
+
{
|
|
474
|
+
"ancestorTitles": [
|
|
475
|
+
"Affine cipher",
|
|
476
|
+
"encode"
|
|
477
|
+
],
|
|
478
|
+
"duration": 0,
|
|
479
|
+
"failureDetails": [],
|
|
480
|
+
"failureMessages": [],
|
|
481
|
+
"fullName": "Affine cipher encode encode numbers",
|
|
482
|
+
"invocations": 1,
|
|
483
|
+
"location": null,
|
|
484
|
+
"numPassingAsserts": 1,
|
|
485
|
+
"retryReasons": [],
|
|
486
|
+
"status": "passed",
|
|
487
|
+
"title": "encode numbers"
|
|
488
|
+
},
|
|
489
|
+
{
|
|
490
|
+
"ancestorTitles": [
|
|
491
|
+
"Affine cipher",
|
|
492
|
+
"encode"
|
|
493
|
+
],
|
|
494
|
+
"duration": 0,
|
|
495
|
+
"failureDetails": [],
|
|
496
|
+
"failureMessages": [],
|
|
497
|
+
"fullName": "Affine cipher encode encode deep thought",
|
|
498
|
+
"invocations": 1,
|
|
499
|
+
"location": null,
|
|
500
|
+
"numPassingAsserts": 1,
|
|
501
|
+
"retryReasons": [],
|
|
502
|
+
"status": "passed",
|
|
503
|
+
"title": "encode deep thought"
|
|
504
|
+
},
|
|
505
|
+
{
|
|
506
|
+
"ancestorTitles": [
|
|
507
|
+
"Affine cipher",
|
|
508
|
+
"encode"
|
|
509
|
+
],
|
|
510
|
+
"duration": 0,
|
|
511
|
+
"failureDetails": [],
|
|
512
|
+
"failureMessages": [],
|
|
513
|
+
"fullName": "Affine cipher encode encode all the letters",
|
|
514
|
+
"invocations": 1,
|
|
515
|
+
"location": null,
|
|
516
|
+
"numPassingAsserts": 1,
|
|
517
|
+
"retryReasons": [],
|
|
518
|
+
"status": "passed",
|
|
519
|
+
"title": "encode all the letters"
|
|
520
|
+
},
|
|
521
|
+
{
|
|
522
|
+
"ancestorTitles": [
|
|
523
|
+
"Affine cipher",
|
|
524
|
+
"encode"
|
|
525
|
+
],
|
|
526
|
+
"duration": 5,
|
|
527
|
+
"failureDetails": [],
|
|
528
|
+
"failureMessages": [],
|
|
529
|
+
"fullName": "Affine cipher encode encode with a not coprime to m",
|
|
530
|
+
"invocations": 1,
|
|
531
|
+
"location": null,
|
|
532
|
+
"numPassingAsserts": 1,
|
|
533
|
+
"retryReasons": [],
|
|
534
|
+
"status": "passed",
|
|
535
|
+
"title": "encode with a not coprime to m"
|
|
536
|
+
},
|
|
537
|
+
{
|
|
538
|
+
"ancestorTitles": [
|
|
539
|
+
"Affine cipher",
|
|
540
|
+
"decode"
|
|
541
|
+
],
|
|
542
|
+
"duration": 0,
|
|
543
|
+
"failureDetails": [],
|
|
544
|
+
"failureMessages": [],
|
|
545
|
+
"fullName": "Affine cipher decode decode exercism",
|
|
546
|
+
"invocations": 1,
|
|
547
|
+
"location": null,
|
|
548
|
+
"numPassingAsserts": 1,
|
|
549
|
+
"retryReasons": [],
|
|
550
|
+
"status": "passed",
|
|
551
|
+
"title": "decode exercism"
|
|
552
|
+
},
|
|
553
|
+
{
|
|
554
|
+
"ancestorTitles": [
|
|
555
|
+
"Affine cipher",
|
|
556
|
+
"decode"
|
|
557
|
+
],
|
|
558
|
+
"duration": 0,
|
|
559
|
+
"failureDetails": [],
|
|
560
|
+
"failureMessages": [],
|
|
561
|
+
"fullName": "Affine cipher decode decode a sentence",
|
|
562
|
+
"invocations": 1,
|
|
563
|
+
"location": null,
|
|
564
|
+
"numPassingAsserts": 1,
|
|
565
|
+
"retryReasons": [],
|
|
566
|
+
"status": "passed",
|
|
567
|
+
"title": "decode a sentence"
|
|
568
|
+
},
|
|
569
|
+
{
|
|
570
|
+
"ancestorTitles": [
|
|
571
|
+
"Affine cipher",
|
|
572
|
+
"decode"
|
|
573
|
+
],
|
|
574
|
+
"duration": 0,
|
|
575
|
+
"failureDetails": [],
|
|
576
|
+
"failureMessages": [],
|
|
577
|
+
"fullName": "Affine cipher decode decode numbers",
|
|
578
|
+
"invocations": 1,
|
|
579
|
+
"location": null,
|
|
580
|
+
"numPassingAsserts": 1,
|
|
581
|
+
"retryReasons": [],
|
|
582
|
+
"status": "passed",
|
|
583
|
+
"title": "decode numbers"
|
|
584
|
+
},
|
|
585
|
+
{
|
|
586
|
+
"ancestorTitles": [
|
|
587
|
+
"Affine cipher",
|
|
588
|
+
"decode"
|
|
589
|
+
],
|
|
590
|
+
"duration": 1,
|
|
591
|
+
"failureDetails": [],
|
|
592
|
+
"failureMessages": [],
|
|
593
|
+
"fullName": "Affine cipher decode decode all the letters",
|
|
594
|
+
"invocations": 1,
|
|
595
|
+
"location": null,
|
|
596
|
+
"numPassingAsserts": 1,
|
|
597
|
+
"retryReasons": [],
|
|
598
|
+
"status": "passed",
|
|
599
|
+
"title": "decode all the letters"
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
"ancestorTitles": [
|
|
603
|
+
"Affine cipher",
|
|
604
|
+
"decode"
|
|
605
|
+
],
|
|
606
|
+
"duration": 0,
|
|
607
|
+
"failureDetails": [],
|
|
608
|
+
"failureMessages": [],
|
|
609
|
+
"fullName": "Affine cipher decode decode with no spaces in input",
|
|
610
|
+
"invocations": 1,
|
|
611
|
+
"location": null,
|
|
612
|
+
"numPassingAsserts": 1,
|
|
613
|
+
"retryReasons": [],
|
|
614
|
+
"status": "passed",
|
|
615
|
+
"title": "decode with no spaces in input"
|
|
616
|
+
},
|
|
617
|
+
{
|
|
618
|
+
"ancestorTitles": [
|
|
619
|
+
"Affine cipher",
|
|
620
|
+
"decode"
|
|
621
|
+
],
|
|
622
|
+
"duration": 0,
|
|
623
|
+
"failureDetails": [],
|
|
624
|
+
"failureMessages": [],
|
|
625
|
+
"fullName": "Affine cipher decode decode with too many spaces",
|
|
626
|
+
"invocations": 1,
|
|
627
|
+
"location": null,
|
|
628
|
+
"numPassingAsserts": 1,
|
|
629
|
+
"retryReasons": [],
|
|
630
|
+
"status": "passed",
|
|
631
|
+
"title": "decode with too many spaces"
|
|
632
|
+
},
|
|
633
|
+
{
|
|
634
|
+
"ancestorTitles": [
|
|
635
|
+
"Affine cipher",
|
|
636
|
+
"decode"
|
|
637
|
+
],
|
|
638
|
+
"duration": 0,
|
|
639
|
+
"failureDetails": [],
|
|
640
|
+
"failureMessages": [],
|
|
641
|
+
"fullName": "Affine cipher decode decode with a not coprime to m",
|
|
642
|
+
"invocations": 1,
|
|
643
|
+
"location": null,
|
|
644
|
+
"numPassingAsserts": 1,
|
|
645
|
+
"retryReasons": [],
|
|
646
|
+
"status": "passed",
|
|
647
|
+
"title": "decode with a not coprime to m"
|
|
648
|
+
}
|
|
649
|
+
],
|
|
650
|
+
"endTime": 1754202208066,
|
|
651
|
+
"message": "",
|
|
652
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/affine-cipher/affine-cipher.spec.js",
|
|
653
|
+
"startTime": 1754202207976,
|
|
654
|
+
"status": "passed",
|
|
655
|
+
"summary": ""
|
|
656
|
+
}
|
|
657
|
+
],
|
|
658
|
+
"wasInterrupted": false
|
|
659
|
+
}
|
|
660
|
+
},
|
|
661
|
+
"timeElapsed": 63.814,
|
|
662
|
+
"cost": 0.10370835255750002,
|
|
663
|
+
"startTime": "2025-08-03T06:22:24.261Z",
|
|
664
|
+
"endTime": "2025-08-03T06:23:28.075Z",
|
|
665
|
+
"finalOutput": "I have successfully implemented the affine cipher exercise! Here's what I accomplished:\n\n## Implementation Summary\n\nI created a complete implementation of the affine cipher with both encoding and decoding functions in `affine-cipher.js`. The solution includes:\n\n### Key Features Implemented:\n\n1. **Encryption Function**: `E(x) = (ai + b) mod m`\n - Transforms each letter using the mathematical formula\n - Groups output into chunks of 5 characters separated by spaces\n - Preserves digits, ignores spaces and punctuation\n\n2. **Decryption Function**: `D(y) = (a^-1)(y - b) mod m`\n - Uses modular multiplicative inverse to decrypt\n - Properly handles negative numbers in modular arithmetic\n - Preserves digits, ignores spaces\n\n3. **Coprime Validation**: \n - Checks that `a` and `m` (26) are coprime using GCD algorithm\n - Throws appropriate error when they're not coprime\n\n4. **Helper Functions**:\n - `gcd()` - Calculates greatest common divisor\n - `areCoprime()` - Validates coprime relationship\n - `modularInverse()` - Finds modular multiplicative inverse\n - `charToIndex()` / `indexToChar()` - Character/index conversions\n - `groupText()` - Groups output into 5-character chunks\n\n### Key Implementation Details:\n\n- **Alphabet Length**: Uses `m = 26` for the Latin alphabet\n- **Case Handling**: Converts to lowercase for processing, outputs lowercase\n- **Number Preservation**: Digits pass through unchanged\n- **Space/Punctuation**: Ignored during processing\n- **Modular Arithmetic**: Properly handles negative results with `((result % m) + m) % m`\n\n### Test Results:\n✅ All 16 tests pass including:\n- Basic encoding/decoding tests\n- Edge cases with numbers, spaces, and punctuation \n- Error handling for non-coprime values\n- Complex sentences and all alphabet letters\n\nThe implementation correctly handles all the mathematical requirements of the affine cipher while following the exercise specifications for formatting and error handling."
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
"exerciseName": "all-your-base",
|
|
669
|
+
"status": "success",
|
|
670
|
+
"turns": 14,
|
|
671
|
+
"testResult": {
|
|
672
|
+
"passed": 21,
|
|
673
|
+
"failed": 0,
|
|
674
|
+
"total": 21,
|
|
675
|
+
"skipped": 0,
|
|
676
|
+
"success": true,
|
|
677
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":21,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":21,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202260833,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Converter\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter single bit one to decimal\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"single bit one to decimal\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter binary to single decimal\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"binary to single decimal\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter single decimal to binary\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"single decimal to binary\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter binary to multiple decimal\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"binary to multiple decimal\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter decimal to binary\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decimal to binary\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter trinary to hexadecimal\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"trinary to hexadecimal\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter hexadecimal to trinary\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"hexadecimal to trinary\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter 15-bit integer\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"15-bit integer\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":4,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter empty list\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"empty list\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter single zero\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"single zero\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter multiple zeros\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"multiple zeros\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter leading zeros\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"leading zeros\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter negative digit\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"negative digit\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter invalid positive digit\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"invalid positive digit\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter first base is one\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"first base is one\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter second base is one\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"second base is one\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter first base is zero\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"first base is zero\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter second base is zero\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"second base is zero\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter first base is negative\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"first base is negative\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter second base is negative\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"second base is negative\"},{\"ancestorTitles\":[\"Converter\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Converter both bases are negative\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"both bases are negative\"}],\"endTime\":1754202260914,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/all-your-base/all-your-base.spec.js\",\"startTime\":1754202260842,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
678
|
+
"details": {
|
|
679
|
+
"numFailedTestSuites": 0,
|
|
680
|
+
"numFailedTests": 0,
|
|
681
|
+
"numPassedTestSuites": 1,
|
|
682
|
+
"numPassedTests": 21,
|
|
683
|
+
"numPendingTestSuites": 0,
|
|
684
|
+
"numPendingTests": 0,
|
|
685
|
+
"numRuntimeErrorTestSuites": 0,
|
|
686
|
+
"numTodoTests": 0,
|
|
687
|
+
"numTotalTestSuites": 1,
|
|
688
|
+
"numTotalTests": 21,
|
|
689
|
+
"openHandles": [],
|
|
690
|
+
"snapshot": {
|
|
691
|
+
"added": 0,
|
|
692
|
+
"didUpdate": false,
|
|
693
|
+
"failure": false,
|
|
694
|
+
"filesAdded": 0,
|
|
695
|
+
"filesRemoved": 0,
|
|
696
|
+
"filesRemovedList": [],
|
|
697
|
+
"filesUnmatched": 0,
|
|
698
|
+
"filesUpdated": 0,
|
|
699
|
+
"matched": 0,
|
|
700
|
+
"total": 0,
|
|
701
|
+
"unchecked": 0,
|
|
702
|
+
"uncheckedKeysByFile": [],
|
|
703
|
+
"unmatched": 0,
|
|
704
|
+
"updated": 0
|
|
705
|
+
},
|
|
706
|
+
"startTime": 1754202260833,
|
|
707
|
+
"success": true,
|
|
708
|
+
"testResults": [
|
|
709
|
+
{
|
|
710
|
+
"assertionResults": [
|
|
711
|
+
{
|
|
712
|
+
"ancestorTitles": [
|
|
713
|
+
"Converter"
|
|
714
|
+
],
|
|
715
|
+
"duration": 1,
|
|
716
|
+
"failureDetails": [],
|
|
717
|
+
"failureMessages": [],
|
|
718
|
+
"fullName": "Converter single bit one to decimal",
|
|
719
|
+
"invocations": 1,
|
|
720
|
+
"location": null,
|
|
721
|
+
"numPassingAsserts": 1,
|
|
722
|
+
"retryReasons": [],
|
|
723
|
+
"status": "passed",
|
|
724
|
+
"title": "single bit one to decimal"
|
|
725
|
+
},
|
|
726
|
+
{
|
|
727
|
+
"ancestorTitles": [
|
|
728
|
+
"Converter"
|
|
729
|
+
],
|
|
730
|
+
"duration": 0,
|
|
731
|
+
"failureDetails": [],
|
|
732
|
+
"failureMessages": [],
|
|
733
|
+
"fullName": "Converter binary to single decimal",
|
|
734
|
+
"invocations": 1,
|
|
735
|
+
"location": null,
|
|
736
|
+
"numPassingAsserts": 1,
|
|
737
|
+
"retryReasons": [],
|
|
738
|
+
"status": "passed",
|
|
739
|
+
"title": "binary to single decimal"
|
|
740
|
+
},
|
|
741
|
+
{
|
|
742
|
+
"ancestorTitles": [
|
|
743
|
+
"Converter"
|
|
744
|
+
],
|
|
745
|
+
"duration": 0,
|
|
746
|
+
"failureDetails": [],
|
|
747
|
+
"failureMessages": [],
|
|
748
|
+
"fullName": "Converter single decimal to binary",
|
|
749
|
+
"invocations": 1,
|
|
750
|
+
"location": null,
|
|
751
|
+
"numPassingAsserts": 1,
|
|
752
|
+
"retryReasons": [],
|
|
753
|
+
"status": "passed",
|
|
754
|
+
"title": "single decimal to binary"
|
|
755
|
+
},
|
|
756
|
+
{
|
|
757
|
+
"ancestorTitles": [
|
|
758
|
+
"Converter"
|
|
759
|
+
],
|
|
760
|
+
"duration": 0,
|
|
761
|
+
"failureDetails": [],
|
|
762
|
+
"failureMessages": [],
|
|
763
|
+
"fullName": "Converter binary to multiple decimal",
|
|
764
|
+
"invocations": 1,
|
|
765
|
+
"location": null,
|
|
766
|
+
"numPassingAsserts": 1,
|
|
767
|
+
"retryReasons": [],
|
|
768
|
+
"status": "passed",
|
|
769
|
+
"title": "binary to multiple decimal"
|
|
770
|
+
},
|
|
771
|
+
{
|
|
772
|
+
"ancestorTitles": [
|
|
773
|
+
"Converter"
|
|
774
|
+
],
|
|
775
|
+
"duration": 0,
|
|
776
|
+
"failureDetails": [],
|
|
777
|
+
"failureMessages": [],
|
|
778
|
+
"fullName": "Converter decimal to binary",
|
|
779
|
+
"invocations": 1,
|
|
780
|
+
"location": null,
|
|
781
|
+
"numPassingAsserts": 1,
|
|
782
|
+
"retryReasons": [],
|
|
783
|
+
"status": "passed",
|
|
784
|
+
"title": "decimal to binary"
|
|
785
|
+
},
|
|
786
|
+
{
|
|
787
|
+
"ancestorTitles": [
|
|
788
|
+
"Converter"
|
|
789
|
+
],
|
|
790
|
+
"duration": 0,
|
|
791
|
+
"failureDetails": [],
|
|
792
|
+
"failureMessages": [],
|
|
793
|
+
"fullName": "Converter trinary to hexadecimal",
|
|
794
|
+
"invocations": 1,
|
|
795
|
+
"location": null,
|
|
796
|
+
"numPassingAsserts": 1,
|
|
797
|
+
"retryReasons": [],
|
|
798
|
+
"status": "passed",
|
|
799
|
+
"title": "trinary to hexadecimal"
|
|
800
|
+
},
|
|
801
|
+
{
|
|
802
|
+
"ancestorTitles": [
|
|
803
|
+
"Converter"
|
|
804
|
+
],
|
|
805
|
+
"duration": 1,
|
|
806
|
+
"failureDetails": [],
|
|
807
|
+
"failureMessages": [],
|
|
808
|
+
"fullName": "Converter hexadecimal to trinary",
|
|
809
|
+
"invocations": 1,
|
|
810
|
+
"location": null,
|
|
811
|
+
"numPassingAsserts": 1,
|
|
812
|
+
"retryReasons": [],
|
|
813
|
+
"status": "passed",
|
|
814
|
+
"title": "hexadecimal to trinary"
|
|
815
|
+
},
|
|
816
|
+
{
|
|
817
|
+
"ancestorTitles": [
|
|
818
|
+
"Converter"
|
|
819
|
+
],
|
|
820
|
+
"duration": 0,
|
|
821
|
+
"failureDetails": [],
|
|
822
|
+
"failureMessages": [],
|
|
823
|
+
"fullName": "Converter 15-bit integer",
|
|
824
|
+
"invocations": 1,
|
|
825
|
+
"location": null,
|
|
826
|
+
"numPassingAsserts": 1,
|
|
827
|
+
"retryReasons": [],
|
|
828
|
+
"status": "passed",
|
|
829
|
+
"title": "15-bit integer"
|
|
830
|
+
},
|
|
831
|
+
{
|
|
832
|
+
"ancestorTitles": [
|
|
833
|
+
"Converter"
|
|
834
|
+
],
|
|
835
|
+
"duration": 4,
|
|
836
|
+
"failureDetails": [],
|
|
837
|
+
"failureMessages": [],
|
|
838
|
+
"fullName": "Converter empty list",
|
|
839
|
+
"invocations": 1,
|
|
840
|
+
"location": null,
|
|
841
|
+
"numPassingAsserts": 1,
|
|
842
|
+
"retryReasons": [],
|
|
843
|
+
"status": "passed",
|
|
844
|
+
"title": "empty list"
|
|
845
|
+
},
|
|
846
|
+
{
|
|
847
|
+
"ancestorTitles": [
|
|
848
|
+
"Converter"
|
|
849
|
+
],
|
|
850
|
+
"duration": 0,
|
|
851
|
+
"failureDetails": [],
|
|
852
|
+
"failureMessages": [],
|
|
853
|
+
"fullName": "Converter single zero",
|
|
854
|
+
"invocations": 1,
|
|
855
|
+
"location": null,
|
|
856
|
+
"numPassingAsserts": 1,
|
|
857
|
+
"retryReasons": [],
|
|
858
|
+
"status": "passed",
|
|
859
|
+
"title": "single zero"
|
|
860
|
+
},
|
|
861
|
+
{
|
|
862
|
+
"ancestorTitles": [
|
|
863
|
+
"Converter"
|
|
864
|
+
],
|
|
865
|
+
"duration": 0,
|
|
866
|
+
"failureDetails": [],
|
|
867
|
+
"failureMessages": [],
|
|
868
|
+
"fullName": "Converter multiple zeros",
|
|
869
|
+
"invocations": 1,
|
|
870
|
+
"location": null,
|
|
871
|
+
"numPassingAsserts": 1,
|
|
872
|
+
"retryReasons": [],
|
|
873
|
+
"status": "passed",
|
|
874
|
+
"title": "multiple zeros"
|
|
875
|
+
},
|
|
876
|
+
{
|
|
877
|
+
"ancestorTitles": [
|
|
878
|
+
"Converter"
|
|
879
|
+
],
|
|
880
|
+
"duration": 1,
|
|
881
|
+
"failureDetails": [],
|
|
882
|
+
"failureMessages": [],
|
|
883
|
+
"fullName": "Converter leading zeros",
|
|
884
|
+
"invocations": 1,
|
|
885
|
+
"location": null,
|
|
886
|
+
"numPassingAsserts": 1,
|
|
887
|
+
"retryReasons": [],
|
|
888
|
+
"status": "passed",
|
|
889
|
+
"title": "leading zeros"
|
|
890
|
+
},
|
|
891
|
+
{
|
|
892
|
+
"ancestorTitles": [
|
|
893
|
+
"Converter"
|
|
894
|
+
],
|
|
895
|
+
"duration": 0,
|
|
896
|
+
"failureDetails": [],
|
|
897
|
+
"failureMessages": [],
|
|
898
|
+
"fullName": "Converter negative digit",
|
|
899
|
+
"invocations": 1,
|
|
900
|
+
"location": null,
|
|
901
|
+
"numPassingAsserts": 1,
|
|
902
|
+
"retryReasons": [],
|
|
903
|
+
"status": "passed",
|
|
904
|
+
"title": "negative digit"
|
|
905
|
+
},
|
|
906
|
+
{
|
|
907
|
+
"ancestorTitles": [
|
|
908
|
+
"Converter"
|
|
909
|
+
],
|
|
910
|
+
"duration": 0,
|
|
911
|
+
"failureDetails": [],
|
|
912
|
+
"failureMessages": [],
|
|
913
|
+
"fullName": "Converter invalid positive digit",
|
|
914
|
+
"invocations": 1,
|
|
915
|
+
"location": null,
|
|
916
|
+
"numPassingAsserts": 1,
|
|
917
|
+
"retryReasons": [],
|
|
918
|
+
"status": "passed",
|
|
919
|
+
"title": "invalid positive digit"
|
|
920
|
+
},
|
|
921
|
+
{
|
|
922
|
+
"ancestorTitles": [
|
|
923
|
+
"Converter"
|
|
924
|
+
],
|
|
925
|
+
"duration": 0,
|
|
926
|
+
"failureDetails": [],
|
|
927
|
+
"failureMessages": [],
|
|
928
|
+
"fullName": "Converter first base is one",
|
|
929
|
+
"invocations": 1,
|
|
930
|
+
"location": null,
|
|
931
|
+
"numPassingAsserts": 1,
|
|
932
|
+
"retryReasons": [],
|
|
933
|
+
"status": "passed",
|
|
934
|
+
"title": "first base is one"
|
|
935
|
+
},
|
|
936
|
+
{
|
|
937
|
+
"ancestorTitles": [
|
|
938
|
+
"Converter"
|
|
939
|
+
],
|
|
940
|
+
"duration": 1,
|
|
941
|
+
"failureDetails": [],
|
|
942
|
+
"failureMessages": [],
|
|
943
|
+
"fullName": "Converter second base is one",
|
|
944
|
+
"invocations": 1,
|
|
945
|
+
"location": null,
|
|
946
|
+
"numPassingAsserts": 1,
|
|
947
|
+
"retryReasons": [],
|
|
948
|
+
"status": "passed",
|
|
949
|
+
"title": "second base is one"
|
|
950
|
+
},
|
|
951
|
+
{
|
|
952
|
+
"ancestorTitles": [
|
|
953
|
+
"Converter"
|
|
954
|
+
],
|
|
955
|
+
"duration": 1,
|
|
956
|
+
"failureDetails": [],
|
|
957
|
+
"failureMessages": [],
|
|
958
|
+
"fullName": "Converter first base is zero",
|
|
959
|
+
"invocations": 1,
|
|
960
|
+
"location": null,
|
|
961
|
+
"numPassingAsserts": 1,
|
|
962
|
+
"retryReasons": [],
|
|
963
|
+
"status": "passed",
|
|
964
|
+
"title": "first base is zero"
|
|
965
|
+
},
|
|
966
|
+
{
|
|
967
|
+
"ancestorTitles": [
|
|
968
|
+
"Converter"
|
|
969
|
+
],
|
|
970
|
+
"duration": 0,
|
|
971
|
+
"failureDetails": [],
|
|
972
|
+
"failureMessages": [],
|
|
973
|
+
"fullName": "Converter second base is zero",
|
|
974
|
+
"invocations": 1,
|
|
975
|
+
"location": null,
|
|
976
|
+
"numPassingAsserts": 1,
|
|
977
|
+
"retryReasons": [],
|
|
978
|
+
"status": "passed",
|
|
979
|
+
"title": "second base is zero"
|
|
980
|
+
},
|
|
981
|
+
{
|
|
982
|
+
"ancestorTitles": [
|
|
983
|
+
"Converter"
|
|
984
|
+
],
|
|
985
|
+
"duration": 0,
|
|
986
|
+
"failureDetails": [],
|
|
987
|
+
"failureMessages": [],
|
|
988
|
+
"fullName": "Converter first base is negative",
|
|
989
|
+
"invocations": 1,
|
|
990
|
+
"location": null,
|
|
991
|
+
"numPassingAsserts": 1,
|
|
992
|
+
"retryReasons": [],
|
|
993
|
+
"status": "passed",
|
|
994
|
+
"title": "first base is negative"
|
|
995
|
+
},
|
|
996
|
+
{
|
|
997
|
+
"ancestorTitles": [
|
|
998
|
+
"Converter"
|
|
999
|
+
],
|
|
1000
|
+
"duration": 0,
|
|
1001
|
+
"failureDetails": [],
|
|
1002
|
+
"failureMessages": [],
|
|
1003
|
+
"fullName": "Converter second base is negative",
|
|
1004
|
+
"invocations": 1,
|
|
1005
|
+
"location": null,
|
|
1006
|
+
"numPassingAsserts": 1,
|
|
1007
|
+
"retryReasons": [],
|
|
1008
|
+
"status": "passed",
|
|
1009
|
+
"title": "second base is negative"
|
|
1010
|
+
},
|
|
1011
|
+
{
|
|
1012
|
+
"ancestorTitles": [
|
|
1013
|
+
"Converter"
|
|
1014
|
+
],
|
|
1015
|
+
"duration": 0,
|
|
1016
|
+
"failureDetails": [],
|
|
1017
|
+
"failureMessages": [],
|
|
1018
|
+
"fullName": "Converter both bases are negative",
|
|
1019
|
+
"invocations": 1,
|
|
1020
|
+
"location": null,
|
|
1021
|
+
"numPassingAsserts": 1,
|
|
1022
|
+
"retryReasons": [],
|
|
1023
|
+
"status": "passed",
|
|
1024
|
+
"title": "both bases are negative"
|
|
1025
|
+
}
|
|
1026
|
+
],
|
|
1027
|
+
"endTime": 1754202260914,
|
|
1028
|
+
"message": "",
|
|
1029
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/all-your-base/all-your-base.spec.js",
|
|
1030
|
+
"startTime": 1754202260842,
|
|
1031
|
+
"status": "passed",
|
|
1032
|
+
"summary": ""
|
|
1033
|
+
}
|
|
1034
|
+
],
|
|
1035
|
+
"wasInterrupted": false
|
|
1036
|
+
}
|
|
1037
|
+
},
|
|
1038
|
+
"timeElapsed": 52.866,
|
|
1039
|
+
"cost": 0.08025663249375001,
|
|
1040
|
+
"startTime": "2025-08-03T06:23:28.075Z",
|
|
1041
|
+
"endTime": "2025-08-03T06:24:20.941Z",
|
|
1042
|
+
"finalOutput": "I have successfully solved the \"all-your-base\" coding exercise! Here's what I accomplished:\n\n## Problem Understanding\nThe exercise required implementing a `convert` function that converts numbers between different number bases (binary, decimal, hexadecimal, etc.). The function takes three parameters:\n- `digits`: An array of digits in the input base\n- `inputBase`: The base of the input number\n- `outputBase`: The desired output base\n\n## Implementation Details\nI implemented a complete solution in `all-your-base.js` that:\n\n1. **Validates input and output bases**: Must be >= 2, throws \"Wrong input base\" or \"Wrong output base\" errors\n2. **Validates input format**: \n - Empty arrays throw \"Input has wrong format\"\n - Leading zeros (except single zero) throw \"Input has wrong format\"\n - Negative digits or digits >= inputBase throw \"Input has wrong format\"\n3. **Handles special cases**: Single zero returns [0]\n4. **Converts between bases**: Uses a two-step process:\n - Convert from input base to decimal\n - Convert from decimal to output base\n\n## Algorithm\nThe conversion works by:\n1. Converting the input digits from the source base to decimal using positional notation\n2. Converting the decimal value to the target base using repeated division and remainder operations\n\n## Test Results\n✅ All 21 tests pass successfully, including:\n- Basic conversions (binary ↔ decimal, trinary ↔ hexadecimal)\n- Error handling (invalid bases, malformed input)\n- Edge cases (single zero, leading zeros, negative numbers)\n- Complex conversions with large bases (up to base 97)\n\n## Key Features\n- Robust error handling with specific error messages\n- Efficient base conversion algorithm\n- Clean, readable code that passes linting\n- Handles all edge cases correctly\n\nThe solution is now complete and ready for use!"
|
|
1043
|
+
},
|
|
1044
|
+
{
|
|
1045
|
+
"exerciseName": "allergies",
|
|
1046
|
+
"status": "success",
|
|
1047
|
+
"turns": 15,
|
|
1048
|
+
"testResult": {
|
|
1049
|
+
"passed": 50,
|
|
1050
|
+
"failed": 0,
|
|
1051
|
+
"total": 50,
|
|
1052
|
+
"skipped": 0,
|
|
1053
|
+
"success": true,
|
|
1054
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":50,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":50,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202318697,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Allergies\",\"testing for eggs allergy\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for eggs allergy not allergic to anything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"not allergic to anything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for eggs allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for eggs allergy allergic only to eggs\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic only to eggs\"},{\"ancestorTitles\":[\"Allergies\",\"testing for eggs allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for eggs allergy allergic to eggs and something else\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to eggs and something else\"},{\"ancestorTitles\":[\"Allergies\",\"testing for eggs allergy\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for eggs allergy allergic to something, but not eggs\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to something, but not eggs\"},{\"ancestorTitles\":[\"Allergies\",\"testing for eggs allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for eggs allergy allergic to everything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to everything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for peanuts allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for peanuts allergy not allergic to anything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"not allergic to anything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for peanuts allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for peanuts allergy allergic only to peanuts\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic only to peanuts\"},{\"ancestorTitles\":[\"Allergies\",\"testing for peanuts allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for peanuts allergy allergic to peanuts and something else\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to peanuts and something else\"},{\"ancestorTitles\":[\"Allergies\",\"testing for peanuts allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for peanuts allergy allergic to something, but not peanuts\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to something, but not peanuts\"},{\"ancestorTitles\":[\"Allergies\",\"testing for peanuts allergy\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for peanuts allergy allergic to everything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to everything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for shellfish allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for shellfish allergy not allergic to anything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"not allergic to anything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for shellfish allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for shellfish allergy allergic only to shellfish\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic only to shellfish\"},{\"ancestorTitles\":[\"Allergies\",\"testing for shellfish allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for shellfish allergy allergic to shellfish and something else\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to shellfish and something else\"},{\"ancestorTitles\":[\"Allergies\",\"testing for shellfish allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for shellfish allergy allergic to something, but not shellfish\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to something, but not shellfish\"},{\"ancestorTitles\":[\"Allergies\",\"testing for shellfish allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for shellfish allergy allergic to everything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to everything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for strawberries allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for strawberries allergy not allergic to anything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"not allergic to anything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for strawberries allergy\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for strawberries allergy allergic only to strawberries\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic only to strawberries\"},{\"ancestorTitles\":[\"Allergies\",\"testing for strawberries allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for strawberries allergy allergic to strawberries and something else\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to strawberries and something else\"},{\"ancestorTitles\":[\"Allergies\",\"testing for strawberries allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for strawberries allergy allergic to something, but not strawberries\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to something, but not strawberries\"},{\"ancestorTitles\":[\"Allergies\",\"testing for strawberries allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for strawberries allergy allergic to everything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to everything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for tomatoes allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for tomatoes allergy not allergic to anything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"not allergic to anything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for tomatoes allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for tomatoes allergy allergic only to tomatoes\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic only to tomatoes\"},{\"ancestorTitles\":[\"Allergies\",\"testing for tomatoes allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for tomatoes allergy allergic to tomatoes and something else\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to tomatoes and something else\"},{\"ancestorTitles\":[\"Allergies\",\"testing for tomatoes allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for tomatoes allergy allergic to something, but not tomatoes\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to something, but not tomatoes\"},{\"ancestorTitles\":[\"Allergies\",\"testing for tomatoes allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for tomatoes allergy allergic to everything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to everything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for chocolate allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for chocolate allergy not allergic to anything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"not allergic to anything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for chocolate allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for chocolate allergy allergic only to chocolate\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic only to chocolate\"},{\"ancestorTitles\":[\"Allergies\",\"testing for chocolate allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for chocolate allergy allergic to chocolate and something else\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to chocolate and something else\"},{\"ancestorTitles\":[\"Allergies\",\"testing for chocolate allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for chocolate allergy allergic to something, but not chocolate\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to something, but not chocolate\"},{\"ancestorTitles\":[\"Allergies\",\"testing for chocolate allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for chocolate allergy allergic to everything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to everything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for pollen allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for pollen allergy not allergic to anything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"not allergic to anything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for pollen allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for pollen allergy allergic only to pollen\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic only to pollen\"},{\"ancestorTitles\":[\"Allergies\",\"testing for pollen allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for pollen allergy allergic to pollen and something else\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to pollen and something else\"},{\"ancestorTitles\":[\"Allergies\",\"testing for pollen allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for pollen allergy allergic to something, but not pollen\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to something, but not pollen\"},{\"ancestorTitles\":[\"Allergies\",\"testing for pollen allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for pollen allergy allergic to everything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to everything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for cats allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for cats allergy not allergic to anything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"not allergic to anything\"},{\"ancestorTitles\":[\"Allergies\",\"testing for cats allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for cats allergy allergic only to cats\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic only to cats\"},{\"ancestorTitles\":[\"Allergies\",\"testing for cats allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for cats allergy allergic to cats and something else\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to cats and something else\"},{\"ancestorTitles\":[\"Allergies\",\"testing for cats allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for cats allergy allergic to something, but not cats\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to something, but not cats\"},{\"ancestorTitles\":[\"Allergies\",\"testing for cats allergy\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies testing for cats allergy allergic to everything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"allergic to everything\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: no allergies\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"no allergies\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: just eggs\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"just eggs\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: just peanuts\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"just peanuts\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: just strawberries\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"just strawberries\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: eggs and peanuts\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"eggs and peanuts\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: more than eggs but not peanuts\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"more than eggs but not peanuts\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: lots of stuff\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"lots of stuff\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: everything\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"everything\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: no allergen score parts\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"no allergen score parts\"},{\"ancestorTitles\":[\"Allergies\",\"list when:\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Allergies list when: no allergen score parts without highest valid score\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"no allergen score parts without highest valid score\"}],\"endTime\":1754202318784,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/allergies/allergies.spec.js\",\"startTime\":1754202318706,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
1055
|
+
"details": {
|
|
1056
|
+
"numFailedTestSuites": 0,
|
|
1057
|
+
"numFailedTests": 0,
|
|
1058
|
+
"numPassedTestSuites": 1,
|
|
1059
|
+
"numPassedTests": 50,
|
|
1060
|
+
"numPendingTestSuites": 0,
|
|
1061
|
+
"numPendingTests": 0,
|
|
1062
|
+
"numRuntimeErrorTestSuites": 0,
|
|
1063
|
+
"numTodoTests": 0,
|
|
1064
|
+
"numTotalTestSuites": 1,
|
|
1065
|
+
"numTotalTests": 50,
|
|
1066
|
+
"openHandles": [],
|
|
1067
|
+
"snapshot": {
|
|
1068
|
+
"added": 0,
|
|
1069
|
+
"didUpdate": false,
|
|
1070
|
+
"failure": false,
|
|
1071
|
+
"filesAdded": 0,
|
|
1072
|
+
"filesRemoved": 0,
|
|
1073
|
+
"filesRemovedList": [],
|
|
1074
|
+
"filesUnmatched": 0,
|
|
1075
|
+
"filesUpdated": 0,
|
|
1076
|
+
"matched": 0,
|
|
1077
|
+
"total": 0,
|
|
1078
|
+
"unchecked": 0,
|
|
1079
|
+
"uncheckedKeysByFile": [],
|
|
1080
|
+
"unmatched": 0,
|
|
1081
|
+
"updated": 0
|
|
1082
|
+
},
|
|
1083
|
+
"startTime": 1754202318697,
|
|
1084
|
+
"success": true,
|
|
1085
|
+
"testResults": [
|
|
1086
|
+
{
|
|
1087
|
+
"assertionResults": [
|
|
1088
|
+
{
|
|
1089
|
+
"ancestorTitles": [
|
|
1090
|
+
"Allergies",
|
|
1091
|
+
"testing for eggs allergy"
|
|
1092
|
+
],
|
|
1093
|
+
"duration": 1,
|
|
1094
|
+
"failureDetails": [],
|
|
1095
|
+
"failureMessages": [],
|
|
1096
|
+
"fullName": "Allergies testing for eggs allergy not allergic to anything",
|
|
1097
|
+
"invocations": 1,
|
|
1098
|
+
"location": null,
|
|
1099
|
+
"numPassingAsserts": 1,
|
|
1100
|
+
"retryReasons": [],
|
|
1101
|
+
"status": "passed",
|
|
1102
|
+
"title": "not allergic to anything"
|
|
1103
|
+
},
|
|
1104
|
+
{
|
|
1105
|
+
"ancestorTitles": [
|
|
1106
|
+
"Allergies",
|
|
1107
|
+
"testing for eggs allergy"
|
|
1108
|
+
],
|
|
1109
|
+
"duration": 0,
|
|
1110
|
+
"failureDetails": [],
|
|
1111
|
+
"failureMessages": [],
|
|
1112
|
+
"fullName": "Allergies testing for eggs allergy allergic only to eggs",
|
|
1113
|
+
"invocations": 1,
|
|
1114
|
+
"location": null,
|
|
1115
|
+
"numPassingAsserts": 1,
|
|
1116
|
+
"retryReasons": [],
|
|
1117
|
+
"status": "passed",
|
|
1118
|
+
"title": "allergic only to eggs"
|
|
1119
|
+
},
|
|
1120
|
+
{
|
|
1121
|
+
"ancestorTitles": [
|
|
1122
|
+
"Allergies",
|
|
1123
|
+
"testing for eggs allergy"
|
|
1124
|
+
],
|
|
1125
|
+
"duration": 0,
|
|
1126
|
+
"failureDetails": [],
|
|
1127
|
+
"failureMessages": [],
|
|
1128
|
+
"fullName": "Allergies testing for eggs allergy allergic to eggs and something else",
|
|
1129
|
+
"invocations": 1,
|
|
1130
|
+
"location": null,
|
|
1131
|
+
"numPassingAsserts": 1,
|
|
1132
|
+
"retryReasons": [],
|
|
1133
|
+
"status": "passed",
|
|
1134
|
+
"title": "allergic to eggs and something else"
|
|
1135
|
+
},
|
|
1136
|
+
{
|
|
1137
|
+
"ancestorTitles": [
|
|
1138
|
+
"Allergies",
|
|
1139
|
+
"testing for eggs allergy"
|
|
1140
|
+
],
|
|
1141
|
+
"duration": 1,
|
|
1142
|
+
"failureDetails": [],
|
|
1143
|
+
"failureMessages": [],
|
|
1144
|
+
"fullName": "Allergies testing for eggs allergy allergic to something, but not eggs",
|
|
1145
|
+
"invocations": 1,
|
|
1146
|
+
"location": null,
|
|
1147
|
+
"numPassingAsserts": 1,
|
|
1148
|
+
"retryReasons": [],
|
|
1149
|
+
"status": "passed",
|
|
1150
|
+
"title": "allergic to something, but not eggs"
|
|
1151
|
+
},
|
|
1152
|
+
{
|
|
1153
|
+
"ancestorTitles": [
|
|
1154
|
+
"Allergies",
|
|
1155
|
+
"testing for eggs allergy"
|
|
1156
|
+
],
|
|
1157
|
+
"duration": 0,
|
|
1158
|
+
"failureDetails": [],
|
|
1159
|
+
"failureMessages": [],
|
|
1160
|
+
"fullName": "Allergies testing for eggs allergy allergic to everything",
|
|
1161
|
+
"invocations": 1,
|
|
1162
|
+
"location": null,
|
|
1163
|
+
"numPassingAsserts": 1,
|
|
1164
|
+
"retryReasons": [],
|
|
1165
|
+
"status": "passed",
|
|
1166
|
+
"title": "allergic to everything"
|
|
1167
|
+
},
|
|
1168
|
+
{
|
|
1169
|
+
"ancestorTitles": [
|
|
1170
|
+
"Allergies",
|
|
1171
|
+
"testing for peanuts allergy"
|
|
1172
|
+
],
|
|
1173
|
+
"duration": 0,
|
|
1174
|
+
"failureDetails": [],
|
|
1175
|
+
"failureMessages": [],
|
|
1176
|
+
"fullName": "Allergies testing for peanuts allergy not allergic to anything",
|
|
1177
|
+
"invocations": 1,
|
|
1178
|
+
"location": null,
|
|
1179
|
+
"numPassingAsserts": 1,
|
|
1180
|
+
"retryReasons": [],
|
|
1181
|
+
"status": "passed",
|
|
1182
|
+
"title": "not allergic to anything"
|
|
1183
|
+
},
|
|
1184
|
+
{
|
|
1185
|
+
"ancestorTitles": [
|
|
1186
|
+
"Allergies",
|
|
1187
|
+
"testing for peanuts allergy"
|
|
1188
|
+
],
|
|
1189
|
+
"duration": 0,
|
|
1190
|
+
"failureDetails": [],
|
|
1191
|
+
"failureMessages": [],
|
|
1192
|
+
"fullName": "Allergies testing for peanuts allergy allergic only to peanuts",
|
|
1193
|
+
"invocations": 1,
|
|
1194
|
+
"location": null,
|
|
1195
|
+
"numPassingAsserts": 1,
|
|
1196
|
+
"retryReasons": [],
|
|
1197
|
+
"status": "passed",
|
|
1198
|
+
"title": "allergic only to peanuts"
|
|
1199
|
+
},
|
|
1200
|
+
{
|
|
1201
|
+
"ancestorTitles": [
|
|
1202
|
+
"Allergies",
|
|
1203
|
+
"testing for peanuts allergy"
|
|
1204
|
+
],
|
|
1205
|
+
"duration": 0,
|
|
1206
|
+
"failureDetails": [],
|
|
1207
|
+
"failureMessages": [],
|
|
1208
|
+
"fullName": "Allergies testing for peanuts allergy allergic to peanuts and something else",
|
|
1209
|
+
"invocations": 1,
|
|
1210
|
+
"location": null,
|
|
1211
|
+
"numPassingAsserts": 1,
|
|
1212
|
+
"retryReasons": [],
|
|
1213
|
+
"status": "passed",
|
|
1214
|
+
"title": "allergic to peanuts and something else"
|
|
1215
|
+
},
|
|
1216
|
+
{
|
|
1217
|
+
"ancestorTitles": [
|
|
1218
|
+
"Allergies",
|
|
1219
|
+
"testing for peanuts allergy"
|
|
1220
|
+
],
|
|
1221
|
+
"duration": 0,
|
|
1222
|
+
"failureDetails": [],
|
|
1223
|
+
"failureMessages": [],
|
|
1224
|
+
"fullName": "Allergies testing for peanuts allergy allergic to something, but not peanuts",
|
|
1225
|
+
"invocations": 1,
|
|
1226
|
+
"location": null,
|
|
1227
|
+
"numPassingAsserts": 1,
|
|
1228
|
+
"retryReasons": [],
|
|
1229
|
+
"status": "passed",
|
|
1230
|
+
"title": "allergic to something, but not peanuts"
|
|
1231
|
+
},
|
|
1232
|
+
{
|
|
1233
|
+
"ancestorTitles": [
|
|
1234
|
+
"Allergies",
|
|
1235
|
+
"testing for peanuts allergy"
|
|
1236
|
+
],
|
|
1237
|
+
"duration": 1,
|
|
1238
|
+
"failureDetails": [],
|
|
1239
|
+
"failureMessages": [],
|
|
1240
|
+
"fullName": "Allergies testing for peanuts allergy allergic to everything",
|
|
1241
|
+
"invocations": 1,
|
|
1242
|
+
"location": null,
|
|
1243
|
+
"numPassingAsserts": 1,
|
|
1244
|
+
"retryReasons": [],
|
|
1245
|
+
"status": "passed",
|
|
1246
|
+
"title": "allergic to everything"
|
|
1247
|
+
},
|
|
1248
|
+
{
|
|
1249
|
+
"ancestorTitles": [
|
|
1250
|
+
"Allergies",
|
|
1251
|
+
"testing for shellfish allergy"
|
|
1252
|
+
],
|
|
1253
|
+
"duration": 0,
|
|
1254
|
+
"failureDetails": [],
|
|
1255
|
+
"failureMessages": [],
|
|
1256
|
+
"fullName": "Allergies testing for shellfish allergy not allergic to anything",
|
|
1257
|
+
"invocations": 1,
|
|
1258
|
+
"location": null,
|
|
1259
|
+
"numPassingAsserts": 1,
|
|
1260
|
+
"retryReasons": [],
|
|
1261
|
+
"status": "passed",
|
|
1262
|
+
"title": "not allergic to anything"
|
|
1263
|
+
},
|
|
1264
|
+
{
|
|
1265
|
+
"ancestorTitles": [
|
|
1266
|
+
"Allergies",
|
|
1267
|
+
"testing for shellfish allergy"
|
|
1268
|
+
],
|
|
1269
|
+
"duration": 0,
|
|
1270
|
+
"failureDetails": [],
|
|
1271
|
+
"failureMessages": [],
|
|
1272
|
+
"fullName": "Allergies testing for shellfish allergy allergic only to shellfish",
|
|
1273
|
+
"invocations": 1,
|
|
1274
|
+
"location": null,
|
|
1275
|
+
"numPassingAsserts": 1,
|
|
1276
|
+
"retryReasons": [],
|
|
1277
|
+
"status": "passed",
|
|
1278
|
+
"title": "allergic only to shellfish"
|
|
1279
|
+
},
|
|
1280
|
+
{
|
|
1281
|
+
"ancestorTitles": [
|
|
1282
|
+
"Allergies",
|
|
1283
|
+
"testing for shellfish allergy"
|
|
1284
|
+
],
|
|
1285
|
+
"duration": 0,
|
|
1286
|
+
"failureDetails": [],
|
|
1287
|
+
"failureMessages": [],
|
|
1288
|
+
"fullName": "Allergies testing for shellfish allergy allergic to shellfish and something else",
|
|
1289
|
+
"invocations": 1,
|
|
1290
|
+
"location": null,
|
|
1291
|
+
"numPassingAsserts": 1,
|
|
1292
|
+
"retryReasons": [],
|
|
1293
|
+
"status": "passed",
|
|
1294
|
+
"title": "allergic to shellfish and something else"
|
|
1295
|
+
},
|
|
1296
|
+
{
|
|
1297
|
+
"ancestorTitles": [
|
|
1298
|
+
"Allergies",
|
|
1299
|
+
"testing for shellfish allergy"
|
|
1300
|
+
],
|
|
1301
|
+
"duration": 0,
|
|
1302
|
+
"failureDetails": [],
|
|
1303
|
+
"failureMessages": [],
|
|
1304
|
+
"fullName": "Allergies testing for shellfish allergy allergic to something, but not shellfish",
|
|
1305
|
+
"invocations": 1,
|
|
1306
|
+
"location": null,
|
|
1307
|
+
"numPassingAsserts": 1,
|
|
1308
|
+
"retryReasons": [],
|
|
1309
|
+
"status": "passed",
|
|
1310
|
+
"title": "allergic to something, but not shellfish"
|
|
1311
|
+
},
|
|
1312
|
+
{
|
|
1313
|
+
"ancestorTitles": [
|
|
1314
|
+
"Allergies",
|
|
1315
|
+
"testing for shellfish allergy"
|
|
1316
|
+
],
|
|
1317
|
+
"duration": 0,
|
|
1318
|
+
"failureDetails": [],
|
|
1319
|
+
"failureMessages": [],
|
|
1320
|
+
"fullName": "Allergies testing for shellfish allergy allergic to everything",
|
|
1321
|
+
"invocations": 1,
|
|
1322
|
+
"location": null,
|
|
1323
|
+
"numPassingAsserts": 1,
|
|
1324
|
+
"retryReasons": [],
|
|
1325
|
+
"status": "passed",
|
|
1326
|
+
"title": "allergic to everything"
|
|
1327
|
+
},
|
|
1328
|
+
{
|
|
1329
|
+
"ancestorTitles": [
|
|
1330
|
+
"Allergies",
|
|
1331
|
+
"testing for strawberries allergy"
|
|
1332
|
+
],
|
|
1333
|
+
"duration": 0,
|
|
1334
|
+
"failureDetails": [],
|
|
1335
|
+
"failureMessages": [],
|
|
1336
|
+
"fullName": "Allergies testing for strawberries allergy not allergic to anything",
|
|
1337
|
+
"invocations": 1,
|
|
1338
|
+
"location": null,
|
|
1339
|
+
"numPassingAsserts": 1,
|
|
1340
|
+
"retryReasons": [],
|
|
1341
|
+
"status": "passed",
|
|
1342
|
+
"title": "not allergic to anything"
|
|
1343
|
+
},
|
|
1344
|
+
{
|
|
1345
|
+
"ancestorTitles": [
|
|
1346
|
+
"Allergies",
|
|
1347
|
+
"testing for strawberries allergy"
|
|
1348
|
+
],
|
|
1349
|
+
"duration": 1,
|
|
1350
|
+
"failureDetails": [],
|
|
1351
|
+
"failureMessages": [],
|
|
1352
|
+
"fullName": "Allergies testing for strawberries allergy allergic only to strawberries",
|
|
1353
|
+
"invocations": 1,
|
|
1354
|
+
"location": null,
|
|
1355
|
+
"numPassingAsserts": 1,
|
|
1356
|
+
"retryReasons": [],
|
|
1357
|
+
"status": "passed",
|
|
1358
|
+
"title": "allergic only to strawberries"
|
|
1359
|
+
},
|
|
1360
|
+
{
|
|
1361
|
+
"ancestorTitles": [
|
|
1362
|
+
"Allergies",
|
|
1363
|
+
"testing for strawberries allergy"
|
|
1364
|
+
],
|
|
1365
|
+
"duration": 0,
|
|
1366
|
+
"failureDetails": [],
|
|
1367
|
+
"failureMessages": [],
|
|
1368
|
+
"fullName": "Allergies testing for strawberries allergy allergic to strawberries and something else",
|
|
1369
|
+
"invocations": 1,
|
|
1370
|
+
"location": null,
|
|
1371
|
+
"numPassingAsserts": 1,
|
|
1372
|
+
"retryReasons": [],
|
|
1373
|
+
"status": "passed",
|
|
1374
|
+
"title": "allergic to strawberries and something else"
|
|
1375
|
+
},
|
|
1376
|
+
{
|
|
1377
|
+
"ancestorTitles": [
|
|
1378
|
+
"Allergies",
|
|
1379
|
+
"testing for strawberries allergy"
|
|
1380
|
+
],
|
|
1381
|
+
"duration": 0,
|
|
1382
|
+
"failureDetails": [],
|
|
1383
|
+
"failureMessages": [],
|
|
1384
|
+
"fullName": "Allergies testing for strawberries allergy allergic to something, but not strawberries",
|
|
1385
|
+
"invocations": 1,
|
|
1386
|
+
"location": null,
|
|
1387
|
+
"numPassingAsserts": 1,
|
|
1388
|
+
"retryReasons": [],
|
|
1389
|
+
"status": "passed",
|
|
1390
|
+
"title": "allergic to something, but not strawberries"
|
|
1391
|
+
},
|
|
1392
|
+
{
|
|
1393
|
+
"ancestorTitles": [
|
|
1394
|
+
"Allergies",
|
|
1395
|
+
"testing for strawberries allergy"
|
|
1396
|
+
],
|
|
1397
|
+
"duration": 0,
|
|
1398
|
+
"failureDetails": [],
|
|
1399
|
+
"failureMessages": [],
|
|
1400
|
+
"fullName": "Allergies testing for strawberries allergy allergic to everything",
|
|
1401
|
+
"invocations": 1,
|
|
1402
|
+
"location": null,
|
|
1403
|
+
"numPassingAsserts": 1,
|
|
1404
|
+
"retryReasons": [],
|
|
1405
|
+
"status": "passed",
|
|
1406
|
+
"title": "allergic to everything"
|
|
1407
|
+
},
|
|
1408
|
+
{
|
|
1409
|
+
"ancestorTitles": [
|
|
1410
|
+
"Allergies",
|
|
1411
|
+
"testing for tomatoes allergy"
|
|
1412
|
+
],
|
|
1413
|
+
"duration": 0,
|
|
1414
|
+
"failureDetails": [],
|
|
1415
|
+
"failureMessages": [],
|
|
1416
|
+
"fullName": "Allergies testing for tomatoes allergy not allergic to anything",
|
|
1417
|
+
"invocations": 1,
|
|
1418
|
+
"location": null,
|
|
1419
|
+
"numPassingAsserts": 1,
|
|
1420
|
+
"retryReasons": [],
|
|
1421
|
+
"status": "passed",
|
|
1422
|
+
"title": "not allergic to anything"
|
|
1423
|
+
},
|
|
1424
|
+
{
|
|
1425
|
+
"ancestorTitles": [
|
|
1426
|
+
"Allergies",
|
|
1427
|
+
"testing for tomatoes allergy"
|
|
1428
|
+
],
|
|
1429
|
+
"duration": 0,
|
|
1430
|
+
"failureDetails": [],
|
|
1431
|
+
"failureMessages": [],
|
|
1432
|
+
"fullName": "Allergies testing for tomatoes allergy allergic only to tomatoes",
|
|
1433
|
+
"invocations": 1,
|
|
1434
|
+
"location": null,
|
|
1435
|
+
"numPassingAsserts": 1,
|
|
1436
|
+
"retryReasons": [],
|
|
1437
|
+
"status": "passed",
|
|
1438
|
+
"title": "allergic only to tomatoes"
|
|
1439
|
+
},
|
|
1440
|
+
{
|
|
1441
|
+
"ancestorTitles": [
|
|
1442
|
+
"Allergies",
|
|
1443
|
+
"testing for tomatoes allergy"
|
|
1444
|
+
],
|
|
1445
|
+
"duration": 0,
|
|
1446
|
+
"failureDetails": [],
|
|
1447
|
+
"failureMessages": [],
|
|
1448
|
+
"fullName": "Allergies testing for tomatoes allergy allergic to tomatoes and something else",
|
|
1449
|
+
"invocations": 1,
|
|
1450
|
+
"location": null,
|
|
1451
|
+
"numPassingAsserts": 1,
|
|
1452
|
+
"retryReasons": [],
|
|
1453
|
+
"status": "passed",
|
|
1454
|
+
"title": "allergic to tomatoes and something else"
|
|
1455
|
+
},
|
|
1456
|
+
{
|
|
1457
|
+
"ancestorTitles": [
|
|
1458
|
+
"Allergies",
|
|
1459
|
+
"testing for tomatoes allergy"
|
|
1460
|
+
],
|
|
1461
|
+
"duration": 0,
|
|
1462
|
+
"failureDetails": [],
|
|
1463
|
+
"failureMessages": [],
|
|
1464
|
+
"fullName": "Allergies testing for tomatoes allergy allergic to something, but not tomatoes",
|
|
1465
|
+
"invocations": 1,
|
|
1466
|
+
"location": null,
|
|
1467
|
+
"numPassingAsserts": 1,
|
|
1468
|
+
"retryReasons": [],
|
|
1469
|
+
"status": "passed",
|
|
1470
|
+
"title": "allergic to something, but not tomatoes"
|
|
1471
|
+
},
|
|
1472
|
+
{
|
|
1473
|
+
"ancestorTitles": [
|
|
1474
|
+
"Allergies",
|
|
1475
|
+
"testing for tomatoes allergy"
|
|
1476
|
+
],
|
|
1477
|
+
"duration": 0,
|
|
1478
|
+
"failureDetails": [],
|
|
1479
|
+
"failureMessages": [],
|
|
1480
|
+
"fullName": "Allergies testing for tomatoes allergy allergic to everything",
|
|
1481
|
+
"invocations": 1,
|
|
1482
|
+
"location": null,
|
|
1483
|
+
"numPassingAsserts": 1,
|
|
1484
|
+
"retryReasons": [],
|
|
1485
|
+
"status": "passed",
|
|
1486
|
+
"title": "allergic to everything"
|
|
1487
|
+
},
|
|
1488
|
+
{
|
|
1489
|
+
"ancestorTitles": [
|
|
1490
|
+
"Allergies",
|
|
1491
|
+
"testing for chocolate allergy"
|
|
1492
|
+
],
|
|
1493
|
+
"duration": 0,
|
|
1494
|
+
"failureDetails": [],
|
|
1495
|
+
"failureMessages": [],
|
|
1496
|
+
"fullName": "Allergies testing for chocolate allergy not allergic to anything",
|
|
1497
|
+
"invocations": 1,
|
|
1498
|
+
"location": null,
|
|
1499
|
+
"numPassingAsserts": 1,
|
|
1500
|
+
"retryReasons": [],
|
|
1501
|
+
"status": "passed",
|
|
1502
|
+
"title": "not allergic to anything"
|
|
1503
|
+
},
|
|
1504
|
+
{
|
|
1505
|
+
"ancestorTitles": [
|
|
1506
|
+
"Allergies",
|
|
1507
|
+
"testing for chocolate allergy"
|
|
1508
|
+
],
|
|
1509
|
+
"duration": 0,
|
|
1510
|
+
"failureDetails": [],
|
|
1511
|
+
"failureMessages": [],
|
|
1512
|
+
"fullName": "Allergies testing for chocolate allergy allergic only to chocolate",
|
|
1513
|
+
"invocations": 1,
|
|
1514
|
+
"location": null,
|
|
1515
|
+
"numPassingAsserts": 1,
|
|
1516
|
+
"retryReasons": [],
|
|
1517
|
+
"status": "passed",
|
|
1518
|
+
"title": "allergic only to chocolate"
|
|
1519
|
+
},
|
|
1520
|
+
{
|
|
1521
|
+
"ancestorTitles": [
|
|
1522
|
+
"Allergies",
|
|
1523
|
+
"testing for chocolate allergy"
|
|
1524
|
+
],
|
|
1525
|
+
"duration": 0,
|
|
1526
|
+
"failureDetails": [],
|
|
1527
|
+
"failureMessages": [],
|
|
1528
|
+
"fullName": "Allergies testing for chocolate allergy allergic to chocolate and something else",
|
|
1529
|
+
"invocations": 1,
|
|
1530
|
+
"location": null,
|
|
1531
|
+
"numPassingAsserts": 1,
|
|
1532
|
+
"retryReasons": [],
|
|
1533
|
+
"status": "passed",
|
|
1534
|
+
"title": "allergic to chocolate and something else"
|
|
1535
|
+
},
|
|
1536
|
+
{
|
|
1537
|
+
"ancestorTitles": [
|
|
1538
|
+
"Allergies",
|
|
1539
|
+
"testing for chocolate allergy"
|
|
1540
|
+
],
|
|
1541
|
+
"duration": 0,
|
|
1542
|
+
"failureDetails": [],
|
|
1543
|
+
"failureMessages": [],
|
|
1544
|
+
"fullName": "Allergies testing for chocolate allergy allergic to something, but not chocolate",
|
|
1545
|
+
"invocations": 1,
|
|
1546
|
+
"location": null,
|
|
1547
|
+
"numPassingAsserts": 1,
|
|
1548
|
+
"retryReasons": [],
|
|
1549
|
+
"status": "passed",
|
|
1550
|
+
"title": "allergic to something, but not chocolate"
|
|
1551
|
+
},
|
|
1552
|
+
{
|
|
1553
|
+
"ancestorTitles": [
|
|
1554
|
+
"Allergies",
|
|
1555
|
+
"testing for chocolate allergy"
|
|
1556
|
+
],
|
|
1557
|
+
"duration": 0,
|
|
1558
|
+
"failureDetails": [],
|
|
1559
|
+
"failureMessages": [],
|
|
1560
|
+
"fullName": "Allergies testing for chocolate allergy allergic to everything",
|
|
1561
|
+
"invocations": 1,
|
|
1562
|
+
"location": null,
|
|
1563
|
+
"numPassingAsserts": 1,
|
|
1564
|
+
"retryReasons": [],
|
|
1565
|
+
"status": "passed",
|
|
1566
|
+
"title": "allergic to everything"
|
|
1567
|
+
},
|
|
1568
|
+
{
|
|
1569
|
+
"ancestorTitles": [
|
|
1570
|
+
"Allergies",
|
|
1571
|
+
"testing for pollen allergy"
|
|
1572
|
+
],
|
|
1573
|
+
"duration": 0,
|
|
1574
|
+
"failureDetails": [],
|
|
1575
|
+
"failureMessages": [],
|
|
1576
|
+
"fullName": "Allergies testing for pollen allergy not allergic to anything",
|
|
1577
|
+
"invocations": 1,
|
|
1578
|
+
"location": null,
|
|
1579
|
+
"numPassingAsserts": 1,
|
|
1580
|
+
"retryReasons": [],
|
|
1581
|
+
"status": "passed",
|
|
1582
|
+
"title": "not allergic to anything"
|
|
1583
|
+
},
|
|
1584
|
+
{
|
|
1585
|
+
"ancestorTitles": [
|
|
1586
|
+
"Allergies",
|
|
1587
|
+
"testing for pollen allergy"
|
|
1588
|
+
],
|
|
1589
|
+
"duration": 0,
|
|
1590
|
+
"failureDetails": [],
|
|
1591
|
+
"failureMessages": [],
|
|
1592
|
+
"fullName": "Allergies testing for pollen allergy allergic only to pollen",
|
|
1593
|
+
"invocations": 1,
|
|
1594
|
+
"location": null,
|
|
1595
|
+
"numPassingAsserts": 1,
|
|
1596
|
+
"retryReasons": [],
|
|
1597
|
+
"status": "passed",
|
|
1598
|
+
"title": "allergic only to pollen"
|
|
1599
|
+
},
|
|
1600
|
+
{
|
|
1601
|
+
"ancestorTitles": [
|
|
1602
|
+
"Allergies",
|
|
1603
|
+
"testing for pollen allergy"
|
|
1604
|
+
],
|
|
1605
|
+
"duration": 0,
|
|
1606
|
+
"failureDetails": [],
|
|
1607
|
+
"failureMessages": [],
|
|
1608
|
+
"fullName": "Allergies testing for pollen allergy allergic to pollen and something else",
|
|
1609
|
+
"invocations": 1,
|
|
1610
|
+
"location": null,
|
|
1611
|
+
"numPassingAsserts": 1,
|
|
1612
|
+
"retryReasons": [],
|
|
1613
|
+
"status": "passed",
|
|
1614
|
+
"title": "allergic to pollen and something else"
|
|
1615
|
+
},
|
|
1616
|
+
{
|
|
1617
|
+
"ancestorTitles": [
|
|
1618
|
+
"Allergies",
|
|
1619
|
+
"testing for pollen allergy"
|
|
1620
|
+
],
|
|
1621
|
+
"duration": 0,
|
|
1622
|
+
"failureDetails": [],
|
|
1623
|
+
"failureMessages": [],
|
|
1624
|
+
"fullName": "Allergies testing for pollen allergy allergic to something, but not pollen",
|
|
1625
|
+
"invocations": 1,
|
|
1626
|
+
"location": null,
|
|
1627
|
+
"numPassingAsserts": 1,
|
|
1628
|
+
"retryReasons": [],
|
|
1629
|
+
"status": "passed",
|
|
1630
|
+
"title": "allergic to something, but not pollen"
|
|
1631
|
+
},
|
|
1632
|
+
{
|
|
1633
|
+
"ancestorTitles": [
|
|
1634
|
+
"Allergies",
|
|
1635
|
+
"testing for pollen allergy"
|
|
1636
|
+
],
|
|
1637
|
+
"duration": 0,
|
|
1638
|
+
"failureDetails": [],
|
|
1639
|
+
"failureMessages": [],
|
|
1640
|
+
"fullName": "Allergies testing for pollen allergy allergic to everything",
|
|
1641
|
+
"invocations": 1,
|
|
1642
|
+
"location": null,
|
|
1643
|
+
"numPassingAsserts": 1,
|
|
1644
|
+
"retryReasons": [],
|
|
1645
|
+
"status": "passed",
|
|
1646
|
+
"title": "allergic to everything"
|
|
1647
|
+
},
|
|
1648
|
+
{
|
|
1649
|
+
"ancestorTitles": [
|
|
1650
|
+
"Allergies",
|
|
1651
|
+
"testing for cats allergy"
|
|
1652
|
+
],
|
|
1653
|
+
"duration": 0,
|
|
1654
|
+
"failureDetails": [],
|
|
1655
|
+
"failureMessages": [],
|
|
1656
|
+
"fullName": "Allergies testing for cats allergy not allergic to anything",
|
|
1657
|
+
"invocations": 1,
|
|
1658
|
+
"location": null,
|
|
1659
|
+
"numPassingAsserts": 1,
|
|
1660
|
+
"retryReasons": [],
|
|
1661
|
+
"status": "passed",
|
|
1662
|
+
"title": "not allergic to anything"
|
|
1663
|
+
},
|
|
1664
|
+
{
|
|
1665
|
+
"ancestorTitles": [
|
|
1666
|
+
"Allergies",
|
|
1667
|
+
"testing for cats allergy"
|
|
1668
|
+
],
|
|
1669
|
+
"duration": 0,
|
|
1670
|
+
"failureDetails": [],
|
|
1671
|
+
"failureMessages": [],
|
|
1672
|
+
"fullName": "Allergies testing for cats allergy allergic only to cats",
|
|
1673
|
+
"invocations": 1,
|
|
1674
|
+
"location": null,
|
|
1675
|
+
"numPassingAsserts": 1,
|
|
1676
|
+
"retryReasons": [],
|
|
1677
|
+
"status": "passed",
|
|
1678
|
+
"title": "allergic only to cats"
|
|
1679
|
+
},
|
|
1680
|
+
{
|
|
1681
|
+
"ancestorTitles": [
|
|
1682
|
+
"Allergies",
|
|
1683
|
+
"testing for cats allergy"
|
|
1684
|
+
],
|
|
1685
|
+
"duration": 0,
|
|
1686
|
+
"failureDetails": [],
|
|
1687
|
+
"failureMessages": [],
|
|
1688
|
+
"fullName": "Allergies testing for cats allergy allergic to cats and something else",
|
|
1689
|
+
"invocations": 1,
|
|
1690
|
+
"location": null,
|
|
1691
|
+
"numPassingAsserts": 1,
|
|
1692
|
+
"retryReasons": [],
|
|
1693
|
+
"status": "passed",
|
|
1694
|
+
"title": "allergic to cats and something else"
|
|
1695
|
+
},
|
|
1696
|
+
{
|
|
1697
|
+
"ancestorTitles": [
|
|
1698
|
+
"Allergies",
|
|
1699
|
+
"testing for cats allergy"
|
|
1700
|
+
],
|
|
1701
|
+
"duration": 0,
|
|
1702
|
+
"failureDetails": [],
|
|
1703
|
+
"failureMessages": [],
|
|
1704
|
+
"fullName": "Allergies testing for cats allergy allergic to something, but not cats",
|
|
1705
|
+
"invocations": 1,
|
|
1706
|
+
"location": null,
|
|
1707
|
+
"numPassingAsserts": 1,
|
|
1708
|
+
"retryReasons": [],
|
|
1709
|
+
"status": "passed",
|
|
1710
|
+
"title": "allergic to something, but not cats"
|
|
1711
|
+
},
|
|
1712
|
+
{
|
|
1713
|
+
"ancestorTitles": [
|
|
1714
|
+
"Allergies",
|
|
1715
|
+
"testing for cats allergy"
|
|
1716
|
+
],
|
|
1717
|
+
"duration": 0,
|
|
1718
|
+
"failureDetails": [],
|
|
1719
|
+
"failureMessages": [],
|
|
1720
|
+
"fullName": "Allergies testing for cats allergy allergic to everything",
|
|
1721
|
+
"invocations": 1,
|
|
1722
|
+
"location": null,
|
|
1723
|
+
"numPassingAsserts": 1,
|
|
1724
|
+
"retryReasons": [],
|
|
1725
|
+
"status": "passed",
|
|
1726
|
+
"title": "allergic to everything"
|
|
1727
|
+
},
|
|
1728
|
+
{
|
|
1729
|
+
"ancestorTitles": [
|
|
1730
|
+
"Allergies",
|
|
1731
|
+
"list when:"
|
|
1732
|
+
],
|
|
1733
|
+
"duration": 0,
|
|
1734
|
+
"failureDetails": [],
|
|
1735
|
+
"failureMessages": [],
|
|
1736
|
+
"fullName": "Allergies list when: no allergies",
|
|
1737
|
+
"invocations": 1,
|
|
1738
|
+
"location": null,
|
|
1739
|
+
"numPassingAsserts": 1,
|
|
1740
|
+
"retryReasons": [],
|
|
1741
|
+
"status": "passed",
|
|
1742
|
+
"title": "no allergies"
|
|
1743
|
+
},
|
|
1744
|
+
{
|
|
1745
|
+
"ancestorTitles": [
|
|
1746
|
+
"Allergies",
|
|
1747
|
+
"list when:"
|
|
1748
|
+
],
|
|
1749
|
+
"duration": 0,
|
|
1750
|
+
"failureDetails": [],
|
|
1751
|
+
"failureMessages": [],
|
|
1752
|
+
"fullName": "Allergies list when: just eggs",
|
|
1753
|
+
"invocations": 1,
|
|
1754
|
+
"location": null,
|
|
1755
|
+
"numPassingAsserts": 1,
|
|
1756
|
+
"retryReasons": [],
|
|
1757
|
+
"status": "passed",
|
|
1758
|
+
"title": "just eggs"
|
|
1759
|
+
},
|
|
1760
|
+
{
|
|
1761
|
+
"ancestorTitles": [
|
|
1762
|
+
"Allergies",
|
|
1763
|
+
"list when:"
|
|
1764
|
+
],
|
|
1765
|
+
"duration": 0,
|
|
1766
|
+
"failureDetails": [],
|
|
1767
|
+
"failureMessages": [],
|
|
1768
|
+
"fullName": "Allergies list when: just peanuts",
|
|
1769
|
+
"invocations": 1,
|
|
1770
|
+
"location": null,
|
|
1771
|
+
"numPassingAsserts": 1,
|
|
1772
|
+
"retryReasons": [],
|
|
1773
|
+
"status": "passed",
|
|
1774
|
+
"title": "just peanuts"
|
|
1775
|
+
},
|
|
1776
|
+
{
|
|
1777
|
+
"ancestorTitles": [
|
|
1778
|
+
"Allergies",
|
|
1779
|
+
"list when:"
|
|
1780
|
+
],
|
|
1781
|
+
"duration": 0,
|
|
1782
|
+
"failureDetails": [],
|
|
1783
|
+
"failureMessages": [],
|
|
1784
|
+
"fullName": "Allergies list when: just strawberries",
|
|
1785
|
+
"invocations": 1,
|
|
1786
|
+
"location": null,
|
|
1787
|
+
"numPassingAsserts": 1,
|
|
1788
|
+
"retryReasons": [],
|
|
1789
|
+
"status": "passed",
|
|
1790
|
+
"title": "just strawberries"
|
|
1791
|
+
},
|
|
1792
|
+
{
|
|
1793
|
+
"ancestorTitles": [
|
|
1794
|
+
"Allergies",
|
|
1795
|
+
"list when:"
|
|
1796
|
+
],
|
|
1797
|
+
"duration": 0,
|
|
1798
|
+
"failureDetails": [],
|
|
1799
|
+
"failureMessages": [],
|
|
1800
|
+
"fullName": "Allergies list when: eggs and peanuts",
|
|
1801
|
+
"invocations": 1,
|
|
1802
|
+
"location": null,
|
|
1803
|
+
"numPassingAsserts": 1,
|
|
1804
|
+
"retryReasons": [],
|
|
1805
|
+
"status": "passed",
|
|
1806
|
+
"title": "eggs and peanuts"
|
|
1807
|
+
},
|
|
1808
|
+
{
|
|
1809
|
+
"ancestorTitles": [
|
|
1810
|
+
"Allergies",
|
|
1811
|
+
"list when:"
|
|
1812
|
+
],
|
|
1813
|
+
"duration": 0,
|
|
1814
|
+
"failureDetails": [],
|
|
1815
|
+
"failureMessages": [],
|
|
1816
|
+
"fullName": "Allergies list when: more than eggs but not peanuts",
|
|
1817
|
+
"invocations": 1,
|
|
1818
|
+
"location": null,
|
|
1819
|
+
"numPassingAsserts": 1,
|
|
1820
|
+
"retryReasons": [],
|
|
1821
|
+
"status": "passed",
|
|
1822
|
+
"title": "more than eggs but not peanuts"
|
|
1823
|
+
},
|
|
1824
|
+
{
|
|
1825
|
+
"ancestorTitles": [
|
|
1826
|
+
"Allergies",
|
|
1827
|
+
"list when:"
|
|
1828
|
+
],
|
|
1829
|
+
"duration": 0,
|
|
1830
|
+
"failureDetails": [],
|
|
1831
|
+
"failureMessages": [],
|
|
1832
|
+
"fullName": "Allergies list when: lots of stuff",
|
|
1833
|
+
"invocations": 1,
|
|
1834
|
+
"location": null,
|
|
1835
|
+
"numPassingAsserts": 1,
|
|
1836
|
+
"retryReasons": [],
|
|
1837
|
+
"status": "passed",
|
|
1838
|
+
"title": "lots of stuff"
|
|
1839
|
+
},
|
|
1840
|
+
{
|
|
1841
|
+
"ancestorTitles": [
|
|
1842
|
+
"Allergies",
|
|
1843
|
+
"list when:"
|
|
1844
|
+
],
|
|
1845
|
+
"duration": 0,
|
|
1846
|
+
"failureDetails": [],
|
|
1847
|
+
"failureMessages": [],
|
|
1848
|
+
"fullName": "Allergies list when: everything",
|
|
1849
|
+
"invocations": 1,
|
|
1850
|
+
"location": null,
|
|
1851
|
+
"numPassingAsserts": 1,
|
|
1852
|
+
"retryReasons": [],
|
|
1853
|
+
"status": "passed",
|
|
1854
|
+
"title": "everything"
|
|
1855
|
+
},
|
|
1856
|
+
{
|
|
1857
|
+
"ancestorTitles": [
|
|
1858
|
+
"Allergies",
|
|
1859
|
+
"list when:"
|
|
1860
|
+
],
|
|
1861
|
+
"duration": 0,
|
|
1862
|
+
"failureDetails": [],
|
|
1863
|
+
"failureMessages": [],
|
|
1864
|
+
"fullName": "Allergies list when: no allergen score parts",
|
|
1865
|
+
"invocations": 1,
|
|
1866
|
+
"location": null,
|
|
1867
|
+
"numPassingAsserts": 1,
|
|
1868
|
+
"retryReasons": [],
|
|
1869
|
+
"status": "passed",
|
|
1870
|
+
"title": "no allergen score parts"
|
|
1871
|
+
},
|
|
1872
|
+
{
|
|
1873
|
+
"ancestorTitles": [
|
|
1874
|
+
"Allergies",
|
|
1875
|
+
"list when:"
|
|
1876
|
+
],
|
|
1877
|
+
"duration": 0,
|
|
1878
|
+
"failureDetails": [],
|
|
1879
|
+
"failureMessages": [],
|
|
1880
|
+
"fullName": "Allergies list when: no allergen score parts without highest valid score",
|
|
1881
|
+
"invocations": 1,
|
|
1882
|
+
"location": null,
|
|
1883
|
+
"numPassingAsserts": 1,
|
|
1884
|
+
"retryReasons": [],
|
|
1885
|
+
"status": "passed",
|
|
1886
|
+
"title": "no allergen score parts without highest valid score"
|
|
1887
|
+
}
|
|
1888
|
+
],
|
|
1889
|
+
"endTime": 1754202318784,
|
|
1890
|
+
"message": "",
|
|
1891
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/allergies/allergies.spec.js",
|
|
1892
|
+
"startTime": 1754202318706,
|
|
1893
|
+
"status": "passed",
|
|
1894
|
+
"summary": ""
|
|
1895
|
+
}
|
|
1896
|
+
],
|
|
1897
|
+
"wasInterrupted": false
|
|
1898
|
+
}
|
|
1899
|
+
},
|
|
1900
|
+
"timeElapsed": 57.863,
|
|
1901
|
+
"cost": 0.09420810056625001,
|
|
1902
|
+
"startTime": "2025-08-03T06:24:20.941Z",
|
|
1903
|
+
"endTime": "2025-08-03T06:25:18.804Z",
|
|
1904
|
+
"finalOutput": "I have successfully solved the allergies coding exercise! Here's what I implemented:\n\n## Solution Overview\n\nI created a complete implementation of the `Allergies` class that:\n\n1. **Takes an allergy score in the constructor** - stores the numeric score representing all allergies\n2. **Implements `allergicTo(allergen)` method** - returns true/false for whether a person is allergic to a specific item\n3. **Implements `list()` method** - returns an array of all allergens the person is allergic to\n\n## Key Technical Details\n\n**Allergen Mapping**: Used bitwise values for each allergen:\n- eggs (1), peanuts (2), shellfish (4), strawberries (8)\n- tomatoes (16), chocolate (32), pollen (64), cats (128)\n\n**Bitwise Logic**: \n- Used bitwise AND operations to check if specific allergen bits are set in the score\n- Applied a mask (& 255) to ignore allergen scores above the valid range (256+)\n- This handles the requirement to ignore unknown allergens like in the test case with score 509\n\n**Implementation Highlights**:\n```javascript\n// Check if allergic using bitwise AND\nallergicTo(allergen) {\n const allergenValue = this.allergens[allergen];\n const validScore = this.score & 255; // Mask to valid range\n return (validScore & allergenValue) === allergenValue;\n}\n\n// Generate full list by checking each allergen\nlist() {\n const allergiesList = [];\n for (const [allergen, value] of Object.entries(this.allergens)) {\n if (this.allergicTo(allergen)) {\n allergiesList.push(allergen);\n }\n }\n return allergiesList;\n}\n```\n\n## Test Results\n\n✅ **All 50 tests pass successfully**\n- Individual allergen tests (40 tests): Check specific allergies for each of the 8 allergens\n- List functionality tests (10 tests): Verify correct array output for various combinations\n- Edge cases handled: Empty allergies, high scores with invalid components, etc.\n\nThe solution correctly handles the bitwise nature of allergy scores and properly masks out invalid allergen bits above 255, making it robust for all test scenarios including edge cases like score 509 and 257."
|
|
1905
|
+
},
|
|
1906
|
+
{
|
|
1907
|
+
"exerciseName": "alphametics",
|
|
1908
|
+
"status": "success",
|
|
1909
|
+
"turns": 18,
|
|
1910
|
+
"testResult": {
|
|
1911
|
+
"passed": 9,
|
|
1912
|
+
"failed": 0,
|
|
1913
|
+
"total": 9,
|
|
1914
|
+
"skipped": 0,
|
|
1915
|
+
"success": true,
|
|
1916
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":9,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":9,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202419269,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Solve the alphametics puzzle puzzle with three letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"puzzle with three letters\"},{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Solve the alphametics puzzle solution must have unique value for each letter\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"solution must have unique value for each letter\"},{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":4,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Solve the alphametics puzzle leading zero solution is invalid\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"leading zero solution is invalid\"},{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Solve the alphametics puzzle puzzle with four letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"puzzle with four letters\"},{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":30,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Solve the alphametics puzzle puzzle with six letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"puzzle with six letters\"},{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":72,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Solve the alphametics puzzle puzzle with seven letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"puzzle with seven letters\"},{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":604,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Solve the alphametics puzzle puzzle with eight letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"puzzle with eight letters\"},{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":748,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Solve the alphametics puzzle puzzle with ten letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"puzzle with ten letters\"},{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":4938,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Solve the alphametics puzzle puzzle with ten letters and 199 addends\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"puzzle with ten letters and 199 addends\"}],\"endTime\":1754202425766,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/alphametics/alphametics.spec.js\",\"startTime\":1754202419279,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
1917
|
+
"details": {
|
|
1918
|
+
"numFailedTestSuites": 0,
|
|
1919
|
+
"numFailedTests": 0,
|
|
1920
|
+
"numPassedTestSuites": 1,
|
|
1921
|
+
"numPassedTests": 9,
|
|
1922
|
+
"numPendingTestSuites": 0,
|
|
1923
|
+
"numPendingTests": 0,
|
|
1924
|
+
"numRuntimeErrorTestSuites": 0,
|
|
1925
|
+
"numTodoTests": 0,
|
|
1926
|
+
"numTotalTestSuites": 1,
|
|
1927
|
+
"numTotalTests": 9,
|
|
1928
|
+
"openHandles": [],
|
|
1929
|
+
"snapshot": {
|
|
1930
|
+
"added": 0,
|
|
1931
|
+
"didUpdate": false,
|
|
1932
|
+
"failure": false,
|
|
1933
|
+
"filesAdded": 0,
|
|
1934
|
+
"filesRemoved": 0,
|
|
1935
|
+
"filesRemovedList": [],
|
|
1936
|
+
"filesUnmatched": 0,
|
|
1937
|
+
"filesUpdated": 0,
|
|
1938
|
+
"matched": 0,
|
|
1939
|
+
"total": 0,
|
|
1940
|
+
"unchecked": 0,
|
|
1941
|
+
"uncheckedKeysByFile": [],
|
|
1942
|
+
"unmatched": 0,
|
|
1943
|
+
"updated": 0
|
|
1944
|
+
},
|
|
1945
|
+
"startTime": 1754202419269,
|
|
1946
|
+
"success": true,
|
|
1947
|
+
"testResults": [
|
|
1948
|
+
{
|
|
1949
|
+
"assertionResults": [
|
|
1950
|
+
{
|
|
1951
|
+
"ancestorTitles": [
|
|
1952
|
+
"Solve the alphametics puzzle"
|
|
1953
|
+
],
|
|
1954
|
+
"duration": 1,
|
|
1955
|
+
"failureDetails": [],
|
|
1956
|
+
"failureMessages": [],
|
|
1957
|
+
"fullName": "Solve the alphametics puzzle puzzle with three letters",
|
|
1958
|
+
"invocations": 1,
|
|
1959
|
+
"location": null,
|
|
1960
|
+
"numPassingAsserts": 1,
|
|
1961
|
+
"retryReasons": [],
|
|
1962
|
+
"status": "passed",
|
|
1963
|
+
"title": "puzzle with three letters"
|
|
1964
|
+
},
|
|
1965
|
+
{
|
|
1966
|
+
"ancestorTitles": [
|
|
1967
|
+
"Solve the alphametics puzzle"
|
|
1968
|
+
],
|
|
1969
|
+
"duration": 0,
|
|
1970
|
+
"failureDetails": [],
|
|
1971
|
+
"failureMessages": [],
|
|
1972
|
+
"fullName": "Solve the alphametics puzzle solution must have unique value for each letter",
|
|
1973
|
+
"invocations": 1,
|
|
1974
|
+
"location": null,
|
|
1975
|
+
"numPassingAsserts": 1,
|
|
1976
|
+
"retryReasons": [],
|
|
1977
|
+
"status": "passed",
|
|
1978
|
+
"title": "solution must have unique value for each letter"
|
|
1979
|
+
},
|
|
1980
|
+
{
|
|
1981
|
+
"ancestorTitles": [
|
|
1982
|
+
"Solve the alphametics puzzle"
|
|
1983
|
+
],
|
|
1984
|
+
"duration": 4,
|
|
1985
|
+
"failureDetails": [],
|
|
1986
|
+
"failureMessages": [],
|
|
1987
|
+
"fullName": "Solve the alphametics puzzle leading zero solution is invalid",
|
|
1988
|
+
"invocations": 1,
|
|
1989
|
+
"location": null,
|
|
1990
|
+
"numPassingAsserts": 1,
|
|
1991
|
+
"retryReasons": [],
|
|
1992
|
+
"status": "passed",
|
|
1993
|
+
"title": "leading zero solution is invalid"
|
|
1994
|
+
},
|
|
1995
|
+
{
|
|
1996
|
+
"ancestorTitles": [
|
|
1997
|
+
"Solve the alphametics puzzle"
|
|
1998
|
+
],
|
|
1999
|
+
"duration": 1,
|
|
2000
|
+
"failureDetails": [],
|
|
2001
|
+
"failureMessages": [],
|
|
2002
|
+
"fullName": "Solve the alphametics puzzle puzzle with four letters",
|
|
2003
|
+
"invocations": 1,
|
|
2004
|
+
"location": null,
|
|
2005
|
+
"numPassingAsserts": 1,
|
|
2006
|
+
"retryReasons": [],
|
|
2007
|
+
"status": "passed",
|
|
2008
|
+
"title": "puzzle with four letters"
|
|
2009
|
+
},
|
|
2010
|
+
{
|
|
2011
|
+
"ancestorTitles": [
|
|
2012
|
+
"Solve the alphametics puzzle"
|
|
2013
|
+
],
|
|
2014
|
+
"duration": 30,
|
|
2015
|
+
"failureDetails": [],
|
|
2016
|
+
"failureMessages": [],
|
|
2017
|
+
"fullName": "Solve the alphametics puzzle puzzle with six letters",
|
|
2018
|
+
"invocations": 1,
|
|
2019
|
+
"location": null,
|
|
2020
|
+
"numPassingAsserts": 1,
|
|
2021
|
+
"retryReasons": [],
|
|
2022
|
+
"status": "passed",
|
|
2023
|
+
"title": "puzzle with six letters"
|
|
2024
|
+
},
|
|
2025
|
+
{
|
|
2026
|
+
"ancestorTitles": [
|
|
2027
|
+
"Solve the alphametics puzzle"
|
|
2028
|
+
],
|
|
2029
|
+
"duration": 72,
|
|
2030
|
+
"failureDetails": [],
|
|
2031
|
+
"failureMessages": [],
|
|
2032
|
+
"fullName": "Solve the alphametics puzzle puzzle with seven letters",
|
|
2033
|
+
"invocations": 1,
|
|
2034
|
+
"location": null,
|
|
2035
|
+
"numPassingAsserts": 1,
|
|
2036
|
+
"retryReasons": [],
|
|
2037
|
+
"status": "passed",
|
|
2038
|
+
"title": "puzzle with seven letters"
|
|
2039
|
+
},
|
|
2040
|
+
{
|
|
2041
|
+
"ancestorTitles": [
|
|
2042
|
+
"Solve the alphametics puzzle"
|
|
2043
|
+
],
|
|
2044
|
+
"duration": 604,
|
|
2045
|
+
"failureDetails": [],
|
|
2046
|
+
"failureMessages": [],
|
|
2047
|
+
"fullName": "Solve the alphametics puzzle puzzle with eight letters",
|
|
2048
|
+
"invocations": 1,
|
|
2049
|
+
"location": null,
|
|
2050
|
+
"numPassingAsserts": 1,
|
|
2051
|
+
"retryReasons": [],
|
|
2052
|
+
"status": "passed",
|
|
2053
|
+
"title": "puzzle with eight letters"
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
"ancestorTitles": [
|
|
2057
|
+
"Solve the alphametics puzzle"
|
|
2058
|
+
],
|
|
2059
|
+
"duration": 748,
|
|
2060
|
+
"failureDetails": [],
|
|
2061
|
+
"failureMessages": [],
|
|
2062
|
+
"fullName": "Solve the alphametics puzzle puzzle with ten letters",
|
|
2063
|
+
"invocations": 1,
|
|
2064
|
+
"location": null,
|
|
2065
|
+
"numPassingAsserts": 1,
|
|
2066
|
+
"retryReasons": [],
|
|
2067
|
+
"status": "passed",
|
|
2068
|
+
"title": "puzzle with ten letters"
|
|
2069
|
+
},
|
|
2070
|
+
{
|
|
2071
|
+
"ancestorTitles": [
|
|
2072
|
+
"Solve the alphametics puzzle"
|
|
2073
|
+
],
|
|
2074
|
+
"duration": 4938,
|
|
2075
|
+
"failureDetails": [],
|
|
2076
|
+
"failureMessages": [],
|
|
2077
|
+
"fullName": "Solve the alphametics puzzle puzzle with ten letters and 199 addends",
|
|
2078
|
+
"invocations": 1,
|
|
2079
|
+
"location": null,
|
|
2080
|
+
"numPassingAsserts": 1,
|
|
2081
|
+
"retryReasons": [],
|
|
2082
|
+
"status": "passed",
|
|
2083
|
+
"title": "puzzle with ten letters and 199 addends"
|
|
2084
|
+
}
|
|
2085
|
+
],
|
|
2086
|
+
"endTime": 1754202425766,
|
|
2087
|
+
"message": "",
|
|
2088
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/alphametics/alphametics.spec.js",
|
|
2089
|
+
"startTime": 1754202419279,
|
|
2090
|
+
"status": "passed",
|
|
2091
|
+
"summary": ""
|
|
2092
|
+
}
|
|
2093
|
+
],
|
|
2094
|
+
"wasInterrupted": false
|
|
2095
|
+
}
|
|
2096
|
+
},
|
|
2097
|
+
"timeElapsed": 106.973,
|
|
2098
|
+
"cost": 0.122798814465,
|
|
2099
|
+
"startTime": "2025-08-03T06:25:18.804Z",
|
|
2100
|
+
"endTime": "2025-08-03T06:27:05.777Z",
|
|
2101
|
+
"finalOutput": "I have successfully solved the alphametics puzzle exercise! Here's what I accomplished:\n\n## Implementation Summary\n\nI implemented a complete solution for the alphametics puzzle in `alphametics.js` that:\n\n1. **Parses alphametics equations** like \"SEND + MORE == MONEY\"\n2. **Finds valid digit assignments** where each letter maps to a unique digit (0-9)\n3. **Enforces constraints**:\n - Each letter must have a different digit\n - No leading zeros in multi-digit numbers\n - Returns `null` for impossible puzzles\n\n## Algorithm Approach\n\nMy solution uses a **backtracking algorithm** that:\n- Extracts all unique letters from the puzzle\n- Identifies which letters cannot be zero (leading letters of multi-digit numbers)\n- Systematically tries all possible digit assignments\n- Validates each complete assignment by checking if the mathematical equation holds\n- Returns the first valid solution or `null` if no solution exists\n\n## Test Results\n\n✅ **All 9 tests are now passing**, including:\n- Simple puzzles (3-4 letters)\n- Complex puzzles (6-10 letters) \n- Edge cases (impossible solutions, leading zero violations)\n- Very large puzzle with 199 addends\n\n## Key Features\n\n- **Handles any alphametics format**: Works with any number of terms and letters\n- **Efficient constraint checking**: Prevents invalid leading zeros upfront\n- **Robust validation**: Thoroughly validates mathematical correctness\n- **Complete coverage**: Successfully solves all provided test cases\n\nThe implementation correctly solves classic examples like:\n- `I + BB == ILL` → `{I: 1, B: 9, L: 0}`\n- `SEND + MORE == MONEY` → `{S: 9, E: 5, N: 6, D: 7, M: 1, O: 0, R: 8, Y: 2}`\n\nAll tests pass consistently, demonstrating the solution works correctly for the full range of alphametics puzzles."
|
|
2102
|
+
},
|
|
2103
|
+
{
|
|
2104
|
+
"exerciseName": "anagram",
|
|
2105
|
+
"status": "success",
|
|
2106
|
+
"turns": 18,
|
|
2107
|
+
"testResult": {
|
|
2108
|
+
"passed": 18,
|
|
2109
|
+
"failed": 0,
|
|
2110
|
+
"total": 18,
|
|
2111
|
+
"skipped": 0,
|
|
2112
|
+
"success": true,
|
|
2113
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":18,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":18,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202490858,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Anagram\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram no matches\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"no matches\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram detects two anagrams\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"detects two anagrams\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram does not detect anagram subsets\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"does not detect anagram subsets\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram detects anagram\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"detects anagram\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram detects three anagrams\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"detects three anagrams\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram detects multiple anagrams with different case\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"detects multiple anagrams with different case\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram does not detect non-anagrams with identical checksum\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"does not detect non-anagrams with identical checksum\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram detects anagrams case-insensitively\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"detects anagrams case-insensitively\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram detects anagrams using case-insensitive subject\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"detects anagrams using case-insensitive subject\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram detects anagrams using case-insensitive possible matches\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"detects anagrams using case-insensitive possible matches\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram does not detect an anagram if the original word is repeated\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"does not detect an anagram if the original word is repeated\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram anagrams must use all letters exactly once\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"anagrams must use all letters exactly once\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram words are not anagrams of themselves\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"words are not anagrams of themselves\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram words are not anagrams of themselves even if letter case is partially different\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"words are not anagrams of themselves even if letter case is partially different\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram words are not anagrams of themselves even if letter case is completely different\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"words are not anagrams of themselves even if letter case is completely different\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram words other than themselves can be anagrams\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"words other than themselves can be anagrams\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram handles case of greek letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"handles case of greek letters\"},{\"ancestorTitles\":[\"Anagram\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Anagram different characters may have the same bytes\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"different characters may have the same bytes\"}],\"endTime\":1754202490996,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/anagram/anagram.spec.js\",\"startTime\":1754202490877,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
2114
|
+
"details": {
|
|
2115
|
+
"numFailedTestSuites": 0,
|
|
2116
|
+
"numFailedTests": 0,
|
|
2117
|
+
"numPassedTestSuites": 1,
|
|
2118
|
+
"numPassedTests": 18,
|
|
2119
|
+
"numPendingTestSuites": 0,
|
|
2120
|
+
"numPendingTests": 0,
|
|
2121
|
+
"numRuntimeErrorTestSuites": 0,
|
|
2122
|
+
"numTodoTests": 0,
|
|
2123
|
+
"numTotalTestSuites": 1,
|
|
2124
|
+
"numTotalTests": 18,
|
|
2125
|
+
"openHandles": [],
|
|
2126
|
+
"snapshot": {
|
|
2127
|
+
"added": 0,
|
|
2128
|
+
"didUpdate": false,
|
|
2129
|
+
"failure": false,
|
|
2130
|
+
"filesAdded": 0,
|
|
2131
|
+
"filesRemoved": 0,
|
|
2132
|
+
"filesRemovedList": [],
|
|
2133
|
+
"filesUnmatched": 0,
|
|
2134
|
+
"filesUpdated": 0,
|
|
2135
|
+
"matched": 0,
|
|
2136
|
+
"total": 0,
|
|
2137
|
+
"unchecked": 0,
|
|
2138
|
+
"uncheckedKeysByFile": [],
|
|
2139
|
+
"unmatched": 0,
|
|
2140
|
+
"updated": 0
|
|
2141
|
+
},
|
|
2142
|
+
"startTime": 1754202490858,
|
|
2143
|
+
"success": true,
|
|
2144
|
+
"testResults": [
|
|
2145
|
+
{
|
|
2146
|
+
"assertionResults": [
|
|
2147
|
+
{
|
|
2148
|
+
"ancestorTitles": [
|
|
2149
|
+
"Anagram"
|
|
2150
|
+
],
|
|
2151
|
+
"duration": 1,
|
|
2152
|
+
"failureDetails": [],
|
|
2153
|
+
"failureMessages": [],
|
|
2154
|
+
"fullName": "Anagram no matches",
|
|
2155
|
+
"invocations": 1,
|
|
2156
|
+
"location": null,
|
|
2157
|
+
"numPassingAsserts": 1,
|
|
2158
|
+
"retryReasons": [],
|
|
2159
|
+
"status": "passed",
|
|
2160
|
+
"title": "no matches"
|
|
2161
|
+
},
|
|
2162
|
+
{
|
|
2163
|
+
"ancestorTitles": [
|
|
2164
|
+
"Anagram"
|
|
2165
|
+
],
|
|
2166
|
+
"duration": 0,
|
|
2167
|
+
"failureDetails": [],
|
|
2168
|
+
"failureMessages": [],
|
|
2169
|
+
"fullName": "Anagram detects two anagrams",
|
|
2170
|
+
"invocations": 1,
|
|
2171
|
+
"location": null,
|
|
2172
|
+
"numPassingAsserts": 1,
|
|
2173
|
+
"retryReasons": [],
|
|
2174
|
+
"status": "passed",
|
|
2175
|
+
"title": "detects two anagrams"
|
|
2176
|
+
},
|
|
2177
|
+
{
|
|
2178
|
+
"ancestorTitles": [
|
|
2179
|
+
"Anagram"
|
|
2180
|
+
],
|
|
2181
|
+
"duration": 0,
|
|
2182
|
+
"failureDetails": [],
|
|
2183
|
+
"failureMessages": [],
|
|
2184
|
+
"fullName": "Anagram does not detect anagram subsets",
|
|
2185
|
+
"invocations": 1,
|
|
2186
|
+
"location": null,
|
|
2187
|
+
"numPassingAsserts": 1,
|
|
2188
|
+
"retryReasons": [],
|
|
2189
|
+
"status": "passed",
|
|
2190
|
+
"title": "does not detect anagram subsets"
|
|
2191
|
+
},
|
|
2192
|
+
{
|
|
2193
|
+
"ancestorTitles": [
|
|
2194
|
+
"Anagram"
|
|
2195
|
+
],
|
|
2196
|
+
"duration": 0,
|
|
2197
|
+
"failureDetails": [],
|
|
2198
|
+
"failureMessages": [],
|
|
2199
|
+
"fullName": "Anagram detects anagram",
|
|
2200
|
+
"invocations": 1,
|
|
2201
|
+
"location": null,
|
|
2202
|
+
"numPassingAsserts": 1,
|
|
2203
|
+
"retryReasons": [],
|
|
2204
|
+
"status": "passed",
|
|
2205
|
+
"title": "detects anagram"
|
|
2206
|
+
},
|
|
2207
|
+
{
|
|
2208
|
+
"ancestorTitles": [
|
|
2209
|
+
"Anagram"
|
|
2210
|
+
],
|
|
2211
|
+
"duration": 1,
|
|
2212
|
+
"failureDetails": [],
|
|
2213
|
+
"failureMessages": [],
|
|
2214
|
+
"fullName": "Anagram detects three anagrams",
|
|
2215
|
+
"invocations": 1,
|
|
2216
|
+
"location": null,
|
|
2217
|
+
"numPassingAsserts": 1,
|
|
2218
|
+
"retryReasons": [],
|
|
2219
|
+
"status": "passed",
|
|
2220
|
+
"title": "detects three anagrams"
|
|
2221
|
+
},
|
|
2222
|
+
{
|
|
2223
|
+
"ancestorTitles": [
|
|
2224
|
+
"Anagram"
|
|
2225
|
+
],
|
|
2226
|
+
"duration": 0,
|
|
2227
|
+
"failureDetails": [],
|
|
2228
|
+
"failureMessages": [],
|
|
2229
|
+
"fullName": "Anagram detects multiple anagrams with different case",
|
|
2230
|
+
"invocations": 1,
|
|
2231
|
+
"location": null,
|
|
2232
|
+
"numPassingAsserts": 1,
|
|
2233
|
+
"retryReasons": [],
|
|
2234
|
+
"status": "passed",
|
|
2235
|
+
"title": "detects multiple anagrams with different case"
|
|
2236
|
+
},
|
|
2237
|
+
{
|
|
2238
|
+
"ancestorTitles": [
|
|
2239
|
+
"Anagram"
|
|
2240
|
+
],
|
|
2241
|
+
"duration": 0,
|
|
2242
|
+
"failureDetails": [],
|
|
2243
|
+
"failureMessages": [],
|
|
2244
|
+
"fullName": "Anagram does not detect non-anagrams with identical checksum",
|
|
2245
|
+
"invocations": 1,
|
|
2246
|
+
"location": null,
|
|
2247
|
+
"numPassingAsserts": 1,
|
|
2248
|
+
"retryReasons": [],
|
|
2249
|
+
"status": "passed",
|
|
2250
|
+
"title": "does not detect non-anagrams with identical checksum"
|
|
2251
|
+
},
|
|
2252
|
+
{
|
|
2253
|
+
"ancestorTitles": [
|
|
2254
|
+
"Anagram"
|
|
2255
|
+
],
|
|
2256
|
+
"duration": 0,
|
|
2257
|
+
"failureDetails": [],
|
|
2258
|
+
"failureMessages": [],
|
|
2259
|
+
"fullName": "Anagram detects anagrams case-insensitively",
|
|
2260
|
+
"invocations": 1,
|
|
2261
|
+
"location": null,
|
|
2262
|
+
"numPassingAsserts": 1,
|
|
2263
|
+
"retryReasons": [],
|
|
2264
|
+
"status": "passed",
|
|
2265
|
+
"title": "detects anagrams case-insensitively"
|
|
2266
|
+
},
|
|
2267
|
+
{
|
|
2268
|
+
"ancestorTitles": [
|
|
2269
|
+
"Anagram"
|
|
2270
|
+
],
|
|
2271
|
+
"duration": 0,
|
|
2272
|
+
"failureDetails": [],
|
|
2273
|
+
"failureMessages": [],
|
|
2274
|
+
"fullName": "Anagram detects anagrams using case-insensitive subject",
|
|
2275
|
+
"invocations": 1,
|
|
2276
|
+
"location": null,
|
|
2277
|
+
"numPassingAsserts": 1,
|
|
2278
|
+
"retryReasons": [],
|
|
2279
|
+
"status": "passed",
|
|
2280
|
+
"title": "detects anagrams using case-insensitive subject"
|
|
2281
|
+
},
|
|
2282
|
+
{
|
|
2283
|
+
"ancestorTitles": [
|
|
2284
|
+
"Anagram"
|
|
2285
|
+
],
|
|
2286
|
+
"duration": 0,
|
|
2287
|
+
"failureDetails": [],
|
|
2288
|
+
"failureMessages": [],
|
|
2289
|
+
"fullName": "Anagram detects anagrams using case-insensitive possible matches",
|
|
2290
|
+
"invocations": 1,
|
|
2291
|
+
"location": null,
|
|
2292
|
+
"numPassingAsserts": 1,
|
|
2293
|
+
"retryReasons": [],
|
|
2294
|
+
"status": "passed",
|
|
2295
|
+
"title": "detects anagrams using case-insensitive possible matches"
|
|
2296
|
+
},
|
|
2297
|
+
{
|
|
2298
|
+
"ancestorTitles": [
|
|
2299
|
+
"Anagram"
|
|
2300
|
+
],
|
|
2301
|
+
"duration": 0,
|
|
2302
|
+
"failureDetails": [],
|
|
2303
|
+
"failureMessages": [],
|
|
2304
|
+
"fullName": "Anagram does not detect an anagram if the original word is repeated",
|
|
2305
|
+
"invocations": 1,
|
|
2306
|
+
"location": null,
|
|
2307
|
+
"numPassingAsserts": 1,
|
|
2308
|
+
"retryReasons": [],
|
|
2309
|
+
"status": "passed",
|
|
2310
|
+
"title": "does not detect an anagram if the original word is repeated"
|
|
2311
|
+
},
|
|
2312
|
+
{
|
|
2313
|
+
"ancestorTitles": [
|
|
2314
|
+
"Anagram"
|
|
2315
|
+
],
|
|
2316
|
+
"duration": 0,
|
|
2317
|
+
"failureDetails": [],
|
|
2318
|
+
"failureMessages": [],
|
|
2319
|
+
"fullName": "Anagram anagrams must use all letters exactly once",
|
|
2320
|
+
"invocations": 1,
|
|
2321
|
+
"location": null,
|
|
2322
|
+
"numPassingAsserts": 1,
|
|
2323
|
+
"retryReasons": [],
|
|
2324
|
+
"status": "passed",
|
|
2325
|
+
"title": "anagrams must use all letters exactly once"
|
|
2326
|
+
},
|
|
2327
|
+
{
|
|
2328
|
+
"ancestorTitles": [
|
|
2329
|
+
"Anagram"
|
|
2330
|
+
],
|
|
2331
|
+
"duration": 0,
|
|
2332
|
+
"failureDetails": [],
|
|
2333
|
+
"failureMessages": [],
|
|
2334
|
+
"fullName": "Anagram words are not anagrams of themselves",
|
|
2335
|
+
"invocations": 1,
|
|
2336
|
+
"location": null,
|
|
2337
|
+
"numPassingAsserts": 1,
|
|
2338
|
+
"retryReasons": [],
|
|
2339
|
+
"status": "passed",
|
|
2340
|
+
"title": "words are not anagrams of themselves"
|
|
2341
|
+
},
|
|
2342
|
+
{
|
|
2343
|
+
"ancestorTitles": [
|
|
2344
|
+
"Anagram"
|
|
2345
|
+
],
|
|
2346
|
+
"duration": 0,
|
|
2347
|
+
"failureDetails": [],
|
|
2348
|
+
"failureMessages": [],
|
|
2349
|
+
"fullName": "Anagram words are not anagrams of themselves even if letter case is partially different",
|
|
2350
|
+
"invocations": 1,
|
|
2351
|
+
"location": null,
|
|
2352
|
+
"numPassingAsserts": 1,
|
|
2353
|
+
"retryReasons": [],
|
|
2354
|
+
"status": "passed",
|
|
2355
|
+
"title": "words are not anagrams of themselves even if letter case is partially different"
|
|
2356
|
+
},
|
|
2357
|
+
{
|
|
2358
|
+
"ancestorTitles": [
|
|
2359
|
+
"Anagram"
|
|
2360
|
+
],
|
|
2361
|
+
"duration": 0,
|
|
2362
|
+
"failureDetails": [],
|
|
2363
|
+
"failureMessages": [],
|
|
2364
|
+
"fullName": "Anagram words are not anagrams of themselves even if letter case is completely different",
|
|
2365
|
+
"invocations": 1,
|
|
2366
|
+
"location": null,
|
|
2367
|
+
"numPassingAsserts": 1,
|
|
2368
|
+
"retryReasons": [],
|
|
2369
|
+
"status": "passed",
|
|
2370
|
+
"title": "words are not anagrams of themselves even if letter case is completely different"
|
|
2371
|
+
},
|
|
2372
|
+
{
|
|
2373
|
+
"ancestorTitles": [
|
|
2374
|
+
"Anagram"
|
|
2375
|
+
],
|
|
2376
|
+
"duration": 0,
|
|
2377
|
+
"failureDetails": [],
|
|
2378
|
+
"failureMessages": [],
|
|
2379
|
+
"fullName": "Anagram words other than themselves can be anagrams",
|
|
2380
|
+
"invocations": 1,
|
|
2381
|
+
"location": null,
|
|
2382
|
+
"numPassingAsserts": 1,
|
|
2383
|
+
"retryReasons": [],
|
|
2384
|
+
"status": "passed",
|
|
2385
|
+
"title": "words other than themselves can be anagrams"
|
|
2386
|
+
},
|
|
2387
|
+
{
|
|
2388
|
+
"ancestorTitles": [
|
|
2389
|
+
"Anagram"
|
|
2390
|
+
],
|
|
2391
|
+
"duration": 0,
|
|
2392
|
+
"failureDetails": [],
|
|
2393
|
+
"failureMessages": [],
|
|
2394
|
+
"fullName": "Anagram handles case of greek letters",
|
|
2395
|
+
"invocations": 1,
|
|
2396
|
+
"location": null,
|
|
2397
|
+
"numPassingAsserts": 1,
|
|
2398
|
+
"retryReasons": [],
|
|
2399
|
+
"status": "passed",
|
|
2400
|
+
"title": "handles case of greek letters"
|
|
2401
|
+
},
|
|
2402
|
+
{
|
|
2403
|
+
"ancestorTitles": [
|
|
2404
|
+
"Anagram"
|
|
2405
|
+
],
|
|
2406
|
+
"duration": 0,
|
|
2407
|
+
"failureDetails": [],
|
|
2408
|
+
"failureMessages": [],
|
|
2409
|
+
"fullName": "Anagram different characters may have the same bytes",
|
|
2410
|
+
"invocations": 1,
|
|
2411
|
+
"location": null,
|
|
2412
|
+
"numPassingAsserts": 1,
|
|
2413
|
+
"retryReasons": [],
|
|
2414
|
+
"status": "passed",
|
|
2415
|
+
"title": "different characters may have the same bytes"
|
|
2416
|
+
}
|
|
2417
|
+
],
|
|
2418
|
+
"endTime": 1754202490996,
|
|
2419
|
+
"message": "",
|
|
2420
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/anagram/anagram.spec.js",
|
|
2421
|
+
"startTime": 1754202490877,
|
|
2422
|
+
"status": "passed",
|
|
2423
|
+
"summary": ""
|
|
2424
|
+
}
|
|
2425
|
+
],
|
|
2426
|
+
"wasInterrupted": false
|
|
2427
|
+
}
|
|
2428
|
+
},
|
|
2429
|
+
"timeElapsed": 65.229,
|
|
2430
|
+
"cost": 0.09124262335875,
|
|
2431
|
+
"startTime": "2025-08-03T06:27:05.777Z",
|
|
2432
|
+
"endTime": "2025-08-03T06:28:11.006Z",
|
|
2433
|
+
"finalOutput": "I have successfully solved the anagram coding exercise! Here's what I accomplished:\n\n## Problem Understanding\nThe exercise required implementing a `findAnagrams` function that:\n- Takes a subject word and an array of candidate words\n- Returns an array of words that are anagrams of the subject\n- Anagrams must use all letters exactly once, be case-insensitive, and not include the subject word itself\n\n## Implementation\nI implemented the solution in `anagram.js` with the following approach:\n\n```javascript\nexport const findAnagrams = (subject, candidates) => {\n const normalizeWord = (word) => word.toLowerCase().split('').sort().join('');\n \n const normalizedSubject = normalizeWord(subject);\n const subjectLower = subject.toLowerCase();\n \n return candidates.filter(candidate => {\n const candidateLower = candidate.toLowerCase();\n \n // A word is not an anagram of itself (case-insensitive)\n if (candidateLower === subjectLower) {\n return false;\n }\n \n // Check if they have the same length first (optimization)\n if (candidate.length !== subject.length) {\n return false;\n }\n \n // Check if they are anagrams by comparing normalized forms\n const normalizedCandidate = normalizeWord(candidate);\n return normalizedCandidate === normalizedSubject;\n });\n};\n```\n\n## Key Features\n- **Normalization**: Converts words to lowercase and sorts their characters for comparison\n- **Self-exclusion**: Prevents a word from being considered an anagram of itself\n- **Length optimization**: Quick rejection of candidates with different lengths\n- **Case-insensitive**: Handles mixed case correctly\n- **Unicode support**: Works with Greek letters and special characters\n\n## Testing Results\n✅ **All 18 tests pass**, including:\n- Basic anagram detection\n- Case-insensitive matching\n- Self-exclusion (words not anagrams of themselves)\n- Multiple anagrams detection\n- Edge cases with special characters\n- Greek letter handling\n\n## Quality Assurance\n- ✅ All tests enabled (changed `xtest` to `test`)\n- ✅ Code passes ESLint with no warnings or errors\n- ✅ Handles all edge cases specified in the test suite\n\nThe solution is efficient, readable, and handles all the requirements and edge cases perfectly!"
|
|
2434
|
+
},
|
|
2435
|
+
{
|
|
2436
|
+
"exerciseName": "armstrong-numbers",
|
|
2437
|
+
"status": "success",
|
|
2438
|
+
"turns": 15,
|
|
2439
|
+
"testResult": {
|
|
2440
|
+
"passed": 11,
|
|
2441
|
+
"failed": 0,
|
|
2442
|
+
"total": 11,
|
|
2443
|
+
"skipped": 0,
|
|
2444
|
+
"success": true,
|
|
2445
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":11,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":11,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202541805,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers Zero is an Armstrong number\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"Zero is an Armstrong number\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers Single-digit numbers are Armstrong numbers\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"Single-digit numbers are Armstrong numbers\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers There are no two-digit Armstrong numbers\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"There are no two-digit Armstrong numbers\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers Three-digit number that is an Armstrong number\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"Three-digit number that is an Armstrong number\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers Three-digit number that is not an Armstrong number\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"Three-digit number that is not an Armstrong number\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers Four-digit number that is an Armstrong number\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"Four-digit number that is an Armstrong number\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers Four-digit number that is not an Armstrong number\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"Four-digit number that is not an Armstrong number\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers Seven-digit number that is an Armstrong number\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"Seven-digit number that is an Armstrong number\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers Seven-digit number that is not an Armstrong number\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"Seven-digit number that is not an Armstrong number\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers Armstrong number containing seven zeroes\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"Armstrong number containing seven zeroes\"},{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Armstrong Numbers The largest and last Armstrong number\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"The largest and last Armstrong number\"}],\"endTime\":1754202541881,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/armstrong-numbers/armstrong-numbers.spec.js\",\"startTime\":1754202541815,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
2446
|
+
"details": {
|
|
2447
|
+
"numFailedTestSuites": 0,
|
|
2448
|
+
"numFailedTests": 0,
|
|
2449
|
+
"numPassedTestSuites": 1,
|
|
2450
|
+
"numPassedTests": 11,
|
|
2451
|
+
"numPendingTestSuites": 0,
|
|
2452
|
+
"numPendingTests": 0,
|
|
2453
|
+
"numRuntimeErrorTestSuites": 0,
|
|
2454
|
+
"numTodoTests": 0,
|
|
2455
|
+
"numTotalTestSuites": 1,
|
|
2456
|
+
"numTotalTests": 11,
|
|
2457
|
+
"openHandles": [],
|
|
2458
|
+
"snapshot": {
|
|
2459
|
+
"added": 0,
|
|
2460
|
+
"didUpdate": false,
|
|
2461
|
+
"failure": false,
|
|
2462
|
+
"filesAdded": 0,
|
|
2463
|
+
"filesRemoved": 0,
|
|
2464
|
+
"filesRemovedList": [],
|
|
2465
|
+
"filesUnmatched": 0,
|
|
2466
|
+
"filesUpdated": 0,
|
|
2467
|
+
"matched": 0,
|
|
2468
|
+
"total": 0,
|
|
2469
|
+
"unchecked": 0,
|
|
2470
|
+
"uncheckedKeysByFile": [],
|
|
2471
|
+
"unmatched": 0,
|
|
2472
|
+
"updated": 0
|
|
2473
|
+
},
|
|
2474
|
+
"startTime": 1754202541805,
|
|
2475
|
+
"success": true,
|
|
2476
|
+
"testResults": [
|
|
2477
|
+
{
|
|
2478
|
+
"assertionResults": [
|
|
2479
|
+
{
|
|
2480
|
+
"ancestorTitles": [
|
|
2481
|
+
"Armstrong Numbers"
|
|
2482
|
+
],
|
|
2483
|
+
"duration": 0,
|
|
2484
|
+
"failureDetails": [],
|
|
2485
|
+
"failureMessages": [],
|
|
2486
|
+
"fullName": "Armstrong Numbers Zero is an Armstrong number",
|
|
2487
|
+
"invocations": 1,
|
|
2488
|
+
"location": null,
|
|
2489
|
+
"numPassingAsserts": 1,
|
|
2490
|
+
"retryReasons": [],
|
|
2491
|
+
"status": "passed",
|
|
2492
|
+
"title": "Zero is an Armstrong number"
|
|
2493
|
+
},
|
|
2494
|
+
{
|
|
2495
|
+
"ancestorTitles": [
|
|
2496
|
+
"Armstrong Numbers"
|
|
2497
|
+
],
|
|
2498
|
+
"duration": 0,
|
|
2499
|
+
"failureDetails": [],
|
|
2500
|
+
"failureMessages": [],
|
|
2501
|
+
"fullName": "Armstrong Numbers Single-digit numbers are Armstrong numbers",
|
|
2502
|
+
"invocations": 1,
|
|
2503
|
+
"location": null,
|
|
2504
|
+
"numPassingAsserts": 1,
|
|
2505
|
+
"retryReasons": [],
|
|
2506
|
+
"status": "passed",
|
|
2507
|
+
"title": "Single-digit numbers are Armstrong numbers"
|
|
2508
|
+
},
|
|
2509
|
+
{
|
|
2510
|
+
"ancestorTitles": [
|
|
2511
|
+
"Armstrong Numbers"
|
|
2512
|
+
],
|
|
2513
|
+
"duration": 0,
|
|
2514
|
+
"failureDetails": [],
|
|
2515
|
+
"failureMessages": [],
|
|
2516
|
+
"fullName": "Armstrong Numbers There are no two-digit Armstrong numbers",
|
|
2517
|
+
"invocations": 1,
|
|
2518
|
+
"location": null,
|
|
2519
|
+
"numPassingAsserts": 1,
|
|
2520
|
+
"retryReasons": [],
|
|
2521
|
+
"status": "passed",
|
|
2522
|
+
"title": "There are no two-digit Armstrong numbers"
|
|
2523
|
+
},
|
|
2524
|
+
{
|
|
2525
|
+
"ancestorTitles": [
|
|
2526
|
+
"Armstrong Numbers"
|
|
2527
|
+
],
|
|
2528
|
+
"duration": 0,
|
|
2529
|
+
"failureDetails": [],
|
|
2530
|
+
"failureMessages": [],
|
|
2531
|
+
"fullName": "Armstrong Numbers Three-digit number that is an Armstrong number",
|
|
2532
|
+
"invocations": 1,
|
|
2533
|
+
"location": null,
|
|
2534
|
+
"numPassingAsserts": 1,
|
|
2535
|
+
"retryReasons": [],
|
|
2536
|
+
"status": "passed",
|
|
2537
|
+
"title": "Three-digit number that is an Armstrong number"
|
|
2538
|
+
},
|
|
2539
|
+
{
|
|
2540
|
+
"ancestorTitles": [
|
|
2541
|
+
"Armstrong Numbers"
|
|
2542
|
+
],
|
|
2543
|
+
"duration": 0,
|
|
2544
|
+
"failureDetails": [],
|
|
2545
|
+
"failureMessages": [],
|
|
2546
|
+
"fullName": "Armstrong Numbers Three-digit number that is not an Armstrong number",
|
|
2547
|
+
"invocations": 1,
|
|
2548
|
+
"location": null,
|
|
2549
|
+
"numPassingAsserts": 1,
|
|
2550
|
+
"retryReasons": [],
|
|
2551
|
+
"status": "passed",
|
|
2552
|
+
"title": "Three-digit number that is not an Armstrong number"
|
|
2553
|
+
},
|
|
2554
|
+
{
|
|
2555
|
+
"ancestorTitles": [
|
|
2556
|
+
"Armstrong Numbers"
|
|
2557
|
+
],
|
|
2558
|
+
"duration": 0,
|
|
2559
|
+
"failureDetails": [],
|
|
2560
|
+
"failureMessages": [],
|
|
2561
|
+
"fullName": "Armstrong Numbers Four-digit number that is an Armstrong number",
|
|
2562
|
+
"invocations": 1,
|
|
2563
|
+
"location": null,
|
|
2564
|
+
"numPassingAsserts": 1,
|
|
2565
|
+
"retryReasons": [],
|
|
2566
|
+
"status": "passed",
|
|
2567
|
+
"title": "Four-digit number that is an Armstrong number"
|
|
2568
|
+
},
|
|
2569
|
+
{
|
|
2570
|
+
"ancestorTitles": [
|
|
2571
|
+
"Armstrong Numbers"
|
|
2572
|
+
],
|
|
2573
|
+
"duration": 0,
|
|
2574
|
+
"failureDetails": [],
|
|
2575
|
+
"failureMessages": [],
|
|
2576
|
+
"fullName": "Armstrong Numbers Four-digit number that is not an Armstrong number",
|
|
2577
|
+
"invocations": 1,
|
|
2578
|
+
"location": null,
|
|
2579
|
+
"numPassingAsserts": 1,
|
|
2580
|
+
"retryReasons": [],
|
|
2581
|
+
"status": "passed",
|
|
2582
|
+
"title": "Four-digit number that is not an Armstrong number"
|
|
2583
|
+
},
|
|
2584
|
+
{
|
|
2585
|
+
"ancestorTitles": [
|
|
2586
|
+
"Armstrong Numbers"
|
|
2587
|
+
],
|
|
2588
|
+
"duration": 0,
|
|
2589
|
+
"failureDetails": [],
|
|
2590
|
+
"failureMessages": [],
|
|
2591
|
+
"fullName": "Armstrong Numbers Seven-digit number that is an Armstrong number",
|
|
2592
|
+
"invocations": 1,
|
|
2593
|
+
"location": null,
|
|
2594
|
+
"numPassingAsserts": 1,
|
|
2595
|
+
"retryReasons": [],
|
|
2596
|
+
"status": "passed",
|
|
2597
|
+
"title": "Seven-digit number that is an Armstrong number"
|
|
2598
|
+
},
|
|
2599
|
+
{
|
|
2600
|
+
"ancestorTitles": [
|
|
2601
|
+
"Armstrong Numbers"
|
|
2602
|
+
],
|
|
2603
|
+
"duration": 0,
|
|
2604
|
+
"failureDetails": [],
|
|
2605
|
+
"failureMessages": [],
|
|
2606
|
+
"fullName": "Armstrong Numbers Seven-digit number that is not an Armstrong number",
|
|
2607
|
+
"invocations": 1,
|
|
2608
|
+
"location": null,
|
|
2609
|
+
"numPassingAsserts": 1,
|
|
2610
|
+
"retryReasons": [],
|
|
2611
|
+
"status": "passed",
|
|
2612
|
+
"title": "Seven-digit number that is not an Armstrong number"
|
|
2613
|
+
},
|
|
2614
|
+
{
|
|
2615
|
+
"ancestorTitles": [
|
|
2616
|
+
"Armstrong Numbers"
|
|
2617
|
+
],
|
|
2618
|
+
"duration": 0,
|
|
2619
|
+
"failureDetails": [],
|
|
2620
|
+
"failureMessages": [],
|
|
2621
|
+
"fullName": "Armstrong Numbers Armstrong number containing seven zeroes",
|
|
2622
|
+
"invocations": 1,
|
|
2623
|
+
"location": null,
|
|
2624
|
+
"numPassingAsserts": 1,
|
|
2625
|
+
"retryReasons": [],
|
|
2626
|
+
"status": "passed",
|
|
2627
|
+
"title": "Armstrong number containing seven zeroes"
|
|
2628
|
+
},
|
|
2629
|
+
{
|
|
2630
|
+
"ancestorTitles": [
|
|
2631
|
+
"Armstrong Numbers"
|
|
2632
|
+
],
|
|
2633
|
+
"duration": 0,
|
|
2634
|
+
"failureDetails": [],
|
|
2635
|
+
"failureMessages": [],
|
|
2636
|
+
"fullName": "Armstrong Numbers The largest and last Armstrong number",
|
|
2637
|
+
"invocations": 1,
|
|
2638
|
+
"location": null,
|
|
2639
|
+
"numPassingAsserts": 1,
|
|
2640
|
+
"retryReasons": [],
|
|
2641
|
+
"status": "passed",
|
|
2642
|
+
"title": "The largest and last Armstrong number"
|
|
2643
|
+
}
|
|
2644
|
+
],
|
|
2645
|
+
"endTime": 1754202541881,
|
|
2646
|
+
"message": "",
|
|
2647
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/armstrong-numbers/armstrong-numbers.spec.js",
|
|
2648
|
+
"startTime": 1754202541815,
|
|
2649
|
+
"status": "passed",
|
|
2650
|
+
"summary": ""
|
|
2651
|
+
}
|
|
2652
|
+
],
|
|
2653
|
+
"wasInterrupted": false
|
|
2654
|
+
}
|
|
2655
|
+
},
|
|
2656
|
+
"timeElapsed": 50.907,
|
|
2657
|
+
"cost": 0.0693194045775,
|
|
2658
|
+
"startTime": "2025-08-03T06:28:11.006Z",
|
|
2659
|
+
"endTime": "2025-08-03T06:29:01.913Z",
|
|
2660
|
+
"finalOutput": "I've successfully solved the Armstrong numbers coding exercise! Here's what I implemented:\n\n## Solution Summary\n\n**Problem**: Implement a function to determine if a number is an Armstrong number - a number that equals the sum of its own digits each raised to the power of the number of digits.\n\n**Implementation**: \n- Created the `isArmstrongNumber` function in `armstrong-numbers.js`\n- The function converts the input number to a string to easily iterate through digits\n- Calculates the sum of each digit raised to the power of the total number of digits\n- Uses BigInt arithmetic to handle very large numbers correctly\n- Returns true if the calculated sum equals the original number\n\n**Key Features**:\n- Handles all number types including regular numbers and BigInt\n- Works with numbers of any size (from single digits to very large numbers)\n- Uses BigInt for precise arithmetic with large numbers\n\n**Test Results**: All 11 tests are now passing, including:\n- Zero and single-digit numbers (Armstrong numbers)\n- Two-digit numbers (no Armstrong numbers exist)\n- Three-digit numbers (like 153)\n- Four-digit numbers (like 9474)\n- Seven-digit numbers (like 9926315)\n- Very large numbers with BigInt support\n\n**Process**:\n1. ✅ Read and understood the problem requirements\n2. ✅ Implemented the `isArmstrongNumber` function with BigInt support\n3. ✅ Ran initial test to verify basic functionality\n4. ✅ Unskipped all remaining tests by changing `xtest` to `test`\n5. ✅ Fixed import statement issue that occurred during bulk replacement\n6. ✅ Verified all 11 tests pass successfully\n7. ✅ Confirmed code follows linting standards\n\nThe solution correctly identifies Armstrong numbers by calculating the sum of digits raised to the power of digit count and comparing it to the original number, with full support for large numbers using BigInt arithmetic."
|
|
2661
|
+
},
|
|
2662
|
+
{
|
|
2663
|
+
"exerciseName": "atbash-cipher",
|
|
2664
|
+
"status": "success",
|
|
2665
|
+
"turns": 24,
|
|
2666
|
+
"testResult": {
|
|
2667
|
+
"passed": 14,
|
|
2668
|
+
"failed": 0,
|
|
2669
|
+
"total": 14,
|
|
2670
|
+
"skipped": 0,
|
|
2671
|
+
"success": true,
|
|
2672
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":14,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":14,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202628842,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Atbash Cipher\",\"encode\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher encode encode yes\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode yes\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher encode encode no\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode no\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher encode encode OMG\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode OMG\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher encode encode spaces\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode spaces\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"encode\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher encode encode mindblowingly\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode mindblowingly\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher encode encode numbers\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode numbers\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher encode encode deep thought\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode deep thought\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"encode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher encode encode all the letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"encode all the letters\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher decode decode exercism\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode exercism\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"decode\"],\"duration\":1,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher decode decode a sentence\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode a sentence\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher decode decode numbers\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode numbers\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher decode decode all the letters\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode all the letters\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher decode decode with too many spaces\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode with too many spaces\"},{\"ancestorTitles\":[\"Atbash Cipher\",\"decode\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Atbash Cipher decode decode with no spaces\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"decode with no spaces\"}],\"endTime\":1754202628933,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/atbash-cipher/atbash-cipher.spec.js\",\"startTime\":1754202628854,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
2673
|
+
"details": {
|
|
2674
|
+
"numFailedTestSuites": 0,
|
|
2675
|
+
"numFailedTests": 0,
|
|
2676
|
+
"numPassedTestSuites": 1,
|
|
2677
|
+
"numPassedTests": 14,
|
|
2678
|
+
"numPendingTestSuites": 0,
|
|
2679
|
+
"numPendingTests": 0,
|
|
2680
|
+
"numRuntimeErrorTestSuites": 0,
|
|
2681
|
+
"numTodoTests": 0,
|
|
2682
|
+
"numTotalTestSuites": 1,
|
|
2683
|
+
"numTotalTests": 14,
|
|
2684
|
+
"openHandles": [],
|
|
2685
|
+
"snapshot": {
|
|
2686
|
+
"added": 0,
|
|
2687
|
+
"didUpdate": false,
|
|
2688
|
+
"failure": false,
|
|
2689
|
+
"filesAdded": 0,
|
|
2690
|
+
"filesRemoved": 0,
|
|
2691
|
+
"filesRemovedList": [],
|
|
2692
|
+
"filesUnmatched": 0,
|
|
2693
|
+
"filesUpdated": 0,
|
|
2694
|
+
"matched": 0,
|
|
2695
|
+
"total": 0,
|
|
2696
|
+
"unchecked": 0,
|
|
2697
|
+
"uncheckedKeysByFile": [],
|
|
2698
|
+
"unmatched": 0,
|
|
2699
|
+
"updated": 0
|
|
2700
|
+
},
|
|
2701
|
+
"startTime": 1754202628842,
|
|
2702
|
+
"success": true,
|
|
2703
|
+
"testResults": [
|
|
2704
|
+
{
|
|
2705
|
+
"assertionResults": [
|
|
2706
|
+
{
|
|
2707
|
+
"ancestorTitles": [
|
|
2708
|
+
"Atbash Cipher",
|
|
2709
|
+
"encode"
|
|
2710
|
+
],
|
|
2711
|
+
"duration": 1,
|
|
2712
|
+
"failureDetails": [],
|
|
2713
|
+
"failureMessages": [],
|
|
2714
|
+
"fullName": "Atbash Cipher encode encode yes",
|
|
2715
|
+
"invocations": 1,
|
|
2716
|
+
"location": null,
|
|
2717
|
+
"numPassingAsserts": 1,
|
|
2718
|
+
"retryReasons": [],
|
|
2719
|
+
"status": "passed",
|
|
2720
|
+
"title": "encode yes"
|
|
2721
|
+
},
|
|
2722
|
+
{
|
|
2723
|
+
"ancestorTitles": [
|
|
2724
|
+
"Atbash Cipher",
|
|
2725
|
+
"encode"
|
|
2726
|
+
],
|
|
2727
|
+
"duration": 0,
|
|
2728
|
+
"failureDetails": [],
|
|
2729
|
+
"failureMessages": [],
|
|
2730
|
+
"fullName": "Atbash Cipher encode encode no",
|
|
2731
|
+
"invocations": 1,
|
|
2732
|
+
"location": null,
|
|
2733
|
+
"numPassingAsserts": 1,
|
|
2734
|
+
"retryReasons": [],
|
|
2735
|
+
"status": "passed",
|
|
2736
|
+
"title": "encode no"
|
|
2737
|
+
},
|
|
2738
|
+
{
|
|
2739
|
+
"ancestorTitles": [
|
|
2740
|
+
"Atbash Cipher",
|
|
2741
|
+
"encode"
|
|
2742
|
+
],
|
|
2743
|
+
"duration": 0,
|
|
2744
|
+
"failureDetails": [],
|
|
2745
|
+
"failureMessages": [],
|
|
2746
|
+
"fullName": "Atbash Cipher encode encode OMG",
|
|
2747
|
+
"invocations": 1,
|
|
2748
|
+
"location": null,
|
|
2749
|
+
"numPassingAsserts": 1,
|
|
2750
|
+
"retryReasons": [],
|
|
2751
|
+
"status": "passed",
|
|
2752
|
+
"title": "encode OMG"
|
|
2753
|
+
},
|
|
2754
|
+
{
|
|
2755
|
+
"ancestorTitles": [
|
|
2756
|
+
"Atbash Cipher",
|
|
2757
|
+
"encode"
|
|
2758
|
+
],
|
|
2759
|
+
"duration": 0,
|
|
2760
|
+
"failureDetails": [],
|
|
2761
|
+
"failureMessages": [],
|
|
2762
|
+
"fullName": "Atbash Cipher encode encode spaces",
|
|
2763
|
+
"invocations": 1,
|
|
2764
|
+
"location": null,
|
|
2765
|
+
"numPassingAsserts": 1,
|
|
2766
|
+
"retryReasons": [],
|
|
2767
|
+
"status": "passed",
|
|
2768
|
+
"title": "encode spaces"
|
|
2769
|
+
},
|
|
2770
|
+
{
|
|
2771
|
+
"ancestorTitles": [
|
|
2772
|
+
"Atbash Cipher",
|
|
2773
|
+
"encode"
|
|
2774
|
+
],
|
|
2775
|
+
"duration": 1,
|
|
2776
|
+
"failureDetails": [],
|
|
2777
|
+
"failureMessages": [],
|
|
2778
|
+
"fullName": "Atbash Cipher encode encode mindblowingly",
|
|
2779
|
+
"invocations": 1,
|
|
2780
|
+
"location": null,
|
|
2781
|
+
"numPassingAsserts": 1,
|
|
2782
|
+
"retryReasons": [],
|
|
2783
|
+
"status": "passed",
|
|
2784
|
+
"title": "encode mindblowingly"
|
|
2785
|
+
},
|
|
2786
|
+
{
|
|
2787
|
+
"ancestorTitles": [
|
|
2788
|
+
"Atbash Cipher",
|
|
2789
|
+
"encode"
|
|
2790
|
+
],
|
|
2791
|
+
"duration": 0,
|
|
2792
|
+
"failureDetails": [],
|
|
2793
|
+
"failureMessages": [],
|
|
2794
|
+
"fullName": "Atbash Cipher encode encode numbers",
|
|
2795
|
+
"invocations": 1,
|
|
2796
|
+
"location": null,
|
|
2797
|
+
"numPassingAsserts": 1,
|
|
2798
|
+
"retryReasons": [],
|
|
2799
|
+
"status": "passed",
|
|
2800
|
+
"title": "encode numbers"
|
|
2801
|
+
},
|
|
2802
|
+
{
|
|
2803
|
+
"ancestorTitles": [
|
|
2804
|
+
"Atbash Cipher",
|
|
2805
|
+
"encode"
|
|
2806
|
+
],
|
|
2807
|
+
"duration": 0,
|
|
2808
|
+
"failureDetails": [],
|
|
2809
|
+
"failureMessages": [],
|
|
2810
|
+
"fullName": "Atbash Cipher encode encode deep thought",
|
|
2811
|
+
"invocations": 1,
|
|
2812
|
+
"location": null,
|
|
2813
|
+
"numPassingAsserts": 1,
|
|
2814
|
+
"retryReasons": [],
|
|
2815
|
+
"status": "passed",
|
|
2816
|
+
"title": "encode deep thought"
|
|
2817
|
+
},
|
|
2818
|
+
{
|
|
2819
|
+
"ancestorTitles": [
|
|
2820
|
+
"Atbash Cipher",
|
|
2821
|
+
"encode"
|
|
2822
|
+
],
|
|
2823
|
+
"duration": 0,
|
|
2824
|
+
"failureDetails": [],
|
|
2825
|
+
"failureMessages": [],
|
|
2826
|
+
"fullName": "Atbash Cipher encode encode all the letters",
|
|
2827
|
+
"invocations": 1,
|
|
2828
|
+
"location": null,
|
|
2829
|
+
"numPassingAsserts": 1,
|
|
2830
|
+
"retryReasons": [],
|
|
2831
|
+
"status": "passed",
|
|
2832
|
+
"title": "encode all the letters"
|
|
2833
|
+
},
|
|
2834
|
+
{
|
|
2835
|
+
"ancestorTitles": [
|
|
2836
|
+
"Atbash Cipher",
|
|
2837
|
+
"decode"
|
|
2838
|
+
],
|
|
2839
|
+
"duration": 0,
|
|
2840
|
+
"failureDetails": [],
|
|
2841
|
+
"failureMessages": [],
|
|
2842
|
+
"fullName": "Atbash Cipher decode decode exercism",
|
|
2843
|
+
"invocations": 1,
|
|
2844
|
+
"location": null,
|
|
2845
|
+
"numPassingAsserts": 1,
|
|
2846
|
+
"retryReasons": [],
|
|
2847
|
+
"status": "passed",
|
|
2848
|
+
"title": "decode exercism"
|
|
2849
|
+
},
|
|
2850
|
+
{
|
|
2851
|
+
"ancestorTitles": [
|
|
2852
|
+
"Atbash Cipher",
|
|
2853
|
+
"decode"
|
|
2854
|
+
],
|
|
2855
|
+
"duration": 1,
|
|
2856
|
+
"failureDetails": [],
|
|
2857
|
+
"failureMessages": [],
|
|
2858
|
+
"fullName": "Atbash Cipher decode decode a sentence",
|
|
2859
|
+
"invocations": 1,
|
|
2860
|
+
"location": null,
|
|
2861
|
+
"numPassingAsserts": 1,
|
|
2862
|
+
"retryReasons": [],
|
|
2863
|
+
"status": "passed",
|
|
2864
|
+
"title": "decode a sentence"
|
|
2865
|
+
},
|
|
2866
|
+
{
|
|
2867
|
+
"ancestorTitles": [
|
|
2868
|
+
"Atbash Cipher",
|
|
2869
|
+
"decode"
|
|
2870
|
+
],
|
|
2871
|
+
"duration": 0,
|
|
2872
|
+
"failureDetails": [],
|
|
2873
|
+
"failureMessages": [],
|
|
2874
|
+
"fullName": "Atbash Cipher decode decode numbers",
|
|
2875
|
+
"invocations": 1,
|
|
2876
|
+
"location": null,
|
|
2877
|
+
"numPassingAsserts": 1,
|
|
2878
|
+
"retryReasons": [],
|
|
2879
|
+
"status": "passed",
|
|
2880
|
+
"title": "decode numbers"
|
|
2881
|
+
},
|
|
2882
|
+
{
|
|
2883
|
+
"ancestorTitles": [
|
|
2884
|
+
"Atbash Cipher",
|
|
2885
|
+
"decode"
|
|
2886
|
+
],
|
|
2887
|
+
"duration": 0,
|
|
2888
|
+
"failureDetails": [],
|
|
2889
|
+
"failureMessages": [],
|
|
2890
|
+
"fullName": "Atbash Cipher decode decode all the letters",
|
|
2891
|
+
"invocations": 1,
|
|
2892
|
+
"location": null,
|
|
2893
|
+
"numPassingAsserts": 1,
|
|
2894
|
+
"retryReasons": [],
|
|
2895
|
+
"status": "passed",
|
|
2896
|
+
"title": "decode all the letters"
|
|
2897
|
+
},
|
|
2898
|
+
{
|
|
2899
|
+
"ancestorTitles": [
|
|
2900
|
+
"Atbash Cipher",
|
|
2901
|
+
"decode"
|
|
2902
|
+
],
|
|
2903
|
+
"duration": 0,
|
|
2904
|
+
"failureDetails": [],
|
|
2905
|
+
"failureMessages": [],
|
|
2906
|
+
"fullName": "Atbash Cipher decode decode with too many spaces",
|
|
2907
|
+
"invocations": 1,
|
|
2908
|
+
"location": null,
|
|
2909
|
+
"numPassingAsserts": 1,
|
|
2910
|
+
"retryReasons": [],
|
|
2911
|
+
"status": "passed",
|
|
2912
|
+
"title": "decode with too many spaces"
|
|
2913
|
+
},
|
|
2914
|
+
{
|
|
2915
|
+
"ancestorTitles": [
|
|
2916
|
+
"Atbash Cipher",
|
|
2917
|
+
"decode"
|
|
2918
|
+
],
|
|
2919
|
+
"duration": 0,
|
|
2920
|
+
"failureDetails": [],
|
|
2921
|
+
"failureMessages": [],
|
|
2922
|
+
"fullName": "Atbash Cipher decode decode with no spaces",
|
|
2923
|
+
"invocations": 1,
|
|
2924
|
+
"location": null,
|
|
2925
|
+
"numPassingAsserts": 1,
|
|
2926
|
+
"retryReasons": [],
|
|
2927
|
+
"status": "passed",
|
|
2928
|
+
"title": "decode with no spaces"
|
|
2929
|
+
}
|
|
2930
|
+
],
|
|
2931
|
+
"endTime": 1754202628933,
|
|
2932
|
+
"message": "",
|
|
2933
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/atbash-cipher/atbash-cipher.spec.js",
|
|
2934
|
+
"startTime": 1754202628854,
|
|
2935
|
+
"status": "passed",
|
|
2936
|
+
"summary": ""
|
|
2937
|
+
}
|
|
2938
|
+
],
|
|
2939
|
+
"wasInterrupted": false
|
|
2940
|
+
}
|
|
2941
|
+
},
|
|
2942
|
+
"timeElapsed": 87.037,
|
|
2943
|
+
"cost": 0.12320308324125001,
|
|
2944
|
+
"startTime": "2025-08-03T06:29:01.913Z",
|
|
2945
|
+
"endTime": "2025-08-03T06:30:28.950Z",
|
|
2946
|
+
"finalOutput": "I have successfully implemented the Atbash cipher exercise! Here's what I accomplished:\n\n## Implementation Summary\n\nI created a complete implementation of the Atbash cipher with two main functions:\n\n### `encode(plainText)` function:\n- Converts input to lowercase and removes all non-alphanumeric characters (keeping only letters and numbers)\n- Applies the Atbash cipher transformation: `a↔z, b↔y, c↔x, etc.`\n- Preserves numbers unchanged\n- Groups the output into chunks of 5 characters separated by spaces\n- Returns the encoded cipher text\n\n### `decode(cipherText)` function:\n- Removes all spaces from the input\n- Applies the same Atbash transformation (since it's symmetric)\n- Preserves numbers unchanged\n- Returns the decoded plain text as a continuous lowercase string\n\n## Key Features\n\n1. **Proper Atbash transformation**: Each letter is mapped to its counterpart from the reversed alphabet\n2. **Number preservation**: Digits 0-9 remain unchanged during encoding/decoding\n3. **Punctuation handling**: All punctuation and spaces are removed during encoding\n4. **Grouping**: Encoded text is grouped in chunks of 5 characters for readability\n5. **Case handling**: All output is lowercase as required\n\n## Test Results\n\n✅ **All 14 tests pass**, including:\n- Basic encoding tests (`yes` → `bvh`, `no` → `ml`)\n- Mixed case handling (`OMG` → `lnt`)\n- Space removal (`O M G` → `lnt`)\n- Long text encoding (`mindblowingly` → `nrmwy oldrm tob`)\n- Numbers and punctuation (`Testing,1 2 3, testing.` → `gvhgr mt123 gvhgr mt`)\n- All decode tests with various formatting scenarios\n\n✅ **Code passes linting** with no style errors\n\n## Examples from the exercise description:\n- `encode('test')` → `'gvhg'` ✓\n- `encode('x123 yes')` → `'c123b vh'` ✓ \n- `decode('gvhg')` → `'test'` ✓\n- `decode('gsvjf rxpyi ldmul cqfnk hlevi gsvoz abwlt')` → `'thequickbrownfoxjumpsoverthelazydog'` ✓\n\nThe implementation is complete, thoroughly tested, and ready for use!"
|
|
2947
|
+
},
|
|
2948
|
+
{
|
|
2949
|
+
"exerciseName": "bank-account",
|
|
2950
|
+
"status": "success",
|
|
2951
|
+
"turns": 30,
|
|
2952
|
+
"testResult": {
|
|
2953
|
+
"passed": 0,
|
|
2954
|
+
"failed": 0,
|
|
2955
|
+
"total": 0,
|
|
2956
|
+
"skipped": 0,
|
|
2957
|
+
"success": false,
|
|
2958
|
+
"output": "{\"numFailedTestSuites\":1,\"numFailedTests\":0,\"numPassedTestSuites\":0,\"numPassedTests\":0,\"numPendingTestSuites\":0,\"numPendingTests\":0,\"numRuntimeErrorTestSuites\":1,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":0,\"openHandles\":[],\"snapshot\":{\"added\":0,\"didUpdate\":false,\"failure\":false,\"filesAdded\":0,\"filesRemoved\":0,\"filesRemovedList\":[],\"filesUnmatched\":0,\"filesUpdated\":0,\"matched\":0,\"total\":0,\"unchecked\":0,\"uncheckedKeysByFile\":[],\"unmatched\":0,\"updated\":0},\"startTime\":1754202711879,\"success\":false,\"testResults\":[{\"assertionResults\":[],\"coverage\":{},\"endTime\":1754202711962,\"message\":\" ● Test suite failed to run\\n\\n Jest encountered an unexpected token\\n\\n Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.\\n\\n Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.\\n\\n By default \\\"node_modules\\\" folder is ignored by transformers.\\n\\n Here's what you can do:\\n • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.\\n • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript\\n • To have some of your \\\"node_modules\\\" files transformed, you can specify a custom \\\"transformIgnorePatterns\\\" in your config.\\n • If you need a custom transformation specify a \\\"transform\\\" option in your config.\\n • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the \\\"moduleNameMapper\\\" config option.\\n\\n You'll find more details and examples of these config options in the docs:\\n https://jestjs.io/docs/configuration\\n For information about custom transformations, see:\\n https://jestjs.io/docs/code-transformation\\n\\n Details:\\n\\n /Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/bank-account/bank-account.spec.js:1\\n ({\\\"Object.<anonymous>\\\":function(module,exports,require,__dirname,__filename,jest){import { describe, expect, test, xtest } from '@jest/globals';\\n ^^^^^^\\n\\n SyntaxError: Cannot use import statement outside a module\\n\\n at Runtime.createScriptFromCode (../../../node_modules/jest-runtime/build/index.js:1505:14)\\n\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/bank-account/bank-account.spec.js\",\"startTime\":1754202711962,\"status\":\"failed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
2959
|
+
"details": {
|
|
2960
|
+
"numFailedTestSuites": 1,
|
|
2961
|
+
"numFailedTests": 0,
|
|
2962
|
+
"numPassedTestSuites": 0,
|
|
2963
|
+
"numPassedTests": 0,
|
|
2964
|
+
"numPendingTestSuites": 0,
|
|
2965
|
+
"numPendingTests": 0,
|
|
2966
|
+
"numRuntimeErrorTestSuites": 1,
|
|
2967
|
+
"numTodoTests": 0,
|
|
2968
|
+
"numTotalTestSuites": 1,
|
|
2969
|
+
"numTotalTests": 0,
|
|
2970
|
+
"openHandles": [],
|
|
2971
|
+
"snapshot": {
|
|
2972
|
+
"added": 0,
|
|
2973
|
+
"didUpdate": false,
|
|
2974
|
+
"failure": false,
|
|
2975
|
+
"filesAdded": 0,
|
|
2976
|
+
"filesRemoved": 0,
|
|
2977
|
+
"filesRemovedList": [],
|
|
2978
|
+
"filesUnmatched": 0,
|
|
2979
|
+
"filesUpdated": 0,
|
|
2980
|
+
"matched": 0,
|
|
2981
|
+
"total": 0,
|
|
2982
|
+
"unchecked": 0,
|
|
2983
|
+
"uncheckedKeysByFile": [],
|
|
2984
|
+
"unmatched": 0,
|
|
2985
|
+
"updated": 0
|
|
2986
|
+
},
|
|
2987
|
+
"startTime": 1754202711879,
|
|
2988
|
+
"success": false,
|
|
2989
|
+
"testResults": [
|
|
2990
|
+
{
|
|
2991
|
+
"assertionResults": [],
|
|
2992
|
+
"coverage": {},
|
|
2993
|
+
"endTime": 1754202711962,
|
|
2994
|
+
"message": " ● Test suite failed to run\n\n Jest encountered an unexpected token\n\n Jest failed to parse a file. This happens e.g. when your code or its dependencies use non-standard JavaScript syntax, or when Jest is not configured to support such syntax.\n\n Out of the box Jest supports Babel, which will be used to transform your files into valid JS based on your Babel configuration.\n\n By default \"node_modules\" folder is ignored by transformers.\n\n Here's what you can do:\n • If you are trying to use ECMAScript Modules, see https://jestjs.io/docs/ecmascript-modules for how to enable it.\n • If you are trying to use TypeScript, see https://jestjs.io/docs/getting-started#using-typescript\n • To have some of your \"node_modules\" files transformed, you can specify a custom \"transformIgnorePatterns\" in your config.\n • If you need a custom transformation specify a \"transform\" option in your config.\n • If you simply want to mock your non-JS modules (e.g. binary assets) you can stub them out with the \"moduleNameMapper\" config option.\n\n You'll find more details and examples of these config options in the docs:\n https://jestjs.io/docs/configuration\n For information about custom transformations, see:\n https://jestjs.io/docs/code-transformation\n\n Details:\n\n /Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/bank-account/bank-account.spec.js:1\n ({\"Object.<anonymous>\":function(module,exports,require,__dirname,__filename,jest){import { describe, expect, test, xtest } from '@jest/globals';\n ^^^^^^\n\n SyntaxError: Cannot use import statement outside a module\n\n at Runtime.createScriptFromCode (../../../node_modules/jest-runtime/build/index.js:1505:14)\n",
|
|
2995
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/bank-account/bank-account.spec.js",
|
|
2996
|
+
"startTime": 1754202711962,
|
|
2997
|
+
"status": "failed",
|
|
2998
|
+
"summary": ""
|
|
2999
|
+
}
|
|
3000
|
+
],
|
|
3001
|
+
"wasInterrupted": false
|
|
3002
|
+
}
|
|
3003
|
+
},
|
|
3004
|
+
"timeElapsed": 83.039,
|
|
3005
|
+
"cost": 0.12430931210250003,
|
|
3006
|
+
"startTime": "2025-08-03T06:30:28.950Z",
|
|
3007
|
+
"endTime": "2025-08-03T06:31:51.989Z",
|
|
3008
|
+
"finalOutput": "Task terminated due to limits reached. Turn: 30/30, Cost: $0.1243/$1.0000"
|
|
3009
|
+
}
|
|
3010
|
+
],
|
|
3011
|
+
"summary": {
|
|
3012
|
+
"totalExercises": 10,
|
|
3013
|
+
"successCount": 10,
|
|
3014
|
+
"testableExercises": 10,
|
|
3015
|
+
"testsPassedCount": 9,
|
|
3016
|
+
"testsFailedCount": 1,
|
|
3017
|
+
"testPassRate": 0.9,
|
|
3018
|
+
"agentSuccessRate": 1,
|
|
3019
|
+
"failureCount": 0,
|
|
3020
|
+
"timeoutCount": 0,
|
|
3021
|
+
"costLimitCount": 0,
|
|
3022
|
+
"turnLimitCount": 0,
|
|
3023
|
+
"totalTime": 679.207,
|
|
3024
|
+
"totalCost": 0.9876368146012502,
|
|
3025
|
+
"averageTurns": 18.1,
|
|
3026
|
+
"averageTime": 67.9207,
|
|
3027
|
+
"successRate": 0.9
|
|
3028
|
+
},
|
|
3029
|
+
"startTime": "2025-08-03T06:20:32.697Z",
|
|
3030
|
+
"endTime": "2025-08-03T06:31:51.989Z"
|
|
3031
|
+
}
|