@tyvm/knowhow 0.0.47 → 0.0.49
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/benchmarks/results/27b0a06/2025-09-27/xai/xai-grok-code-fast-1.json +2909 -0
- package/benchmarks/results/4057aed/2025-08-14/anthropic/anthropic-claude-sonnet-4-20250514.json +1671 -0
- package/jest.config.js +2 -2
- package/package.json +8 -3
- package/src/agents/base/base.ts +39 -25
- package/src/agents/patcher/patcher.ts +26 -5
- package/src/agents/tools/agentCall.ts +4 -2
- package/src/agents/tools/aiClient.ts +3 -11
- package/src/agents/tools/ast/astAppendNode.ts +90 -0
- package/src/agents/tools/ast/astDeleteNode.ts +88 -0
- package/src/agents/tools/ast/astEditNode.ts +95 -0
- package/src/agents/tools/ast/astGetPathForLine.ts +73 -0
- package/src/agents/tools/ast/astListPaths.ts +66 -0
- package/src/agents/tools/ast/index.ts +7 -0
- package/src/agents/tools/callPlugin.ts +8 -2
- package/src/agents/tools/embeddingSearch.ts +2 -1
- package/src/agents/tools/execCommand.ts +239 -94
- package/src/agents/tools/fileSearch.ts +15 -17
- package/src/agents/tools/index.ts +1 -0
- package/src/agents/tools/language/definitions.ts +10 -2
- package/src/agents/tools/language/index.ts +3 -2
- package/src/agents/tools/lintFile.ts +4 -2
- package/src/agents/tools/list.ts +203 -62
- package/src/agents/tools/patch.ts +48 -14
- package/src/agents/tools/readBlocks.ts +34 -0
- package/src/agents/tools/readFile.ts +23 -0
- package/src/agents/tools/stringReplace.ts +33 -9
- package/src/agents/tools/writeFile.ts +55 -0
- package/src/agents/tools/ycmd/server.ts +14 -4
- package/src/chat/CliChatService.ts +6 -1
- package/src/chat/modules/AgentModule.ts +129 -67
- package/src/chat/modules/AskModule.ts +0 -1
- package/src/chat/modules/SetupModule.ts +4 -4
- package/src/chat/modules/SystemModule.ts +28 -5
- package/src/chat/types.ts +2 -0
- package/src/chat-old.ts +2 -2
- package/src/clients/anthropic.ts +22 -1
- package/src/clients/openai.ts +1 -1
- package/src/clients/xai.ts +15 -5
- package/src/config.ts +17 -5
- package/src/dataset/diffs/generate.ts +2 -2
- package/src/dataset/diffs/jsonl.ts +0 -1
- package/src/embeddings.ts +8 -8
- package/src/index.ts +11 -5
- package/src/plugins/GitPlugin.ts +530 -0
- package/src/plugins/LinterPlugin.ts +89 -0
- package/src/plugins/PluginBase.ts +4 -2
- package/src/plugins/asana.ts +4 -2
- package/src/plugins/downloader/plugin.ts +5 -2
- package/src/plugins/embedding.ts +24 -4
- package/src/plugins/figma.ts +7 -3
- package/src/plugins/github.ts +4 -2
- package/src/plugins/jira.ts +4 -2
- package/src/plugins/language.ts +134 -27
- package/src/plugins/linear.ts +4 -2
- package/src/plugins/notion.ts +4 -2
- package/src/plugins/plugins.ts +27 -16
- package/src/plugins/tree-sitter/editor.ts +369 -0
- package/src/plugins/tree-sitter/lang-packs/index.ts +23 -0
- package/src/plugins/tree-sitter/lang-packs/java.ts +59 -0
- package/src/plugins/tree-sitter/lang-packs/javascript.ts +57 -0
- package/src/plugins/tree-sitter/lang-packs/python.ts +45 -0
- package/src/plugins/tree-sitter/lang-packs/types.ts +79 -0
- package/src/plugins/tree-sitter/lang-packs/typescript.ts +49 -0
- package/src/plugins/tree-sitter/parser.ts +444 -0
- package/src/plugins/tree-sitter/simple-paths.ts +467 -0
- package/src/plugins/types.ts +11 -0
- package/src/plugins/url.ts +5 -3
- package/src/plugins/vim.ts +8 -5
- package/src/processors/CustomVariables.ts +60 -70
- package/src/processors/TokenCompressor.ts +15 -14
- package/src/processors/ToolResponseCache.ts +20 -14
- package/src/services/EmbeddingService.ts +18 -9
- package/src/services/EventService.ts +80 -0
- package/src/services/Mcp.ts +5 -0
- package/src/services/S3.ts +4 -3
- package/src/services/Tools.ts +125 -53
- package/src/services/index.ts +16 -11
- package/src/services/types.ts +3 -3
- package/src/types.ts +7 -2
- package/src/worker.ts +14 -1
- package/test-comprehensive.ts +31 -0
- package/tests/clients/AIClient.test.ts +490 -0
- package/tests/manual/agent-events/run-test.ts +203 -0
- package/tests/{integration → manual/file-edits}/figma.test.ts +1 -1
- package/tests/{integration → manual/file-edits}/fileblocks/readwrite.test.ts +7 -3
- package/tests/{integration → manual/file-edits}/patching.test.ts +11 -8
- package/tests/plugins/language/languagePlugin-content-triggers.test.ts +332 -0
- package/tests/plugins/language/languagePlugin-integration.test.ts +456 -0
- package/tests/plugins/language/languagePlugin.test.ts +363 -0
- package/tests/processors/Base64ImageDetector.test.ts +403 -0
- package/tests/processors/CustomVariables.test.ts +485 -0
- package/tests/processors/HarmonyToolProcessor.test.ts +490 -0
- package/tests/processors/TokenCompressor.test.ts +390 -0
- package/tests/processors/ToolResponseCache.test.ts +736 -0
- package/tests/services/Tools.test.ts +1339 -0
- package/tests/test.spec.ts +162 -117
- package/tests/tree-sitter/editor.test.ts +113 -0
- package/tests/tree-sitter/invalid.test.ts +299 -0
- package/tests/tree-sitter/paths/common-edits.test.ts +564 -0
- package/tests/tree-sitter/paths/debug-exact-position.test.ts +44 -0
- package/tests/tree-sitter/paths/debug-line-indexing.test.ts +49 -0
- package/tests/tree-sitter/paths/debug-paths.test.ts +90 -0
- package/tests/tree-sitter/paths/paths.test.ts +170 -0
- package/tests/tree-sitter/paths/simple-paths.test.ts +367 -0
- package/tests/tree-sitter/sample-after.ts +48 -0
- package/tests/tree-sitter/sample-before.ts +25 -0
- package/tests/tree-sitter/test-files/completely-broken.ts +7 -0
- package/tests/tree-sitter/test-files/duplicate-braces.ts +39 -0
- package/tests/tree-sitter/test-files/invalid-nesting.ts +39 -0
- package/tests/tree-sitter/test-files/malformed-signature.ts +39 -0
- package/tests/tree-sitter/test-files/mismatched-parens.ts +39 -0
- package/tests/tree-sitter/test-files/missing-semicolon.ts +39 -0
- package/tests/tree-sitter/test-files/partially-broken.ts +20 -0
- package/tests/tree-sitter/test-files/specific-errors.ts +14 -0
- package/tests/tree-sitter/test-files/unclosed-string.ts +39 -0
- package/tests/tree-sitter/tree-sitter.test.ts +251 -0
- package/ts_build/package.json +8 -3
- package/ts_build/src/agents/base/base.d.ts +7 -2
- package/ts_build/src/agents/base/base.js +27 -21
- package/ts_build/src/agents/base/base.js.map +1 -1
- package/ts_build/src/agents/patcher/patcher.js +26 -5
- package/ts_build/src/agents/patcher/patcher.js.map +1 -1
- package/ts_build/src/agents/tools/agentCall.js +2 -1
- package/ts_build/src/agents/tools/agentCall.js.map +1 -1
- package/ts_build/src/agents/tools/aiClient.d.ts +7 -8
- package/ts_build/src/agents/tools/aiClient.js.map +1 -1
- package/ts_build/src/agents/tools/ast/astAppendNode.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astAppendNode.js +96 -0
- package/ts_build/src/agents/tools/ast/astAppendNode.js.map +1 -0
- package/ts_build/src/agents/tools/ast/astDeleteNode.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astDeleteNode.js +94 -0
- package/ts_build/src/agents/tools/ast/astDeleteNode.js.map +1 -0
- package/ts_build/src/agents/tools/ast/astEditNode.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astEditNode.js +96 -0
- package/ts_build/src/agents/tools/ast/astEditNode.js.map +1 -0
- package/ts_build/src/agents/tools/ast/astGetPathForLine.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js +78 -0
- package/ts_build/src/agents/tools/ast/astGetPathForLine.js.map +1 -0
- package/ts_build/src/agents/tools/ast/astListPaths.d.ts +1 -0
- package/ts_build/src/agents/tools/ast/astListPaths.js +78 -0
- package/ts_build/src/agents/tools/ast/astListPaths.js.map +1 -0
- package/ts_build/src/agents/tools/ast/index.d.ts +5 -0
- package/ts_build/src/agents/tools/ast/index.js +14 -0
- package/ts_build/src/agents/tools/ast/index.js.map +1 -0
- package/ts_build/src/agents/tools/astAppendNode.d.ts +1 -0
- package/ts_build/src/agents/tools/astAppendNode.js +98 -0
- package/ts_build/src/agents/tools/astAppendNode.js.map +1 -0
- package/ts_build/src/agents/tools/astDeleteNode.d.ts +1 -0
- package/ts_build/src/agents/tools/astDeleteNode.js +95 -0
- package/ts_build/src/agents/tools/astDeleteNode.js.map +1 -0
- package/ts_build/src/agents/tools/astEditNode.d.ts +1 -0
- package/ts_build/src/agents/tools/astEditNode.js +98 -0
- package/ts_build/src/agents/tools/astEditNode.js.map +1 -0
- package/ts_build/src/agents/tools/astGetPathForLine.d.ts +1 -0
- package/ts_build/src/agents/tools/astGetPathForLine.js +89 -0
- package/ts_build/src/agents/tools/astGetPathForLine.js.map +1 -0
- package/ts_build/src/agents/tools/astListPaths.d.ts +1 -0
- package/ts_build/src/agents/tools/astListPaths.js +82 -0
- package/ts_build/src/agents/tools/astListPaths.js.map +1 -0
- package/ts_build/src/agents/tools/callPlugin.js +4 -2
- package/ts_build/src/agents/tools/callPlugin.js.map +1 -1
- package/ts_build/src/agents/tools/embeddingSearch.js +3 -2
- package/ts_build/src/agents/tools/embeddingSearch.js.map +1 -1
- package/ts_build/src/agents/tools/execCommand.d.ts +2 -2
- package/ts_build/src/agents/tools/execCommand.js +201 -67
- package/ts_build/src/agents/tools/execCommand.js.map +1 -1
- package/ts_build/src/agents/tools/fileSearch.d.ts +1 -1
- package/ts_build/src/agents/tools/fileSearch.js +11 -15
- package/ts_build/src/agents/tools/fileSearch.js.map +1 -1
- package/ts_build/src/agents/tools/github/index.d.ts +1 -1
- package/ts_build/src/agents/tools/index.d.ts +1 -0
- package/ts_build/src/agents/tools/index.js +1 -0
- package/ts_build/src/agents/tools/index.js.map +1 -1
- package/ts_build/src/agents/tools/language/definitions.js +11 -2
- package/ts_build/src/agents/tools/language/definitions.js.map +1 -1
- package/ts_build/src/agents/tools/language/index.js +4 -3
- package/ts_build/src/agents/tools/language/index.js.map +1 -1
- package/ts_build/src/agents/tools/lintFile.js +4 -2
- package/ts_build/src/agents/tools/lintFile.js.map +1 -1
- package/ts_build/src/agents/tools/list.js +185 -49
- package/ts_build/src/agents/tools/list.js.map +1 -1
- package/ts_build/src/agents/tools/patch.js +33 -10
- package/ts_build/src/agents/tools/patch.js.map +1 -1
- package/ts_build/src/agents/tools/readBlocks.js +23 -0
- package/ts_build/src/agents/tools/readBlocks.js.map +1 -1
- package/ts_build/src/agents/tools/readFile.js +14 -0
- package/ts_build/src/agents/tools/readFile.js.map +1 -1
- package/ts_build/src/agents/tools/stringReplace.js +19 -2
- package/ts_build/src/agents/tools/stringReplace.js.map +1 -1
- package/ts_build/src/agents/tools/writeFile.js +40 -0
- package/ts_build/src/agents/tools/writeFile.js.map +1 -1
- package/ts_build/src/agents/tools/ycmd/server.js +5 -0
- package/ts_build/src/agents/tools/ycmd/server.js.map +1 -1
- package/ts_build/src/chat/CliChatService.d.ts +1 -0
- package/ts_build/src/chat/CliChatService.js +6 -2
- package/ts_build/src/chat/CliChatService.js.map +1 -1
- package/ts_build/src/chat/modules/AgentModule.d.ts +5 -1
- package/ts_build/src/chat/modules/AgentModule.js +62 -32
- package/ts_build/src/chat/modules/AgentModule.js.map +1 -1
- package/ts_build/src/chat/modules/AskModule.js.map +1 -1
- package/ts_build/src/chat/modules/SetupModule.js +4 -3
- package/ts_build/src/chat/modules/SetupModule.js.map +1 -1
- package/ts_build/src/chat/modules/SystemModule.js +19 -4
- package/ts_build/src/chat/modules/SystemModule.js.map +1 -1
- package/ts_build/src/chat/modules/index.d.ts +5 -0
- package/ts_build/src/chat/modules/index.js +14 -0
- package/ts_build/src/chat/modules/index.js.map +1 -0
- package/ts_build/src/chat/types.d.ts +2 -0
- package/ts_build/src/chat-old.js +3 -3
- package/ts_build/src/chat-old.js.map +1 -1
- package/ts_build/src/clients/anthropic.d.ts +1 -0
- package/ts_build/src/clients/anthropic.js +22 -1
- package/ts_build/src/clients/anthropic.js.map +1 -1
- package/ts_build/src/clients/openai.js +1 -1
- package/ts_build/src/clients/openai.js.map +1 -1
- package/ts_build/src/clients/xai.d.ts +7 -0
- package/ts_build/src/clients/xai.js +13 -4
- package/ts_build/src/clients/xai.js.map +1 -1
- package/ts_build/src/config.js +14 -3
- package/ts_build/src/config.js.map +1 -1
- package/ts_build/src/dataset/diffs/generate.js +2 -2
- package/ts_build/src/dataset/diffs/generate.js.map +1 -1
- package/ts_build/src/dataset/diffs/jsonl.js.map +1 -1
- package/ts_build/src/embeddings.js +9 -13
- package/ts_build/src/embeddings.js.map +1 -1
- package/ts_build/src/index.js +10 -10
- package/ts_build/src/index.js.map +1 -1
- package/ts_build/src/plugins/GitPlugin.d.ts +39 -0
- package/ts_build/src/plugins/GitPlugin.js +439 -0
- package/ts_build/src/plugins/GitPlugin.js.map +1 -0
- package/ts_build/src/plugins/LinterPlugin.d.ts +15 -0
- package/ts_build/src/plugins/LinterPlugin.js +65 -0
- package/ts_build/src/plugins/LinterPlugin.js.map +1 -0
- package/ts_build/src/plugins/PluginBase.d.ts +4 -3
- package/ts_build/src/plugins/PluginBase.js +3 -3
- package/ts_build/src/plugins/PluginBase.js.map +1 -1
- package/ts_build/src/plugins/asana.d.ts +3 -1
- package/ts_build/src/plugins/asana.js +3 -2
- package/ts_build/src/plugins/asana.js.map +1 -1
- package/ts_build/src/plugins/downloader/plugin.d.ts +3 -1
- package/ts_build/src/plugins/downloader/plugin.js +3 -2
- package/ts_build/src/plugins/downloader/plugin.js.map +1 -1
- package/ts_build/src/plugins/embedding.d.ts +5 -1
- package/ts_build/src/plugins/embedding.js +15 -3
- package/ts_build/src/plugins/embedding.js.map +1 -1
- package/ts_build/src/plugins/figma.d.ts +3 -1
- package/ts_build/src/plugins/figma.js +28 -4
- package/ts_build/src/plugins/figma.js.map +1 -1
- package/ts_build/src/plugins/github.d.ts +3 -1
- package/ts_build/src/plugins/github.js +3 -2
- package/ts_build/src/plugins/github.js.map +1 -1
- package/ts_build/src/plugins/jira.d.ts +3 -1
- package/ts_build/src/plugins/jira.js +3 -2
- package/ts_build/src/plugins/jira.js.map +1 -1
- package/ts_build/src/plugins/language.d.ts +7 -4
- package/ts_build/src/plugins/language.js +85 -20
- package/ts_build/src/plugins/language.js.map +1 -1
- package/ts_build/src/plugins/linear.d.ts +3 -1
- package/ts_build/src/plugins/linear.js +3 -2
- package/ts_build/src/plugins/linear.js.map +1 -1
- package/ts_build/src/plugins/notion.d.ts +3 -1
- package/ts_build/src/plugins/notion.js +3 -2
- package/ts_build/src/plugins/notion.js.map +1 -1
- package/ts_build/src/plugins/plugins.d.ts +4 -3
- package/ts_build/src/plugins/plugins.js +24 -14
- package/ts_build/src/plugins/plugins.js.map +1 -1
- package/ts_build/src/plugins/tree-sitter/editor.d.ts +34 -0
- package/ts_build/src/plugins/tree-sitter/editor.js +218 -0
- package/ts_build/src/plugins/tree-sitter/editor.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths-new.d.ts +29 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths-new.js +538 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths-new.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths.d.ts +22 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths.js +332 -0
- package/ts_build/src/plugins/tree-sitter/human-readable-paths.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/index.d.ts +8 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/index.js +26 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/index.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/java.d.ts +2 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/java.js +61 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/java.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/javascript.d.ts +2 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/javascript.js +59 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/javascript.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/python.d.ts +2 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/python.js +47 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/python.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/types.d.ts +43 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/types.js +3 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/types.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/typescript.d.ts +2 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/typescript.js +50 -0
- package/ts_build/src/plugins/tree-sitter/lang-packs/typescript.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/parser.d.ts +75 -0
- package/ts_build/src/plugins/tree-sitter/parser.js +306 -0
- package/ts_build/src/plugins/tree-sitter/parser.js.map +1 -0
- package/ts_build/src/plugins/tree-sitter/simple-paths.d.ts +22 -0
- package/ts_build/src/plugins/tree-sitter/simple-paths.js +332 -0
- package/ts_build/src/plugins/tree-sitter/simple-paths.js.map +1 -0
- package/ts_build/src/plugins/types.d.ts +10 -0
- package/ts_build/src/plugins/url.d.ts +3 -2
- package/ts_build/src/plugins/url.js +3 -2
- package/ts_build/src/plugins/url.js.map +1 -1
- package/ts_build/src/plugins/vim.d.ts +4 -2
- package/ts_build/src/plugins/vim.js +6 -8
- package/ts_build/src/plugins/vim.js.map +1 -1
- package/ts_build/src/processors/CustomVariables.js +45 -47
- package/ts_build/src/processors/CustomVariables.js.map +1 -1
- package/ts_build/src/processors/TokenCompressor.js +10 -13
- package/ts_build/src/processors/TokenCompressor.js.map +1 -1
- package/ts_build/src/processors/ToolResponseCache.d.ts +2 -2
- package/ts_build/src/processors/ToolResponseCache.js +18 -10
- package/ts_build/src/processors/ToolResponseCache.js.map +1 -1
- package/ts_build/src/services/EmbeddingService.d.ts +10 -1
- package/ts_build/src/services/EmbeddingService.js +12 -12
- package/ts_build/src/services/EmbeddingService.js.map +1 -1
- package/ts_build/src/services/EventService.d.ts +7 -0
- package/ts_build/src/services/EventService.js +49 -0
- package/ts_build/src/services/EventService.js.map +1 -1
- package/ts_build/src/services/Mcp.js +8 -0
- package/ts_build/src/services/Mcp.js.map +1 -1
- package/ts_build/src/services/S3.js +4 -3
- package/ts_build/src/services/S3.js.map +1 -1
- package/ts_build/src/services/Tools.d.ts +1 -0
- package/ts_build/src/services/Tools.js +97 -35
- package/ts_build/src/services/Tools.js.map +1 -1
- package/ts_build/src/services/index.d.ts +4 -5
- package/ts_build/src/services/index.js +14 -9
- package/ts_build/src/services/index.js.map +1 -1
- package/ts_build/src/services/types.js +3 -3
- package/ts_build/src/services/types.js.map +1 -1
- package/ts_build/src/types.d.ts +7 -1
- package/ts_build/src/types.js +4 -0
- package/ts_build/src/types.js.map +1 -1
- package/ts_build/src/worker.js +12 -1
- package/ts_build/src/worker.js.map +1 -1
- package/ts_build/tests/clients/AIClient.test.d.ts +1 -0
- package/ts_build/tests/clients/AIClient.test.js +377 -0
- package/ts_build/tests/clients/AIClient.test.js.map +1 -0
- package/ts_build/tests/languagePlugin.test.js +217 -11
- package/ts_build/tests/languagePlugin.test.js.map +1 -1
- package/ts_build/tests/manual/agent-events/event-handler-reliability.test.d.ts +1 -0
- package/ts_build/tests/manual/agent-events/event-handler-reliability.test.js +315 -0
- package/ts_build/tests/manual/agent-events/event-handler-reliability.test.js.map +1 -0
- package/ts_build/tests/manual/agent-events/run-test.d.ts +2 -0
- package/ts_build/tests/manual/agent-events/run-test.js +148 -0
- package/ts_build/tests/manual/agent-events/run-test.js.map +1 -0
- package/ts_build/tests/manual/file-edits/figma.test.d.ts +1 -0
- package/ts_build/tests/manual/file-edits/figma.test.js +47 -0
- package/ts_build/tests/manual/file-edits/figma.test.js.map +1 -0
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.d.ts +1 -0
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js +100 -0
- package/ts_build/tests/manual/file-edits/fileblocks/readwrite.test.js.map +1 -0
- package/ts_build/tests/manual/file-edits/patching.test.d.ts +1 -0
- package/ts_build/tests/manual/file-edits/patching.test.js +119 -0
- package/ts_build/tests/manual/file-edits/patching.test.js.map +1 -0
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.d.ts +1 -0
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js +277 -0
- package/ts_build/tests/plugins/language/languagePlugin-content-triggers.test.js.map +1 -0
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.d.ts +1 -0
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.js +331 -0
- package/ts_build/tests/plugins/language/languagePlugin-integration.test.js.map +1 -0
- package/ts_build/tests/plugins/language/languagePlugin.test.d.ts +1 -0
- package/ts_build/tests/plugins/language/languagePlugin.test.js +286 -0
- package/ts_build/tests/plugins/language/languagePlugin.test.js.map +1 -0
- package/ts_build/tests/processors/Base64ImageDetector.test.d.ts +1 -0
- package/ts_build/tests/processors/Base64ImageDetector.test.js +351 -0
- package/ts_build/tests/processors/Base64ImageDetector.test.js.map +1 -0
- package/ts_build/tests/processors/CustomVariables.test.d.ts +1 -0
- package/ts_build/tests/processors/CustomVariables.test.js +354 -0
- package/ts_build/tests/processors/CustomVariables.test.js.map +1 -0
- package/ts_build/tests/processors/HarmonyToolProcessor.test.d.ts +1 -0
- package/ts_build/tests/processors/HarmonyToolProcessor.test.js +382 -0
- package/ts_build/tests/processors/HarmonyToolProcessor.test.js.map +1 -0
- package/ts_build/tests/processors/TokenCompressor.test.d.ts +1 -0
- package/ts_build/tests/processors/TokenCompressor.test.js +299 -0
- package/ts_build/tests/processors/TokenCompressor.test.js.map +1 -0
- package/ts_build/tests/processors/ToolResponseCache.test.d.ts +1 -0
- package/ts_build/tests/processors/ToolResponseCache.test.js +550 -0
- package/ts_build/tests/processors/ToolResponseCache.test.js.map +1 -0
- package/ts_build/tests/services/Plugins/plugin-event-integration.test.d.ts +1 -0
- package/ts_build/tests/services/Plugins/plugin-event-integration.test.js +232 -0
- package/ts_build/tests/services/Plugins/plugin-event-integration.test.js.map +1 -0
- package/ts_build/tests/services/Tools.test.d.ts +1 -0
- package/ts_build/tests/services/Tools.test.js +1059 -0
- package/ts_build/tests/services/Tools.test.js.map +1 -0
- package/ts_build/tests/test.spec.js +110 -68
- package/ts_build/tests/test.spec.js.map +1 -1
- package/ts_build/tests/tree-sitter/editor.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/editor.test.js +85 -0
- package/ts_build/tests/tree-sitter/editor.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/invalid.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/invalid.test.js +198 -0
- package/ts_build/tests/tree-sitter/invalid.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/common-edits.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/common-edits.test.js +347 -0
- package/ts_build/tests/tree-sitter/paths/common-edits.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-exact-position.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-exact-position.test.js +35 -0
- package/ts_build/tests/tree-sitter/paths/debug-exact-position.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-line-indexing.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-line-indexing.test.js +38 -0
- package/ts_build/tests/tree-sitter/paths/debug-line-indexing.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-paths.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/debug-paths.test.js +74 -0
- package/ts_build/tests/tree-sitter/paths/debug-paths.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/human-readable-paths.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/human-readable-paths.test.js +302 -0
- package/ts_build/tests/tree-sitter/paths/human-readable-paths.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/paths.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/paths.test.js +116 -0
- package/ts_build/tests/tree-sitter/paths/paths.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/paths/simple-paths.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/paths/simple-paths.test.js +302 -0
- package/ts_build/tests/tree-sitter/paths/simple-paths.test.js.map +1 -0
- package/ts_build/tests/tree-sitter/sample-after.d.ts +11 -0
- package/ts_build/tests/tree-sitter/sample-after.js +44 -0
- package/ts_build/tests/tree-sitter/sample-after.js.map +1 -0
- package/ts_build/tests/tree-sitter/sample-before.d.ts +9 -0
- package/ts_build/tests/tree-sitter/sample-before.js +28 -0
- package/ts_build/tests/tree-sitter/sample-before.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/completely-broken.d.ts +2 -0
- package/ts_build/tests/tree-sitter/test-files/completely-broken.js +17 -0
- package/ts_build/tests/tree-sitter/test-files/completely-broken.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/duplicate-braces.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/duplicate-braces.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/duplicate-braces.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/invalid-nesting.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/invalid-nesting.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/invalid-nesting.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/malformed-signature.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/malformed-signature.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/malformed-signature.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/mismatched-parens.d.ts +10 -0
- package/ts_build/tests/tree-sitter/test-files/mismatched-parens.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/mismatched-parens.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/missing-semicolon.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/missing-semicolon.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/missing-semicolon.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/partially-broken.d.ts +6 -0
- package/ts_build/tests/tree-sitter/test-files/partially-broken.js +20 -0
- package/ts_build/tests/tree-sitter/test-files/partially-broken.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/specific-errors.d.ts +7 -0
- package/ts_build/tests/tree-sitter/test-files/specific-errors.js +14 -0
- package/ts_build/tests/tree-sitter/test-files/specific-errors.js.map +1 -0
- package/ts_build/tests/tree-sitter/test-files/unclosed-string.d.ts +8 -0
- package/ts_build/tests/tree-sitter/test-files/unclosed-string.js +38 -0
- package/ts_build/tests/tree-sitter/test-files/unclosed-string.js.map +1 -0
- package/ts_build/tests/tree-sitter/tree-sitter.test.d.ts +1 -0
- package/ts_build/tests/tree-sitter/tree-sitter.test.js +185 -0
- package/ts_build/tests/tree-sitter/tree-sitter.test.js.map +1 -0
- package/tsconfig.json +2 -1
- package/tests/languagePlugin.test.ts +0 -74
- /package/src/chat/modules/{index.js → index.ts} +0 -0
- /package/tests/{integration → manual/file-edits}/patching/input.txt +0 -0
- /package/tests/{integration → manual/file-edits}/patching/output.txt +0 -0
- /package/tests/{integration → manual/file-edits}/patching/patch.txt +0 -0
- /package/tests/{integration → manual/file-edits}/patching/unseen.txt +0 -0
|
@@ -0,0 +1,2909 @@
|
|
|
1
|
+
{
|
|
2
|
+
"config": {
|
|
3
|
+
"language": "javascript",
|
|
4
|
+
"maxExercises": 10,
|
|
5
|
+
"model": "grok-code-fast-1",
|
|
6
|
+
"provider": "xai",
|
|
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": 12,
|
|
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\":1759011080579,\"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\":0,\"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\":1759011080665,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/accumulate/accumulate.spec.js\",\"startTime\":1759011080588,\"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": 1759011080579,
|
|
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": 0,
|
|
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": 1759011080665,
|
|
136
|
+
"message": "",
|
|
137
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/accumulate/accumulate.spec.js",
|
|
138
|
+
"startTime": 1759011080588,
|
|
139
|
+
"status": "passed",
|
|
140
|
+
"summary": ""
|
|
141
|
+
}
|
|
142
|
+
],
|
|
143
|
+
"wasInterrupted": false
|
|
144
|
+
}
|
|
145
|
+
},
|
|
146
|
+
"timeElapsed": 38.984,
|
|
147
|
+
"cost": 0.03314768,
|
|
148
|
+
"startTime": "2025-09-27T22:10:41.702Z",
|
|
149
|
+
"endTime": "2025-09-27T22:11:20.686Z",
|
|
150
|
+
"finalOutput": "I have successfully implemented the `accumulate` function as requested. Here's a summary of what was done:\n\n## Implementation Summary\n\n1. **Understood the Problem**: The `accumulate` function should take a collection (array) and an operation function, apply the operation to each element, and return a new collection with the results. No built-in map functions were allowed.\n\n2. **Implemented the Function**: In `accumulate.js`, I replaced the skeleton with:\n ```javascript\n export const accumulate = (collection, accumulator) => {\n const result = [];\n for (let i = 0; i < collection.length; i++) {\n result.push(accumulator(collection[i]));\n }\n return result;\n };\n ```\n\n3. **Handled Project Setup**: Ran `npm install` to install dependencies, as the project required Babel presets and Jest for testing.\n\n4. **Verified Tests**: Initially, only the empty array test was enabled. After confirming the implementation worked for that, I unskipped the remaining tests by changing `xtest` to `test` in `accumulate.spec.js`.\n\n5. **All Tests Pass**: The final test run shows 5/5 tests passing:\n - Empty collection\n - Squaring numbers\n - Uppercasing strings\n - Reversing strings\n - Recursive accumulation\n\nThe implementation correctly handles all edge cases including empty arrays, different data types, and nested operations without relying on built-in collection mapping functions."
|
|
151
|
+
},
|
|
152
|
+
{
|
|
153
|
+
"exerciseName": "acronym",
|
|
154
|
+
"status": "success",
|
|
155
|
+
"turns": 16,
|
|
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\":1759011128764,\"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\":0,\"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\":1,\"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\":0,\"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\":1759011128884,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/acronym/acronym.spec.js\",\"startTime\":1759011128779,\"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": 1759011128764,
|
|
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": 0,
|
|
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": 1,
|
|
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": 0,
|
|
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": 1759011128884,
|
|
333
|
+
"message": "",
|
|
334
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/acronym/acronym.spec.js",
|
|
335
|
+
"startTime": 1759011128779,
|
|
336
|
+
"status": "passed",
|
|
337
|
+
"summary": ""
|
|
338
|
+
}
|
|
339
|
+
],
|
|
340
|
+
"wasInterrupted": false
|
|
341
|
+
}
|
|
342
|
+
},
|
|
343
|
+
"timeElapsed": 48.191,
|
|
344
|
+
"cost": 0.0479183,
|
|
345
|
+
"startTime": "2025-09-27T22:11:20.702Z",
|
|
346
|
+
"endTime": "2025-09-27T22:12:08.893Z",
|
|
347
|
+
"finalOutput": "I have successfully implemented the acronym converter function. Here's a summary of what was accomplished:\n\n## Implementation Summary\n\n1. **Understood the Requirements**: The function needs to convert phrases to acronyms by taking the first letter of each word, handling hyphens as word separators, and removing other punctuation.\n\n2. **Implemented the `parse` Function**: In `acronym.js`, I created a function that:\n - Replaces hyphens with spaces\n - Removes all non-alphanumeric characters except spaces\n - Splits the string into words\n - Filters out empty strings\n - Takes the first letter of each word, uppercases it, and joins them\n\n3. **Tested the Solution**: \n - Ran `pnpm install` to install dependencies\n - Initially passed the first enabled test\n - Unskipped all remaining tests by changing `xtest` to `test`\n - All 9 tests now pass successfully\n\n4. **Code Quality**: \n - Fixed linting issues by removing unused `xtest` import\n - Ensured no linting errors remain\n\nThe solution correctly handles all the test cases, including phrases with punctuation, hyphens, underscores, apostrophes, and consecutive delimiters. All tests pass and the code adheres to the project's linting standards."
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
"exerciseName": "affine-cipher",
|
|
351
|
+
"status": "success",
|
|
352
|
+
"turns": 18,
|
|
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\":1759011255003,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Affine cipher\",\"encode\"],\"duration\":0,\"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\":0,\"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\":0,\"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\":1,\"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\":4,\"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\":1759011255102,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/affine-cipher/affine-cipher.spec.js\",\"startTime\":1759011255017,\"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": 1759011255003,
|
|
389
|
+
"success": true,
|
|
390
|
+
"testResults": [
|
|
391
|
+
{
|
|
392
|
+
"assertionResults": [
|
|
393
|
+
{
|
|
394
|
+
"ancestorTitles": [
|
|
395
|
+
"Affine cipher",
|
|
396
|
+
"encode"
|
|
397
|
+
],
|
|
398
|
+
"duration": 0,
|
|
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": 0,
|
|
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": 0,
|
|
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": 1,
|
|
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": 4,
|
|
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": 1759011255102,
|
|
651
|
+
"message": "",
|
|
652
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/affine-cipher/affine-cipher.spec.js",
|
|
653
|
+
"startTime": 1759011255017,
|
|
654
|
+
"status": "passed",
|
|
655
|
+
"summary": ""
|
|
656
|
+
}
|
|
657
|
+
],
|
|
658
|
+
"wasInterrupted": false
|
|
659
|
+
}
|
|
660
|
+
},
|
|
661
|
+
"timeElapsed": 126.199,
|
|
662
|
+
"cost": 0.07841522,
|
|
663
|
+
"startTime": "2025-09-27T22:12:08.912Z",
|
|
664
|
+
"endTime": "2025-09-27T22:14:15.111Z",
|
|
665
|
+
"finalOutput": "I have successfully implemented the affine cipher in `affine-cipher.js`. The implementation includes:\n\n- `encode` function: Encrypts plaintext using the affine cipher formula E(x) = (a*i + b) mod 26, handles non-letter characters by preserving them, and groups ciphertext into 5-letter blocks separated by spaces.\n- `decode` function: Decrypts ciphertext using the inverse formula D(y) = a^-1 * (y - b) mod 26, removes spaces and punctuation from input, and preserves digits.\n- Helper functions: `gcd` for checking coprimality and `modInverse` for computing the modular multiplicative inverse using the Extended Euclidean Algorithm.\n- Error handling: Throws an error if `a` and 26 are not coprime.\n\nKey challenges overcome:\n- Ensuring correct handling of modular arithmetic, especially negative values in JavaScript's modulo operation.\n- Proper input normalization (removing spaces/punctuation, converting to lowercase).\n- Computing the modular inverse accurately.\n\nAll 16 tests now pass, confirming the implementation meets the exercise requirements."
|
|
666
|
+
},
|
|
667
|
+
{
|
|
668
|
+
"exerciseName": "all-your-base",
|
|
669
|
+
"status": "success",
|
|
670
|
+
"turns": 30,
|
|
671
|
+
"testResult": {
|
|
672
|
+
"passed": 0,
|
|
673
|
+
"failed": 0,
|
|
674
|
+
"total": 0,
|
|
675
|
+
"success": false,
|
|
676
|
+
"output": "Command failed: npx jest --json --verbose\nSyntaxError: Unexpected token ';'\n at compileSourceTextModule (node:internal/modules/esm/utils:339:16)\n at ModuleLoader.moduleStrategy (node:internal/modules/esm/translators:168:18)\n at callTranslator (node:internal/modules/esm/loader:428:14)\n at ModuleLoader.moduleProvider (node:internal/modules/esm/loader:434:30)\n at async link (node:internal/modules/esm/module_job:87:21)\n",
|
|
677
|
+
"errorMessage": "Command failed: npx jest --json --verbose\nSyntaxError: Unexpected token ';'\n at compileSourceTextModule (node:internal/modules/esm/utils:339:16)\n at ModuleLoader.moduleStrategy (node:internal/modules/esm/translators:168:18)\n at callTranslator (node:internal/modules/esm/loader:428:14)\n at ModuleLoader.moduleProvider (node:internal/modules/esm/loader:434:30)\n at async link (node:internal/modules/esm/module_job:87:21)\n",
|
|
678
|
+
"details": {
|
|
679
|
+
"status": 1,
|
|
680
|
+
"signal": null,
|
|
681
|
+
"output": [
|
|
682
|
+
null,
|
|
683
|
+
"",
|
|
684
|
+
"SyntaxError: Unexpected token ';'\n at compileSourceTextModule (node:internal/modules/esm/utils:339:16)\n at ModuleLoader.moduleStrategy (node:internal/modules/esm/translators:168:18)\n at callTranslator (node:internal/modules/esm/loader:428:14)\n at ModuleLoader.moduleProvider (node:internal/modules/esm/loader:434:30)\n at async link (node:internal/modules/esm/module_job:87:21)\n"
|
|
685
|
+
],
|
|
686
|
+
"pid": 99590,
|
|
687
|
+
"stdout": "",
|
|
688
|
+
"stderr": "SyntaxError: Unexpected token ';'\n at compileSourceTextModule (node:internal/modules/esm/utils:339:16)\n at ModuleLoader.moduleStrategy (node:internal/modules/esm/translators:168:18)\n at callTranslator (node:internal/modules/esm/loader:428:14)\n at ModuleLoader.moduleProvider (node:internal/modules/esm/loader:434:30)\n at async link (node:internal/modules/esm/module_job:87:21)\n"
|
|
689
|
+
}
|
|
690
|
+
},
|
|
691
|
+
"timeElapsed": 77.341,
|
|
692
|
+
"cost": 0.10381491999999996,
|
|
693
|
+
"startTime": "2025-09-27T22:14:15.125Z",
|
|
694
|
+
"endTime": "2025-09-27T22:15:32.466Z",
|
|
695
|
+
"finalOutput": "Task terminated due to limits reached. Turn: 30/30, Cost: $0.1038/$1.0000, Runtime: 77066ms/300000ms"
|
|
696
|
+
},
|
|
697
|
+
{
|
|
698
|
+
"exerciseName": "allergies",
|
|
699
|
+
"status": "success",
|
|
700
|
+
"turns": 14,
|
|
701
|
+
"testResult": {
|
|
702
|
+
"passed": 50,
|
|
703
|
+
"failed": 0,
|
|
704
|
+
"total": 50,
|
|
705
|
+
"skipped": 0,
|
|
706
|
+
"success": true,
|
|
707
|
+
"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\":1759011367249,\"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\":0,\"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\":1,\"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\":0,\"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\":1,\"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\":0,\"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\":1,\"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\":1,\"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\":1759011367342,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/allergies/allergies.spec.js\",\"startTime\":1759011367259,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
708
|
+
"details": {
|
|
709
|
+
"numFailedTestSuites": 0,
|
|
710
|
+
"numFailedTests": 0,
|
|
711
|
+
"numPassedTestSuites": 1,
|
|
712
|
+
"numPassedTests": 50,
|
|
713
|
+
"numPendingTestSuites": 0,
|
|
714
|
+
"numPendingTests": 0,
|
|
715
|
+
"numRuntimeErrorTestSuites": 0,
|
|
716
|
+
"numTodoTests": 0,
|
|
717
|
+
"numTotalTestSuites": 1,
|
|
718
|
+
"numTotalTests": 50,
|
|
719
|
+
"openHandles": [],
|
|
720
|
+
"snapshot": {
|
|
721
|
+
"added": 0,
|
|
722
|
+
"didUpdate": false,
|
|
723
|
+
"failure": false,
|
|
724
|
+
"filesAdded": 0,
|
|
725
|
+
"filesRemoved": 0,
|
|
726
|
+
"filesRemovedList": [],
|
|
727
|
+
"filesUnmatched": 0,
|
|
728
|
+
"filesUpdated": 0,
|
|
729
|
+
"matched": 0,
|
|
730
|
+
"total": 0,
|
|
731
|
+
"unchecked": 0,
|
|
732
|
+
"uncheckedKeysByFile": [],
|
|
733
|
+
"unmatched": 0,
|
|
734
|
+
"updated": 0
|
|
735
|
+
},
|
|
736
|
+
"startTime": 1759011367249,
|
|
737
|
+
"success": true,
|
|
738
|
+
"testResults": [
|
|
739
|
+
{
|
|
740
|
+
"assertionResults": [
|
|
741
|
+
{
|
|
742
|
+
"ancestorTitles": [
|
|
743
|
+
"Allergies",
|
|
744
|
+
"testing for eggs allergy"
|
|
745
|
+
],
|
|
746
|
+
"duration": 1,
|
|
747
|
+
"failureDetails": [],
|
|
748
|
+
"failureMessages": [],
|
|
749
|
+
"fullName": "Allergies testing for eggs allergy not allergic to anything",
|
|
750
|
+
"invocations": 1,
|
|
751
|
+
"location": null,
|
|
752
|
+
"numPassingAsserts": 1,
|
|
753
|
+
"retryReasons": [],
|
|
754
|
+
"status": "passed",
|
|
755
|
+
"title": "not allergic to anything"
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
"ancestorTitles": [
|
|
759
|
+
"Allergies",
|
|
760
|
+
"testing for eggs allergy"
|
|
761
|
+
],
|
|
762
|
+
"duration": 0,
|
|
763
|
+
"failureDetails": [],
|
|
764
|
+
"failureMessages": [],
|
|
765
|
+
"fullName": "Allergies testing for eggs allergy allergic only to eggs",
|
|
766
|
+
"invocations": 1,
|
|
767
|
+
"location": null,
|
|
768
|
+
"numPassingAsserts": 1,
|
|
769
|
+
"retryReasons": [],
|
|
770
|
+
"status": "passed",
|
|
771
|
+
"title": "allergic only to eggs"
|
|
772
|
+
},
|
|
773
|
+
{
|
|
774
|
+
"ancestorTitles": [
|
|
775
|
+
"Allergies",
|
|
776
|
+
"testing for eggs allergy"
|
|
777
|
+
],
|
|
778
|
+
"duration": 0,
|
|
779
|
+
"failureDetails": [],
|
|
780
|
+
"failureMessages": [],
|
|
781
|
+
"fullName": "Allergies testing for eggs allergy allergic to eggs and something else",
|
|
782
|
+
"invocations": 1,
|
|
783
|
+
"location": null,
|
|
784
|
+
"numPassingAsserts": 1,
|
|
785
|
+
"retryReasons": [],
|
|
786
|
+
"status": "passed",
|
|
787
|
+
"title": "allergic to eggs and something else"
|
|
788
|
+
},
|
|
789
|
+
{
|
|
790
|
+
"ancestorTitles": [
|
|
791
|
+
"Allergies",
|
|
792
|
+
"testing for eggs allergy"
|
|
793
|
+
],
|
|
794
|
+
"duration": 0,
|
|
795
|
+
"failureDetails": [],
|
|
796
|
+
"failureMessages": [],
|
|
797
|
+
"fullName": "Allergies testing for eggs allergy allergic to something, but not eggs",
|
|
798
|
+
"invocations": 1,
|
|
799
|
+
"location": null,
|
|
800
|
+
"numPassingAsserts": 1,
|
|
801
|
+
"retryReasons": [],
|
|
802
|
+
"status": "passed",
|
|
803
|
+
"title": "allergic to something, but not eggs"
|
|
804
|
+
},
|
|
805
|
+
{
|
|
806
|
+
"ancestorTitles": [
|
|
807
|
+
"Allergies",
|
|
808
|
+
"testing for eggs allergy"
|
|
809
|
+
],
|
|
810
|
+
"duration": 0,
|
|
811
|
+
"failureDetails": [],
|
|
812
|
+
"failureMessages": [],
|
|
813
|
+
"fullName": "Allergies testing for eggs allergy allergic to everything",
|
|
814
|
+
"invocations": 1,
|
|
815
|
+
"location": null,
|
|
816
|
+
"numPassingAsserts": 1,
|
|
817
|
+
"retryReasons": [],
|
|
818
|
+
"status": "passed",
|
|
819
|
+
"title": "allergic to everything"
|
|
820
|
+
},
|
|
821
|
+
{
|
|
822
|
+
"ancestorTitles": [
|
|
823
|
+
"Allergies",
|
|
824
|
+
"testing for peanuts allergy"
|
|
825
|
+
],
|
|
826
|
+
"duration": 1,
|
|
827
|
+
"failureDetails": [],
|
|
828
|
+
"failureMessages": [],
|
|
829
|
+
"fullName": "Allergies testing for peanuts allergy not allergic to anything",
|
|
830
|
+
"invocations": 1,
|
|
831
|
+
"location": null,
|
|
832
|
+
"numPassingAsserts": 1,
|
|
833
|
+
"retryReasons": [],
|
|
834
|
+
"status": "passed",
|
|
835
|
+
"title": "not allergic to anything"
|
|
836
|
+
},
|
|
837
|
+
{
|
|
838
|
+
"ancestorTitles": [
|
|
839
|
+
"Allergies",
|
|
840
|
+
"testing for peanuts allergy"
|
|
841
|
+
],
|
|
842
|
+
"duration": 0,
|
|
843
|
+
"failureDetails": [],
|
|
844
|
+
"failureMessages": [],
|
|
845
|
+
"fullName": "Allergies testing for peanuts allergy allergic only to peanuts",
|
|
846
|
+
"invocations": 1,
|
|
847
|
+
"location": null,
|
|
848
|
+
"numPassingAsserts": 1,
|
|
849
|
+
"retryReasons": [],
|
|
850
|
+
"status": "passed",
|
|
851
|
+
"title": "allergic only to peanuts"
|
|
852
|
+
},
|
|
853
|
+
{
|
|
854
|
+
"ancestorTitles": [
|
|
855
|
+
"Allergies",
|
|
856
|
+
"testing for peanuts allergy"
|
|
857
|
+
],
|
|
858
|
+
"duration": 0,
|
|
859
|
+
"failureDetails": [],
|
|
860
|
+
"failureMessages": [],
|
|
861
|
+
"fullName": "Allergies testing for peanuts allergy allergic to peanuts and something else",
|
|
862
|
+
"invocations": 1,
|
|
863
|
+
"location": null,
|
|
864
|
+
"numPassingAsserts": 1,
|
|
865
|
+
"retryReasons": [],
|
|
866
|
+
"status": "passed",
|
|
867
|
+
"title": "allergic to peanuts and something else"
|
|
868
|
+
},
|
|
869
|
+
{
|
|
870
|
+
"ancestorTitles": [
|
|
871
|
+
"Allergies",
|
|
872
|
+
"testing for peanuts allergy"
|
|
873
|
+
],
|
|
874
|
+
"duration": 0,
|
|
875
|
+
"failureDetails": [],
|
|
876
|
+
"failureMessages": [],
|
|
877
|
+
"fullName": "Allergies testing for peanuts allergy allergic to something, but not peanuts",
|
|
878
|
+
"invocations": 1,
|
|
879
|
+
"location": null,
|
|
880
|
+
"numPassingAsserts": 1,
|
|
881
|
+
"retryReasons": [],
|
|
882
|
+
"status": "passed",
|
|
883
|
+
"title": "allergic to something, but not peanuts"
|
|
884
|
+
},
|
|
885
|
+
{
|
|
886
|
+
"ancestorTitles": [
|
|
887
|
+
"Allergies",
|
|
888
|
+
"testing for peanuts allergy"
|
|
889
|
+
],
|
|
890
|
+
"duration": 0,
|
|
891
|
+
"failureDetails": [],
|
|
892
|
+
"failureMessages": [],
|
|
893
|
+
"fullName": "Allergies testing for peanuts allergy allergic to everything",
|
|
894
|
+
"invocations": 1,
|
|
895
|
+
"location": null,
|
|
896
|
+
"numPassingAsserts": 1,
|
|
897
|
+
"retryReasons": [],
|
|
898
|
+
"status": "passed",
|
|
899
|
+
"title": "allergic to everything"
|
|
900
|
+
},
|
|
901
|
+
{
|
|
902
|
+
"ancestorTitles": [
|
|
903
|
+
"Allergies",
|
|
904
|
+
"testing for shellfish allergy"
|
|
905
|
+
],
|
|
906
|
+
"duration": 0,
|
|
907
|
+
"failureDetails": [],
|
|
908
|
+
"failureMessages": [],
|
|
909
|
+
"fullName": "Allergies testing for shellfish allergy not allergic to anything",
|
|
910
|
+
"invocations": 1,
|
|
911
|
+
"location": null,
|
|
912
|
+
"numPassingAsserts": 1,
|
|
913
|
+
"retryReasons": [],
|
|
914
|
+
"status": "passed",
|
|
915
|
+
"title": "not allergic to anything"
|
|
916
|
+
},
|
|
917
|
+
{
|
|
918
|
+
"ancestorTitles": [
|
|
919
|
+
"Allergies",
|
|
920
|
+
"testing for shellfish allergy"
|
|
921
|
+
],
|
|
922
|
+
"duration": 0,
|
|
923
|
+
"failureDetails": [],
|
|
924
|
+
"failureMessages": [],
|
|
925
|
+
"fullName": "Allergies testing for shellfish allergy allergic only to shellfish",
|
|
926
|
+
"invocations": 1,
|
|
927
|
+
"location": null,
|
|
928
|
+
"numPassingAsserts": 1,
|
|
929
|
+
"retryReasons": [],
|
|
930
|
+
"status": "passed",
|
|
931
|
+
"title": "allergic only to shellfish"
|
|
932
|
+
},
|
|
933
|
+
{
|
|
934
|
+
"ancestorTitles": [
|
|
935
|
+
"Allergies",
|
|
936
|
+
"testing for shellfish allergy"
|
|
937
|
+
],
|
|
938
|
+
"duration": 1,
|
|
939
|
+
"failureDetails": [],
|
|
940
|
+
"failureMessages": [],
|
|
941
|
+
"fullName": "Allergies testing for shellfish allergy allergic to shellfish and something else",
|
|
942
|
+
"invocations": 1,
|
|
943
|
+
"location": null,
|
|
944
|
+
"numPassingAsserts": 1,
|
|
945
|
+
"retryReasons": [],
|
|
946
|
+
"status": "passed",
|
|
947
|
+
"title": "allergic to shellfish and something else"
|
|
948
|
+
},
|
|
949
|
+
{
|
|
950
|
+
"ancestorTitles": [
|
|
951
|
+
"Allergies",
|
|
952
|
+
"testing for shellfish allergy"
|
|
953
|
+
],
|
|
954
|
+
"duration": 0,
|
|
955
|
+
"failureDetails": [],
|
|
956
|
+
"failureMessages": [],
|
|
957
|
+
"fullName": "Allergies testing for shellfish allergy allergic to something, but not shellfish",
|
|
958
|
+
"invocations": 1,
|
|
959
|
+
"location": null,
|
|
960
|
+
"numPassingAsserts": 1,
|
|
961
|
+
"retryReasons": [],
|
|
962
|
+
"status": "passed",
|
|
963
|
+
"title": "allergic to something, but not shellfish"
|
|
964
|
+
},
|
|
965
|
+
{
|
|
966
|
+
"ancestorTitles": [
|
|
967
|
+
"Allergies",
|
|
968
|
+
"testing for shellfish allergy"
|
|
969
|
+
],
|
|
970
|
+
"duration": 0,
|
|
971
|
+
"failureDetails": [],
|
|
972
|
+
"failureMessages": [],
|
|
973
|
+
"fullName": "Allergies testing for shellfish allergy allergic to everything",
|
|
974
|
+
"invocations": 1,
|
|
975
|
+
"location": null,
|
|
976
|
+
"numPassingAsserts": 1,
|
|
977
|
+
"retryReasons": [],
|
|
978
|
+
"status": "passed",
|
|
979
|
+
"title": "allergic to everything"
|
|
980
|
+
},
|
|
981
|
+
{
|
|
982
|
+
"ancestorTitles": [
|
|
983
|
+
"Allergies",
|
|
984
|
+
"testing for strawberries allergy"
|
|
985
|
+
],
|
|
986
|
+
"duration": 0,
|
|
987
|
+
"failureDetails": [],
|
|
988
|
+
"failureMessages": [],
|
|
989
|
+
"fullName": "Allergies testing for strawberries allergy not allergic to anything",
|
|
990
|
+
"invocations": 1,
|
|
991
|
+
"location": null,
|
|
992
|
+
"numPassingAsserts": 1,
|
|
993
|
+
"retryReasons": [],
|
|
994
|
+
"status": "passed",
|
|
995
|
+
"title": "not allergic to anything"
|
|
996
|
+
},
|
|
997
|
+
{
|
|
998
|
+
"ancestorTitles": [
|
|
999
|
+
"Allergies",
|
|
1000
|
+
"testing for strawberries allergy"
|
|
1001
|
+
],
|
|
1002
|
+
"duration": 0,
|
|
1003
|
+
"failureDetails": [],
|
|
1004
|
+
"failureMessages": [],
|
|
1005
|
+
"fullName": "Allergies testing for strawberries allergy allergic only to strawberries",
|
|
1006
|
+
"invocations": 1,
|
|
1007
|
+
"location": null,
|
|
1008
|
+
"numPassingAsserts": 1,
|
|
1009
|
+
"retryReasons": [],
|
|
1010
|
+
"status": "passed",
|
|
1011
|
+
"title": "allergic only to strawberries"
|
|
1012
|
+
},
|
|
1013
|
+
{
|
|
1014
|
+
"ancestorTitles": [
|
|
1015
|
+
"Allergies",
|
|
1016
|
+
"testing for strawberries allergy"
|
|
1017
|
+
],
|
|
1018
|
+
"duration": 0,
|
|
1019
|
+
"failureDetails": [],
|
|
1020
|
+
"failureMessages": [],
|
|
1021
|
+
"fullName": "Allergies testing for strawberries allergy allergic to strawberries and something else",
|
|
1022
|
+
"invocations": 1,
|
|
1023
|
+
"location": null,
|
|
1024
|
+
"numPassingAsserts": 1,
|
|
1025
|
+
"retryReasons": [],
|
|
1026
|
+
"status": "passed",
|
|
1027
|
+
"title": "allergic to strawberries and something else"
|
|
1028
|
+
},
|
|
1029
|
+
{
|
|
1030
|
+
"ancestorTitles": [
|
|
1031
|
+
"Allergies",
|
|
1032
|
+
"testing for strawberries allergy"
|
|
1033
|
+
],
|
|
1034
|
+
"duration": 0,
|
|
1035
|
+
"failureDetails": [],
|
|
1036
|
+
"failureMessages": [],
|
|
1037
|
+
"fullName": "Allergies testing for strawberries allergy allergic to something, but not strawberries",
|
|
1038
|
+
"invocations": 1,
|
|
1039
|
+
"location": null,
|
|
1040
|
+
"numPassingAsserts": 1,
|
|
1041
|
+
"retryReasons": [],
|
|
1042
|
+
"status": "passed",
|
|
1043
|
+
"title": "allergic to something, but not strawberries"
|
|
1044
|
+
},
|
|
1045
|
+
{
|
|
1046
|
+
"ancestorTitles": [
|
|
1047
|
+
"Allergies",
|
|
1048
|
+
"testing for strawberries allergy"
|
|
1049
|
+
],
|
|
1050
|
+
"duration": 0,
|
|
1051
|
+
"failureDetails": [],
|
|
1052
|
+
"failureMessages": [],
|
|
1053
|
+
"fullName": "Allergies testing for strawberries allergy allergic to everything",
|
|
1054
|
+
"invocations": 1,
|
|
1055
|
+
"location": null,
|
|
1056
|
+
"numPassingAsserts": 1,
|
|
1057
|
+
"retryReasons": [],
|
|
1058
|
+
"status": "passed",
|
|
1059
|
+
"title": "allergic to everything"
|
|
1060
|
+
},
|
|
1061
|
+
{
|
|
1062
|
+
"ancestorTitles": [
|
|
1063
|
+
"Allergies",
|
|
1064
|
+
"testing for tomatoes allergy"
|
|
1065
|
+
],
|
|
1066
|
+
"duration": 0,
|
|
1067
|
+
"failureDetails": [],
|
|
1068
|
+
"failureMessages": [],
|
|
1069
|
+
"fullName": "Allergies testing for tomatoes allergy not allergic to anything",
|
|
1070
|
+
"invocations": 1,
|
|
1071
|
+
"location": null,
|
|
1072
|
+
"numPassingAsserts": 1,
|
|
1073
|
+
"retryReasons": [],
|
|
1074
|
+
"status": "passed",
|
|
1075
|
+
"title": "not allergic to anything"
|
|
1076
|
+
},
|
|
1077
|
+
{
|
|
1078
|
+
"ancestorTitles": [
|
|
1079
|
+
"Allergies",
|
|
1080
|
+
"testing for tomatoes allergy"
|
|
1081
|
+
],
|
|
1082
|
+
"duration": 0,
|
|
1083
|
+
"failureDetails": [],
|
|
1084
|
+
"failureMessages": [],
|
|
1085
|
+
"fullName": "Allergies testing for tomatoes allergy allergic only to tomatoes",
|
|
1086
|
+
"invocations": 1,
|
|
1087
|
+
"location": null,
|
|
1088
|
+
"numPassingAsserts": 1,
|
|
1089
|
+
"retryReasons": [],
|
|
1090
|
+
"status": "passed",
|
|
1091
|
+
"title": "allergic only to tomatoes"
|
|
1092
|
+
},
|
|
1093
|
+
{
|
|
1094
|
+
"ancestorTitles": [
|
|
1095
|
+
"Allergies",
|
|
1096
|
+
"testing for tomatoes allergy"
|
|
1097
|
+
],
|
|
1098
|
+
"duration": 0,
|
|
1099
|
+
"failureDetails": [],
|
|
1100
|
+
"failureMessages": [],
|
|
1101
|
+
"fullName": "Allergies testing for tomatoes allergy allergic to tomatoes and something else",
|
|
1102
|
+
"invocations": 1,
|
|
1103
|
+
"location": null,
|
|
1104
|
+
"numPassingAsserts": 1,
|
|
1105
|
+
"retryReasons": [],
|
|
1106
|
+
"status": "passed",
|
|
1107
|
+
"title": "allergic to tomatoes and something else"
|
|
1108
|
+
},
|
|
1109
|
+
{
|
|
1110
|
+
"ancestorTitles": [
|
|
1111
|
+
"Allergies",
|
|
1112
|
+
"testing for tomatoes allergy"
|
|
1113
|
+
],
|
|
1114
|
+
"duration": 0,
|
|
1115
|
+
"failureDetails": [],
|
|
1116
|
+
"failureMessages": [],
|
|
1117
|
+
"fullName": "Allergies testing for tomatoes allergy allergic to something, but not tomatoes",
|
|
1118
|
+
"invocations": 1,
|
|
1119
|
+
"location": null,
|
|
1120
|
+
"numPassingAsserts": 1,
|
|
1121
|
+
"retryReasons": [],
|
|
1122
|
+
"status": "passed",
|
|
1123
|
+
"title": "allergic to something, but not tomatoes"
|
|
1124
|
+
},
|
|
1125
|
+
{
|
|
1126
|
+
"ancestorTitles": [
|
|
1127
|
+
"Allergies",
|
|
1128
|
+
"testing for tomatoes allergy"
|
|
1129
|
+
],
|
|
1130
|
+
"duration": 0,
|
|
1131
|
+
"failureDetails": [],
|
|
1132
|
+
"failureMessages": [],
|
|
1133
|
+
"fullName": "Allergies testing for tomatoes allergy allergic to everything",
|
|
1134
|
+
"invocations": 1,
|
|
1135
|
+
"location": null,
|
|
1136
|
+
"numPassingAsserts": 1,
|
|
1137
|
+
"retryReasons": [],
|
|
1138
|
+
"status": "passed",
|
|
1139
|
+
"title": "allergic to everything"
|
|
1140
|
+
},
|
|
1141
|
+
{
|
|
1142
|
+
"ancestorTitles": [
|
|
1143
|
+
"Allergies",
|
|
1144
|
+
"testing for chocolate allergy"
|
|
1145
|
+
],
|
|
1146
|
+
"duration": 0,
|
|
1147
|
+
"failureDetails": [],
|
|
1148
|
+
"failureMessages": [],
|
|
1149
|
+
"fullName": "Allergies testing for chocolate allergy not allergic to anything",
|
|
1150
|
+
"invocations": 1,
|
|
1151
|
+
"location": null,
|
|
1152
|
+
"numPassingAsserts": 1,
|
|
1153
|
+
"retryReasons": [],
|
|
1154
|
+
"status": "passed",
|
|
1155
|
+
"title": "not allergic to anything"
|
|
1156
|
+
},
|
|
1157
|
+
{
|
|
1158
|
+
"ancestorTitles": [
|
|
1159
|
+
"Allergies",
|
|
1160
|
+
"testing for chocolate allergy"
|
|
1161
|
+
],
|
|
1162
|
+
"duration": 0,
|
|
1163
|
+
"failureDetails": [],
|
|
1164
|
+
"failureMessages": [],
|
|
1165
|
+
"fullName": "Allergies testing for chocolate allergy allergic only to chocolate",
|
|
1166
|
+
"invocations": 1,
|
|
1167
|
+
"location": null,
|
|
1168
|
+
"numPassingAsserts": 1,
|
|
1169
|
+
"retryReasons": [],
|
|
1170
|
+
"status": "passed",
|
|
1171
|
+
"title": "allergic only to chocolate"
|
|
1172
|
+
},
|
|
1173
|
+
{
|
|
1174
|
+
"ancestorTitles": [
|
|
1175
|
+
"Allergies",
|
|
1176
|
+
"testing for chocolate allergy"
|
|
1177
|
+
],
|
|
1178
|
+
"duration": 0,
|
|
1179
|
+
"failureDetails": [],
|
|
1180
|
+
"failureMessages": [],
|
|
1181
|
+
"fullName": "Allergies testing for chocolate allergy allergic to chocolate and something else",
|
|
1182
|
+
"invocations": 1,
|
|
1183
|
+
"location": null,
|
|
1184
|
+
"numPassingAsserts": 1,
|
|
1185
|
+
"retryReasons": [],
|
|
1186
|
+
"status": "passed",
|
|
1187
|
+
"title": "allergic to chocolate and something else"
|
|
1188
|
+
},
|
|
1189
|
+
{
|
|
1190
|
+
"ancestorTitles": [
|
|
1191
|
+
"Allergies",
|
|
1192
|
+
"testing for chocolate allergy"
|
|
1193
|
+
],
|
|
1194
|
+
"duration": 0,
|
|
1195
|
+
"failureDetails": [],
|
|
1196
|
+
"failureMessages": [],
|
|
1197
|
+
"fullName": "Allergies testing for chocolate allergy allergic to something, but not chocolate",
|
|
1198
|
+
"invocations": 1,
|
|
1199
|
+
"location": null,
|
|
1200
|
+
"numPassingAsserts": 1,
|
|
1201
|
+
"retryReasons": [],
|
|
1202
|
+
"status": "passed",
|
|
1203
|
+
"title": "allergic to something, but not chocolate"
|
|
1204
|
+
},
|
|
1205
|
+
{
|
|
1206
|
+
"ancestorTitles": [
|
|
1207
|
+
"Allergies",
|
|
1208
|
+
"testing for chocolate allergy"
|
|
1209
|
+
],
|
|
1210
|
+
"duration": 0,
|
|
1211
|
+
"failureDetails": [],
|
|
1212
|
+
"failureMessages": [],
|
|
1213
|
+
"fullName": "Allergies testing for chocolate allergy allergic to everything",
|
|
1214
|
+
"invocations": 1,
|
|
1215
|
+
"location": null,
|
|
1216
|
+
"numPassingAsserts": 1,
|
|
1217
|
+
"retryReasons": [],
|
|
1218
|
+
"status": "passed",
|
|
1219
|
+
"title": "allergic to everything"
|
|
1220
|
+
},
|
|
1221
|
+
{
|
|
1222
|
+
"ancestorTitles": [
|
|
1223
|
+
"Allergies",
|
|
1224
|
+
"testing for pollen allergy"
|
|
1225
|
+
],
|
|
1226
|
+
"duration": 0,
|
|
1227
|
+
"failureDetails": [],
|
|
1228
|
+
"failureMessages": [],
|
|
1229
|
+
"fullName": "Allergies testing for pollen allergy not allergic to anything",
|
|
1230
|
+
"invocations": 1,
|
|
1231
|
+
"location": null,
|
|
1232
|
+
"numPassingAsserts": 1,
|
|
1233
|
+
"retryReasons": [],
|
|
1234
|
+
"status": "passed",
|
|
1235
|
+
"title": "not allergic to anything"
|
|
1236
|
+
},
|
|
1237
|
+
{
|
|
1238
|
+
"ancestorTitles": [
|
|
1239
|
+
"Allergies",
|
|
1240
|
+
"testing for pollen allergy"
|
|
1241
|
+
],
|
|
1242
|
+
"duration": 0,
|
|
1243
|
+
"failureDetails": [],
|
|
1244
|
+
"failureMessages": [],
|
|
1245
|
+
"fullName": "Allergies testing for pollen allergy allergic only to pollen",
|
|
1246
|
+
"invocations": 1,
|
|
1247
|
+
"location": null,
|
|
1248
|
+
"numPassingAsserts": 1,
|
|
1249
|
+
"retryReasons": [],
|
|
1250
|
+
"status": "passed",
|
|
1251
|
+
"title": "allergic only to pollen"
|
|
1252
|
+
},
|
|
1253
|
+
{
|
|
1254
|
+
"ancestorTitles": [
|
|
1255
|
+
"Allergies",
|
|
1256
|
+
"testing for pollen allergy"
|
|
1257
|
+
],
|
|
1258
|
+
"duration": 0,
|
|
1259
|
+
"failureDetails": [],
|
|
1260
|
+
"failureMessages": [],
|
|
1261
|
+
"fullName": "Allergies testing for pollen allergy allergic to pollen and something else",
|
|
1262
|
+
"invocations": 1,
|
|
1263
|
+
"location": null,
|
|
1264
|
+
"numPassingAsserts": 1,
|
|
1265
|
+
"retryReasons": [],
|
|
1266
|
+
"status": "passed",
|
|
1267
|
+
"title": "allergic to pollen and something else"
|
|
1268
|
+
},
|
|
1269
|
+
{
|
|
1270
|
+
"ancestorTitles": [
|
|
1271
|
+
"Allergies",
|
|
1272
|
+
"testing for pollen allergy"
|
|
1273
|
+
],
|
|
1274
|
+
"duration": 1,
|
|
1275
|
+
"failureDetails": [],
|
|
1276
|
+
"failureMessages": [],
|
|
1277
|
+
"fullName": "Allergies testing for pollen allergy allergic to something, but not pollen",
|
|
1278
|
+
"invocations": 1,
|
|
1279
|
+
"location": null,
|
|
1280
|
+
"numPassingAsserts": 1,
|
|
1281
|
+
"retryReasons": [],
|
|
1282
|
+
"status": "passed",
|
|
1283
|
+
"title": "allergic to something, but not pollen"
|
|
1284
|
+
},
|
|
1285
|
+
{
|
|
1286
|
+
"ancestorTitles": [
|
|
1287
|
+
"Allergies",
|
|
1288
|
+
"testing for pollen allergy"
|
|
1289
|
+
],
|
|
1290
|
+
"duration": 0,
|
|
1291
|
+
"failureDetails": [],
|
|
1292
|
+
"failureMessages": [],
|
|
1293
|
+
"fullName": "Allergies testing for pollen allergy allergic to everything",
|
|
1294
|
+
"invocations": 1,
|
|
1295
|
+
"location": null,
|
|
1296
|
+
"numPassingAsserts": 1,
|
|
1297
|
+
"retryReasons": [],
|
|
1298
|
+
"status": "passed",
|
|
1299
|
+
"title": "allergic to everything"
|
|
1300
|
+
},
|
|
1301
|
+
{
|
|
1302
|
+
"ancestorTitles": [
|
|
1303
|
+
"Allergies",
|
|
1304
|
+
"testing for cats allergy"
|
|
1305
|
+
],
|
|
1306
|
+
"duration": 0,
|
|
1307
|
+
"failureDetails": [],
|
|
1308
|
+
"failureMessages": [],
|
|
1309
|
+
"fullName": "Allergies testing for cats allergy not allergic to anything",
|
|
1310
|
+
"invocations": 1,
|
|
1311
|
+
"location": null,
|
|
1312
|
+
"numPassingAsserts": 1,
|
|
1313
|
+
"retryReasons": [],
|
|
1314
|
+
"status": "passed",
|
|
1315
|
+
"title": "not allergic to anything"
|
|
1316
|
+
},
|
|
1317
|
+
{
|
|
1318
|
+
"ancestorTitles": [
|
|
1319
|
+
"Allergies",
|
|
1320
|
+
"testing for cats allergy"
|
|
1321
|
+
],
|
|
1322
|
+
"duration": 0,
|
|
1323
|
+
"failureDetails": [],
|
|
1324
|
+
"failureMessages": [],
|
|
1325
|
+
"fullName": "Allergies testing for cats allergy allergic only to cats",
|
|
1326
|
+
"invocations": 1,
|
|
1327
|
+
"location": null,
|
|
1328
|
+
"numPassingAsserts": 1,
|
|
1329
|
+
"retryReasons": [],
|
|
1330
|
+
"status": "passed",
|
|
1331
|
+
"title": "allergic only to cats"
|
|
1332
|
+
},
|
|
1333
|
+
{
|
|
1334
|
+
"ancestorTitles": [
|
|
1335
|
+
"Allergies",
|
|
1336
|
+
"testing for cats allergy"
|
|
1337
|
+
],
|
|
1338
|
+
"duration": 0,
|
|
1339
|
+
"failureDetails": [],
|
|
1340
|
+
"failureMessages": [],
|
|
1341
|
+
"fullName": "Allergies testing for cats allergy allergic to cats and something else",
|
|
1342
|
+
"invocations": 1,
|
|
1343
|
+
"location": null,
|
|
1344
|
+
"numPassingAsserts": 1,
|
|
1345
|
+
"retryReasons": [],
|
|
1346
|
+
"status": "passed",
|
|
1347
|
+
"title": "allergic to cats and something else"
|
|
1348
|
+
},
|
|
1349
|
+
{
|
|
1350
|
+
"ancestorTitles": [
|
|
1351
|
+
"Allergies",
|
|
1352
|
+
"testing for cats allergy"
|
|
1353
|
+
],
|
|
1354
|
+
"duration": 0,
|
|
1355
|
+
"failureDetails": [],
|
|
1356
|
+
"failureMessages": [],
|
|
1357
|
+
"fullName": "Allergies testing for cats allergy allergic to something, but not cats",
|
|
1358
|
+
"invocations": 1,
|
|
1359
|
+
"location": null,
|
|
1360
|
+
"numPassingAsserts": 1,
|
|
1361
|
+
"retryReasons": [],
|
|
1362
|
+
"status": "passed",
|
|
1363
|
+
"title": "allergic to something, but not cats"
|
|
1364
|
+
},
|
|
1365
|
+
{
|
|
1366
|
+
"ancestorTitles": [
|
|
1367
|
+
"Allergies",
|
|
1368
|
+
"testing for cats allergy"
|
|
1369
|
+
],
|
|
1370
|
+
"duration": 0,
|
|
1371
|
+
"failureDetails": [],
|
|
1372
|
+
"failureMessages": [],
|
|
1373
|
+
"fullName": "Allergies testing for cats allergy allergic to everything",
|
|
1374
|
+
"invocations": 1,
|
|
1375
|
+
"location": null,
|
|
1376
|
+
"numPassingAsserts": 1,
|
|
1377
|
+
"retryReasons": [],
|
|
1378
|
+
"status": "passed",
|
|
1379
|
+
"title": "allergic to everything"
|
|
1380
|
+
},
|
|
1381
|
+
{
|
|
1382
|
+
"ancestorTitles": [
|
|
1383
|
+
"Allergies",
|
|
1384
|
+
"list when:"
|
|
1385
|
+
],
|
|
1386
|
+
"duration": 0,
|
|
1387
|
+
"failureDetails": [],
|
|
1388
|
+
"failureMessages": [],
|
|
1389
|
+
"fullName": "Allergies list when: no allergies",
|
|
1390
|
+
"invocations": 1,
|
|
1391
|
+
"location": null,
|
|
1392
|
+
"numPassingAsserts": 1,
|
|
1393
|
+
"retryReasons": [],
|
|
1394
|
+
"status": "passed",
|
|
1395
|
+
"title": "no allergies"
|
|
1396
|
+
},
|
|
1397
|
+
{
|
|
1398
|
+
"ancestorTitles": [
|
|
1399
|
+
"Allergies",
|
|
1400
|
+
"list when:"
|
|
1401
|
+
],
|
|
1402
|
+
"duration": 0,
|
|
1403
|
+
"failureDetails": [],
|
|
1404
|
+
"failureMessages": [],
|
|
1405
|
+
"fullName": "Allergies list when: just eggs",
|
|
1406
|
+
"invocations": 1,
|
|
1407
|
+
"location": null,
|
|
1408
|
+
"numPassingAsserts": 1,
|
|
1409
|
+
"retryReasons": [],
|
|
1410
|
+
"status": "passed",
|
|
1411
|
+
"title": "just eggs"
|
|
1412
|
+
},
|
|
1413
|
+
{
|
|
1414
|
+
"ancestorTitles": [
|
|
1415
|
+
"Allergies",
|
|
1416
|
+
"list when:"
|
|
1417
|
+
],
|
|
1418
|
+
"duration": 1,
|
|
1419
|
+
"failureDetails": [],
|
|
1420
|
+
"failureMessages": [],
|
|
1421
|
+
"fullName": "Allergies list when: just peanuts",
|
|
1422
|
+
"invocations": 1,
|
|
1423
|
+
"location": null,
|
|
1424
|
+
"numPassingAsserts": 1,
|
|
1425
|
+
"retryReasons": [],
|
|
1426
|
+
"status": "passed",
|
|
1427
|
+
"title": "just peanuts"
|
|
1428
|
+
},
|
|
1429
|
+
{
|
|
1430
|
+
"ancestorTitles": [
|
|
1431
|
+
"Allergies",
|
|
1432
|
+
"list when:"
|
|
1433
|
+
],
|
|
1434
|
+
"duration": 0,
|
|
1435
|
+
"failureDetails": [],
|
|
1436
|
+
"failureMessages": [],
|
|
1437
|
+
"fullName": "Allergies list when: just strawberries",
|
|
1438
|
+
"invocations": 1,
|
|
1439
|
+
"location": null,
|
|
1440
|
+
"numPassingAsserts": 1,
|
|
1441
|
+
"retryReasons": [],
|
|
1442
|
+
"status": "passed",
|
|
1443
|
+
"title": "just strawberries"
|
|
1444
|
+
},
|
|
1445
|
+
{
|
|
1446
|
+
"ancestorTitles": [
|
|
1447
|
+
"Allergies",
|
|
1448
|
+
"list when:"
|
|
1449
|
+
],
|
|
1450
|
+
"duration": 0,
|
|
1451
|
+
"failureDetails": [],
|
|
1452
|
+
"failureMessages": [],
|
|
1453
|
+
"fullName": "Allergies list when: eggs and peanuts",
|
|
1454
|
+
"invocations": 1,
|
|
1455
|
+
"location": null,
|
|
1456
|
+
"numPassingAsserts": 1,
|
|
1457
|
+
"retryReasons": [],
|
|
1458
|
+
"status": "passed",
|
|
1459
|
+
"title": "eggs and peanuts"
|
|
1460
|
+
},
|
|
1461
|
+
{
|
|
1462
|
+
"ancestorTitles": [
|
|
1463
|
+
"Allergies",
|
|
1464
|
+
"list when:"
|
|
1465
|
+
],
|
|
1466
|
+
"duration": 0,
|
|
1467
|
+
"failureDetails": [],
|
|
1468
|
+
"failureMessages": [],
|
|
1469
|
+
"fullName": "Allergies list when: more than eggs but not peanuts",
|
|
1470
|
+
"invocations": 1,
|
|
1471
|
+
"location": null,
|
|
1472
|
+
"numPassingAsserts": 1,
|
|
1473
|
+
"retryReasons": [],
|
|
1474
|
+
"status": "passed",
|
|
1475
|
+
"title": "more than eggs but not peanuts"
|
|
1476
|
+
},
|
|
1477
|
+
{
|
|
1478
|
+
"ancestorTitles": [
|
|
1479
|
+
"Allergies",
|
|
1480
|
+
"list when:"
|
|
1481
|
+
],
|
|
1482
|
+
"duration": 0,
|
|
1483
|
+
"failureDetails": [],
|
|
1484
|
+
"failureMessages": [],
|
|
1485
|
+
"fullName": "Allergies list when: lots of stuff",
|
|
1486
|
+
"invocations": 1,
|
|
1487
|
+
"location": null,
|
|
1488
|
+
"numPassingAsserts": 1,
|
|
1489
|
+
"retryReasons": [],
|
|
1490
|
+
"status": "passed",
|
|
1491
|
+
"title": "lots of stuff"
|
|
1492
|
+
},
|
|
1493
|
+
{
|
|
1494
|
+
"ancestorTitles": [
|
|
1495
|
+
"Allergies",
|
|
1496
|
+
"list when:"
|
|
1497
|
+
],
|
|
1498
|
+
"duration": 0,
|
|
1499
|
+
"failureDetails": [],
|
|
1500
|
+
"failureMessages": [],
|
|
1501
|
+
"fullName": "Allergies list when: everything",
|
|
1502
|
+
"invocations": 1,
|
|
1503
|
+
"location": null,
|
|
1504
|
+
"numPassingAsserts": 1,
|
|
1505
|
+
"retryReasons": [],
|
|
1506
|
+
"status": "passed",
|
|
1507
|
+
"title": "everything"
|
|
1508
|
+
},
|
|
1509
|
+
{
|
|
1510
|
+
"ancestorTitles": [
|
|
1511
|
+
"Allergies",
|
|
1512
|
+
"list when:"
|
|
1513
|
+
],
|
|
1514
|
+
"duration": 0,
|
|
1515
|
+
"failureDetails": [],
|
|
1516
|
+
"failureMessages": [],
|
|
1517
|
+
"fullName": "Allergies list when: no allergen score parts",
|
|
1518
|
+
"invocations": 1,
|
|
1519
|
+
"location": null,
|
|
1520
|
+
"numPassingAsserts": 1,
|
|
1521
|
+
"retryReasons": [],
|
|
1522
|
+
"status": "passed",
|
|
1523
|
+
"title": "no allergen score parts"
|
|
1524
|
+
},
|
|
1525
|
+
{
|
|
1526
|
+
"ancestorTitles": [
|
|
1527
|
+
"Allergies",
|
|
1528
|
+
"list when:"
|
|
1529
|
+
],
|
|
1530
|
+
"duration": 0,
|
|
1531
|
+
"failureDetails": [],
|
|
1532
|
+
"failureMessages": [],
|
|
1533
|
+
"fullName": "Allergies list when: no allergen score parts without highest valid score",
|
|
1534
|
+
"invocations": 1,
|
|
1535
|
+
"location": null,
|
|
1536
|
+
"numPassingAsserts": 1,
|
|
1537
|
+
"retryReasons": [],
|
|
1538
|
+
"status": "passed",
|
|
1539
|
+
"title": "no allergen score parts without highest valid score"
|
|
1540
|
+
}
|
|
1541
|
+
],
|
|
1542
|
+
"endTime": 1759011367342,
|
|
1543
|
+
"message": "",
|
|
1544
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/allergies/allergies.spec.js",
|
|
1545
|
+
"startTime": 1759011367259,
|
|
1546
|
+
"status": "passed",
|
|
1547
|
+
"summary": ""
|
|
1548
|
+
}
|
|
1549
|
+
],
|
|
1550
|
+
"wasInterrupted": false
|
|
1551
|
+
}
|
|
1552
|
+
},
|
|
1553
|
+
"timeElapsed": 34.873,
|
|
1554
|
+
"cost": 0.049555600000000005,
|
|
1555
|
+
"startTime": "2025-09-27T22:15:32.484Z",
|
|
1556
|
+
"endTime": "2025-09-27T22:16:07.357Z",
|
|
1557
|
+
"finalOutput": "Perfect! I have successfully implemented the Allergies class in `allergies.js` and ensured all tests pass. Here's a summary of what was accomplished:\n\n## Implementation Summary\n\n1. **Understood the Problem**: The allergy score uses bitwise operations where each allergen has a power-of-2 value (eggs=1, peanuts=2, shellfish=4, etc.). The score represents the sum of the values for allergic items.\n\n2. **Implemented the Allergies Class**:\n - Defined a constant `ALLERGENS` object mapping allergen names to their values.\n - Constructor takes a `score` parameter and stores it.\n - `allergicTo(item)` method checks if the score has the bit set for that allergen.\n - `list()` method returns an array of all allergens the person is allergic to, ignoring higher bits not in the defined list.\n\n3. **Handled Edge Cases**:\n - Scores with higher bits (like 256, 512) are ignored as per the problem statement.\n - Invalid allergen names return `false` for `allergicTo`.\n\n4. **Test Execution**:\n - Installed dependencies with `npm install`.\n - Initially ran tests to verify the first active test passed.\n - Unskipped all remaining tests by replacing `xtest` with `test`.\n - Fixed the import statement to avoid duplicate `test` imports.\n - All 50 tests now pass successfully.\n\nThe solution correctly implements the bitwise logic for allergy detection and listing, and all test cases are satisfied."
|
|
1558
|
+
},
|
|
1559
|
+
{
|
|
1560
|
+
"exerciseName": "alphametics",
|
|
1561
|
+
"status": "success",
|
|
1562
|
+
"turns": 8,
|
|
1563
|
+
"testResult": {
|
|
1564
|
+
"passed": 9,
|
|
1565
|
+
"failed": 0,
|
|
1566
|
+
"total": 9,
|
|
1567
|
+
"skipped": 0,
|
|
1568
|
+
"success": true,
|
|
1569
|
+
"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\":1759011445506,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Solve the alphametics puzzle\"],\"duration\":2,\"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\":8,\"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\":6,\"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\":134,\"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\":379,\"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\":2167,\"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\":3021,\"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\":22546,\"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\":1759011473911,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/alphametics/alphametics.spec.js\",\"startTime\":1759011445525,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
1570
|
+
"details": {
|
|
1571
|
+
"numFailedTestSuites": 0,
|
|
1572
|
+
"numFailedTests": 0,
|
|
1573
|
+
"numPassedTestSuites": 1,
|
|
1574
|
+
"numPassedTests": 9,
|
|
1575
|
+
"numPendingTestSuites": 0,
|
|
1576
|
+
"numPendingTests": 0,
|
|
1577
|
+
"numRuntimeErrorTestSuites": 0,
|
|
1578
|
+
"numTodoTests": 0,
|
|
1579
|
+
"numTotalTestSuites": 1,
|
|
1580
|
+
"numTotalTests": 9,
|
|
1581
|
+
"openHandles": [],
|
|
1582
|
+
"snapshot": {
|
|
1583
|
+
"added": 0,
|
|
1584
|
+
"didUpdate": false,
|
|
1585
|
+
"failure": false,
|
|
1586
|
+
"filesAdded": 0,
|
|
1587
|
+
"filesRemoved": 0,
|
|
1588
|
+
"filesRemovedList": [],
|
|
1589
|
+
"filesUnmatched": 0,
|
|
1590
|
+
"filesUpdated": 0,
|
|
1591
|
+
"matched": 0,
|
|
1592
|
+
"total": 0,
|
|
1593
|
+
"unchecked": 0,
|
|
1594
|
+
"uncheckedKeysByFile": [],
|
|
1595
|
+
"unmatched": 0,
|
|
1596
|
+
"updated": 0
|
|
1597
|
+
},
|
|
1598
|
+
"startTime": 1759011445506,
|
|
1599
|
+
"success": true,
|
|
1600
|
+
"testResults": [
|
|
1601
|
+
{
|
|
1602
|
+
"assertionResults": [
|
|
1603
|
+
{
|
|
1604
|
+
"ancestorTitles": [
|
|
1605
|
+
"Solve the alphametics puzzle"
|
|
1606
|
+
],
|
|
1607
|
+
"duration": 2,
|
|
1608
|
+
"failureDetails": [],
|
|
1609
|
+
"failureMessages": [],
|
|
1610
|
+
"fullName": "Solve the alphametics puzzle puzzle with three letters",
|
|
1611
|
+
"invocations": 1,
|
|
1612
|
+
"location": null,
|
|
1613
|
+
"numPassingAsserts": 1,
|
|
1614
|
+
"retryReasons": [],
|
|
1615
|
+
"status": "passed",
|
|
1616
|
+
"title": "puzzle with three letters"
|
|
1617
|
+
},
|
|
1618
|
+
{
|
|
1619
|
+
"ancestorTitles": [
|
|
1620
|
+
"Solve the alphametics puzzle"
|
|
1621
|
+
],
|
|
1622
|
+
"duration": 0,
|
|
1623
|
+
"failureDetails": [],
|
|
1624
|
+
"failureMessages": [],
|
|
1625
|
+
"fullName": "Solve the alphametics puzzle solution must have unique value for each letter",
|
|
1626
|
+
"invocations": 1,
|
|
1627
|
+
"location": null,
|
|
1628
|
+
"numPassingAsserts": 1,
|
|
1629
|
+
"retryReasons": [],
|
|
1630
|
+
"status": "passed",
|
|
1631
|
+
"title": "solution must have unique value for each letter"
|
|
1632
|
+
},
|
|
1633
|
+
{
|
|
1634
|
+
"ancestorTitles": [
|
|
1635
|
+
"Solve the alphametics puzzle"
|
|
1636
|
+
],
|
|
1637
|
+
"duration": 8,
|
|
1638
|
+
"failureDetails": [],
|
|
1639
|
+
"failureMessages": [],
|
|
1640
|
+
"fullName": "Solve the alphametics puzzle leading zero solution is invalid",
|
|
1641
|
+
"invocations": 1,
|
|
1642
|
+
"location": null,
|
|
1643
|
+
"numPassingAsserts": 1,
|
|
1644
|
+
"retryReasons": [],
|
|
1645
|
+
"status": "passed",
|
|
1646
|
+
"title": "leading zero solution is invalid"
|
|
1647
|
+
},
|
|
1648
|
+
{
|
|
1649
|
+
"ancestorTitles": [
|
|
1650
|
+
"Solve the alphametics puzzle"
|
|
1651
|
+
],
|
|
1652
|
+
"duration": 6,
|
|
1653
|
+
"failureDetails": [],
|
|
1654
|
+
"failureMessages": [],
|
|
1655
|
+
"fullName": "Solve the alphametics puzzle puzzle with four letters",
|
|
1656
|
+
"invocations": 1,
|
|
1657
|
+
"location": null,
|
|
1658
|
+
"numPassingAsserts": 1,
|
|
1659
|
+
"retryReasons": [],
|
|
1660
|
+
"status": "passed",
|
|
1661
|
+
"title": "puzzle with four letters"
|
|
1662
|
+
},
|
|
1663
|
+
{
|
|
1664
|
+
"ancestorTitles": [
|
|
1665
|
+
"Solve the alphametics puzzle"
|
|
1666
|
+
],
|
|
1667
|
+
"duration": 134,
|
|
1668
|
+
"failureDetails": [],
|
|
1669
|
+
"failureMessages": [],
|
|
1670
|
+
"fullName": "Solve the alphametics puzzle puzzle with six letters",
|
|
1671
|
+
"invocations": 1,
|
|
1672
|
+
"location": null,
|
|
1673
|
+
"numPassingAsserts": 1,
|
|
1674
|
+
"retryReasons": [],
|
|
1675
|
+
"status": "passed",
|
|
1676
|
+
"title": "puzzle with six letters"
|
|
1677
|
+
},
|
|
1678
|
+
{
|
|
1679
|
+
"ancestorTitles": [
|
|
1680
|
+
"Solve the alphametics puzzle"
|
|
1681
|
+
],
|
|
1682
|
+
"duration": 379,
|
|
1683
|
+
"failureDetails": [],
|
|
1684
|
+
"failureMessages": [],
|
|
1685
|
+
"fullName": "Solve the alphametics puzzle puzzle with seven letters",
|
|
1686
|
+
"invocations": 1,
|
|
1687
|
+
"location": null,
|
|
1688
|
+
"numPassingAsserts": 1,
|
|
1689
|
+
"retryReasons": [],
|
|
1690
|
+
"status": "passed",
|
|
1691
|
+
"title": "puzzle with seven letters"
|
|
1692
|
+
},
|
|
1693
|
+
{
|
|
1694
|
+
"ancestorTitles": [
|
|
1695
|
+
"Solve the alphametics puzzle"
|
|
1696
|
+
],
|
|
1697
|
+
"duration": 2167,
|
|
1698
|
+
"failureDetails": [],
|
|
1699
|
+
"failureMessages": [],
|
|
1700
|
+
"fullName": "Solve the alphametics puzzle puzzle with eight letters",
|
|
1701
|
+
"invocations": 1,
|
|
1702
|
+
"location": null,
|
|
1703
|
+
"numPassingAsserts": 1,
|
|
1704
|
+
"retryReasons": [],
|
|
1705
|
+
"status": "passed",
|
|
1706
|
+
"title": "puzzle with eight letters"
|
|
1707
|
+
},
|
|
1708
|
+
{
|
|
1709
|
+
"ancestorTitles": [
|
|
1710
|
+
"Solve the alphametics puzzle"
|
|
1711
|
+
],
|
|
1712
|
+
"duration": 3021,
|
|
1713
|
+
"failureDetails": [],
|
|
1714
|
+
"failureMessages": [],
|
|
1715
|
+
"fullName": "Solve the alphametics puzzle puzzle with ten letters",
|
|
1716
|
+
"invocations": 1,
|
|
1717
|
+
"location": null,
|
|
1718
|
+
"numPassingAsserts": 1,
|
|
1719
|
+
"retryReasons": [],
|
|
1720
|
+
"status": "passed",
|
|
1721
|
+
"title": "puzzle with ten letters"
|
|
1722
|
+
},
|
|
1723
|
+
{
|
|
1724
|
+
"ancestorTitles": [
|
|
1725
|
+
"Solve the alphametics puzzle"
|
|
1726
|
+
],
|
|
1727
|
+
"duration": 22546,
|
|
1728
|
+
"failureDetails": [],
|
|
1729
|
+
"failureMessages": [],
|
|
1730
|
+
"fullName": "Solve the alphametics puzzle puzzle with ten letters and 199 addends",
|
|
1731
|
+
"invocations": 1,
|
|
1732
|
+
"location": null,
|
|
1733
|
+
"numPassingAsserts": 1,
|
|
1734
|
+
"retryReasons": [],
|
|
1735
|
+
"status": "passed",
|
|
1736
|
+
"title": "puzzle with ten letters and 199 addends"
|
|
1737
|
+
}
|
|
1738
|
+
],
|
|
1739
|
+
"endTime": 1759011473911,
|
|
1740
|
+
"message": "",
|
|
1741
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/alphametics/alphametics.spec.js",
|
|
1742
|
+
"startTime": 1759011445525,
|
|
1743
|
+
"status": "passed",
|
|
1744
|
+
"summary": ""
|
|
1745
|
+
}
|
|
1746
|
+
],
|
|
1747
|
+
"wasInterrupted": false
|
|
1748
|
+
}
|
|
1749
|
+
},
|
|
1750
|
+
"timeElapsed": 106.582,
|
|
1751
|
+
"cost": 0.027242440000000003,
|
|
1752
|
+
"startTime": "2025-09-27T22:16:07.371Z",
|
|
1753
|
+
"endTime": "2025-09-27T22:17:53.953Z",
|
|
1754
|
+
"finalOutput": "The alphametics solver has been successfully implemented. The `solve` function in `alphametics.js` parses the puzzle string, extracts unique letters and identifies leading letters to prevent leading zeros, generates all permutations of digits for the letters (up to 10 unique letters), and checks each permutation for a valid solution where the sum of the addends equals the result word. All tests now pass, including the complex puzzle with 199 addends."
|
|
1755
|
+
},
|
|
1756
|
+
{
|
|
1757
|
+
"exerciseName": "anagram",
|
|
1758
|
+
"status": "success",
|
|
1759
|
+
"turns": 20,
|
|
1760
|
+
"testResult": {
|
|
1761
|
+
"passed": 18,
|
|
1762
|
+
"failed": 0,
|
|
1763
|
+
"total": 18,
|
|
1764
|
+
"skipped": 0,
|
|
1765
|
+
"success": true,
|
|
1766
|
+
"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\":1759011518832,\"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\":1,\"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\":0,\"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\":1,\"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\":1759011518935,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/anagram/anagram.spec.js\",\"startTime\":1759011518842,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
1767
|
+
"details": {
|
|
1768
|
+
"numFailedTestSuites": 0,
|
|
1769
|
+
"numFailedTests": 0,
|
|
1770
|
+
"numPassedTestSuites": 1,
|
|
1771
|
+
"numPassedTests": 18,
|
|
1772
|
+
"numPendingTestSuites": 0,
|
|
1773
|
+
"numPendingTests": 0,
|
|
1774
|
+
"numRuntimeErrorTestSuites": 0,
|
|
1775
|
+
"numTodoTests": 0,
|
|
1776
|
+
"numTotalTestSuites": 1,
|
|
1777
|
+
"numTotalTests": 18,
|
|
1778
|
+
"openHandles": [],
|
|
1779
|
+
"snapshot": {
|
|
1780
|
+
"added": 0,
|
|
1781
|
+
"didUpdate": false,
|
|
1782
|
+
"failure": false,
|
|
1783
|
+
"filesAdded": 0,
|
|
1784
|
+
"filesRemoved": 0,
|
|
1785
|
+
"filesRemovedList": [],
|
|
1786
|
+
"filesUnmatched": 0,
|
|
1787
|
+
"filesUpdated": 0,
|
|
1788
|
+
"matched": 0,
|
|
1789
|
+
"total": 0,
|
|
1790
|
+
"unchecked": 0,
|
|
1791
|
+
"uncheckedKeysByFile": [],
|
|
1792
|
+
"unmatched": 0,
|
|
1793
|
+
"updated": 0
|
|
1794
|
+
},
|
|
1795
|
+
"startTime": 1759011518832,
|
|
1796
|
+
"success": true,
|
|
1797
|
+
"testResults": [
|
|
1798
|
+
{
|
|
1799
|
+
"assertionResults": [
|
|
1800
|
+
{
|
|
1801
|
+
"ancestorTitles": [
|
|
1802
|
+
"Anagram"
|
|
1803
|
+
],
|
|
1804
|
+
"duration": 1,
|
|
1805
|
+
"failureDetails": [],
|
|
1806
|
+
"failureMessages": [],
|
|
1807
|
+
"fullName": "Anagram no matches",
|
|
1808
|
+
"invocations": 1,
|
|
1809
|
+
"location": null,
|
|
1810
|
+
"numPassingAsserts": 1,
|
|
1811
|
+
"retryReasons": [],
|
|
1812
|
+
"status": "passed",
|
|
1813
|
+
"title": "no matches"
|
|
1814
|
+
},
|
|
1815
|
+
{
|
|
1816
|
+
"ancestorTitles": [
|
|
1817
|
+
"Anagram"
|
|
1818
|
+
],
|
|
1819
|
+
"duration": 0,
|
|
1820
|
+
"failureDetails": [],
|
|
1821
|
+
"failureMessages": [],
|
|
1822
|
+
"fullName": "Anagram detects two anagrams",
|
|
1823
|
+
"invocations": 1,
|
|
1824
|
+
"location": null,
|
|
1825
|
+
"numPassingAsserts": 1,
|
|
1826
|
+
"retryReasons": [],
|
|
1827
|
+
"status": "passed",
|
|
1828
|
+
"title": "detects two anagrams"
|
|
1829
|
+
},
|
|
1830
|
+
{
|
|
1831
|
+
"ancestorTitles": [
|
|
1832
|
+
"Anagram"
|
|
1833
|
+
],
|
|
1834
|
+
"duration": 1,
|
|
1835
|
+
"failureDetails": [],
|
|
1836
|
+
"failureMessages": [],
|
|
1837
|
+
"fullName": "Anagram does not detect anagram subsets",
|
|
1838
|
+
"invocations": 1,
|
|
1839
|
+
"location": null,
|
|
1840
|
+
"numPassingAsserts": 1,
|
|
1841
|
+
"retryReasons": [],
|
|
1842
|
+
"status": "passed",
|
|
1843
|
+
"title": "does not detect anagram subsets"
|
|
1844
|
+
},
|
|
1845
|
+
{
|
|
1846
|
+
"ancestorTitles": [
|
|
1847
|
+
"Anagram"
|
|
1848
|
+
],
|
|
1849
|
+
"duration": 0,
|
|
1850
|
+
"failureDetails": [],
|
|
1851
|
+
"failureMessages": [],
|
|
1852
|
+
"fullName": "Anagram detects anagram",
|
|
1853
|
+
"invocations": 1,
|
|
1854
|
+
"location": null,
|
|
1855
|
+
"numPassingAsserts": 1,
|
|
1856
|
+
"retryReasons": [],
|
|
1857
|
+
"status": "passed",
|
|
1858
|
+
"title": "detects anagram"
|
|
1859
|
+
},
|
|
1860
|
+
{
|
|
1861
|
+
"ancestorTitles": [
|
|
1862
|
+
"Anagram"
|
|
1863
|
+
],
|
|
1864
|
+
"duration": 0,
|
|
1865
|
+
"failureDetails": [],
|
|
1866
|
+
"failureMessages": [],
|
|
1867
|
+
"fullName": "Anagram detects three anagrams",
|
|
1868
|
+
"invocations": 1,
|
|
1869
|
+
"location": null,
|
|
1870
|
+
"numPassingAsserts": 1,
|
|
1871
|
+
"retryReasons": [],
|
|
1872
|
+
"status": "passed",
|
|
1873
|
+
"title": "detects three anagrams"
|
|
1874
|
+
},
|
|
1875
|
+
{
|
|
1876
|
+
"ancestorTitles": [
|
|
1877
|
+
"Anagram"
|
|
1878
|
+
],
|
|
1879
|
+
"duration": 0,
|
|
1880
|
+
"failureDetails": [],
|
|
1881
|
+
"failureMessages": [],
|
|
1882
|
+
"fullName": "Anagram detects multiple anagrams with different case",
|
|
1883
|
+
"invocations": 1,
|
|
1884
|
+
"location": null,
|
|
1885
|
+
"numPassingAsserts": 1,
|
|
1886
|
+
"retryReasons": [],
|
|
1887
|
+
"status": "passed",
|
|
1888
|
+
"title": "detects multiple anagrams with different case"
|
|
1889
|
+
},
|
|
1890
|
+
{
|
|
1891
|
+
"ancestorTitles": [
|
|
1892
|
+
"Anagram"
|
|
1893
|
+
],
|
|
1894
|
+
"duration": 0,
|
|
1895
|
+
"failureDetails": [],
|
|
1896
|
+
"failureMessages": [],
|
|
1897
|
+
"fullName": "Anagram does not detect non-anagrams with identical checksum",
|
|
1898
|
+
"invocations": 1,
|
|
1899
|
+
"location": null,
|
|
1900
|
+
"numPassingAsserts": 1,
|
|
1901
|
+
"retryReasons": [],
|
|
1902
|
+
"status": "passed",
|
|
1903
|
+
"title": "does not detect non-anagrams with identical checksum"
|
|
1904
|
+
},
|
|
1905
|
+
{
|
|
1906
|
+
"ancestorTitles": [
|
|
1907
|
+
"Anagram"
|
|
1908
|
+
],
|
|
1909
|
+
"duration": 0,
|
|
1910
|
+
"failureDetails": [],
|
|
1911
|
+
"failureMessages": [],
|
|
1912
|
+
"fullName": "Anagram detects anagrams case-insensitively",
|
|
1913
|
+
"invocations": 1,
|
|
1914
|
+
"location": null,
|
|
1915
|
+
"numPassingAsserts": 1,
|
|
1916
|
+
"retryReasons": [],
|
|
1917
|
+
"status": "passed",
|
|
1918
|
+
"title": "detects anagrams case-insensitively"
|
|
1919
|
+
},
|
|
1920
|
+
{
|
|
1921
|
+
"ancestorTitles": [
|
|
1922
|
+
"Anagram"
|
|
1923
|
+
],
|
|
1924
|
+
"duration": 1,
|
|
1925
|
+
"failureDetails": [],
|
|
1926
|
+
"failureMessages": [],
|
|
1927
|
+
"fullName": "Anagram detects anagrams using case-insensitive subject",
|
|
1928
|
+
"invocations": 1,
|
|
1929
|
+
"location": null,
|
|
1930
|
+
"numPassingAsserts": 1,
|
|
1931
|
+
"retryReasons": [],
|
|
1932
|
+
"status": "passed",
|
|
1933
|
+
"title": "detects anagrams using case-insensitive subject"
|
|
1934
|
+
},
|
|
1935
|
+
{
|
|
1936
|
+
"ancestorTitles": [
|
|
1937
|
+
"Anagram"
|
|
1938
|
+
],
|
|
1939
|
+
"duration": 0,
|
|
1940
|
+
"failureDetails": [],
|
|
1941
|
+
"failureMessages": [],
|
|
1942
|
+
"fullName": "Anagram detects anagrams using case-insensitive possible matches",
|
|
1943
|
+
"invocations": 1,
|
|
1944
|
+
"location": null,
|
|
1945
|
+
"numPassingAsserts": 1,
|
|
1946
|
+
"retryReasons": [],
|
|
1947
|
+
"status": "passed",
|
|
1948
|
+
"title": "detects anagrams using case-insensitive possible matches"
|
|
1949
|
+
},
|
|
1950
|
+
{
|
|
1951
|
+
"ancestorTitles": [
|
|
1952
|
+
"Anagram"
|
|
1953
|
+
],
|
|
1954
|
+
"duration": 0,
|
|
1955
|
+
"failureDetails": [],
|
|
1956
|
+
"failureMessages": [],
|
|
1957
|
+
"fullName": "Anagram does not detect an anagram if the original word is repeated",
|
|
1958
|
+
"invocations": 1,
|
|
1959
|
+
"location": null,
|
|
1960
|
+
"numPassingAsserts": 1,
|
|
1961
|
+
"retryReasons": [],
|
|
1962
|
+
"status": "passed",
|
|
1963
|
+
"title": "does not detect an anagram if the original word is repeated"
|
|
1964
|
+
},
|
|
1965
|
+
{
|
|
1966
|
+
"ancestorTitles": [
|
|
1967
|
+
"Anagram"
|
|
1968
|
+
],
|
|
1969
|
+
"duration": 0,
|
|
1970
|
+
"failureDetails": [],
|
|
1971
|
+
"failureMessages": [],
|
|
1972
|
+
"fullName": "Anagram anagrams must use all letters exactly once",
|
|
1973
|
+
"invocations": 1,
|
|
1974
|
+
"location": null,
|
|
1975
|
+
"numPassingAsserts": 1,
|
|
1976
|
+
"retryReasons": [],
|
|
1977
|
+
"status": "passed",
|
|
1978
|
+
"title": "anagrams must use all letters exactly once"
|
|
1979
|
+
},
|
|
1980
|
+
{
|
|
1981
|
+
"ancestorTitles": [
|
|
1982
|
+
"Anagram"
|
|
1983
|
+
],
|
|
1984
|
+
"duration": 0,
|
|
1985
|
+
"failureDetails": [],
|
|
1986
|
+
"failureMessages": [],
|
|
1987
|
+
"fullName": "Anagram words are not anagrams of themselves",
|
|
1988
|
+
"invocations": 1,
|
|
1989
|
+
"location": null,
|
|
1990
|
+
"numPassingAsserts": 1,
|
|
1991
|
+
"retryReasons": [],
|
|
1992
|
+
"status": "passed",
|
|
1993
|
+
"title": "words are not anagrams of themselves"
|
|
1994
|
+
},
|
|
1995
|
+
{
|
|
1996
|
+
"ancestorTitles": [
|
|
1997
|
+
"Anagram"
|
|
1998
|
+
],
|
|
1999
|
+
"duration": 0,
|
|
2000
|
+
"failureDetails": [],
|
|
2001
|
+
"failureMessages": [],
|
|
2002
|
+
"fullName": "Anagram words are not anagrams of themselves even if letter case is partially different",
|
|
2003
|
+
"invocations": 1,
|
|
2004
|
+
"location": null,
|
|
2005
|
+
"numPassingAsserts": 1,
|
|
2006
|
+
"retryReasons": [],
|
|
2007
|
+
"status": "passed",
|
|
2008
|
+
"title": "words are not anagrams of themselves even if letter case is partially different"
|
|
2009
|
+
},
|
|
2010
|
+
{
|
|
2011
|
+
"ancestorTitles": [
|
|
2012
|
+
"Anagram"
|
|
2013
|
+
],
|
|
2014
|
+
"duration": 0,
|
|
2015
|
+
"failureDetails": [],
|
|
2016
|
+
"failureMessages": [],
|
|
2017
|
+
"fullName": "Anagram words are not anagrams of themselves even if letter case is completely different",
|
|
2018
|
+
"invocations": 1,
|
|
2019
|
+
"location": null,
|
|
2020
|
+
"numPassingAsserts": 1,
|
|
2021
|
+
"retryReasons": [],
|
|
2022
|
+
"status": "passed",
|
|
2023
|
+
"title": "words are not anagrams of themselves even if letter case is completely different"
|
|
2024
|
+
},
|
|
2025
|
+
{
|
|
2026
|
+
"ancestorTitles": [
|
|
2027
|
+
"Anagram"
|
|
2028
|
+
],
|
|
2029
|
+
"duration": 0,
|
|
2030
|
+
"failureDetails": [],
|
|
2031
|
+
"failureMessages": [],
|
|
2032
|
+
"fullName": "Anagram words other than themselves can be anagrams",
|
|
2033
|
+
"invocations": 1,
|
|
2034
|
+
"location": null,
|
|
2035
|
+
"numPassingAsserts": 1,
|
|
2036
|
+
"retryReasons": [],
|
|
2037
|
+
"status": "passed",
|
|
2038
|
+
"title": "words other than themselves can be anagrams"
|
|
2039
|
+
},
|
|
2040
|
+
{
|
|
2041
|
+
"ancestorTitles": [
|
|
2042
|
+
"Anagram"
|
|
2043
|
+
],
|
|
2044
|
+
"duration": 0,
|
|
2045
|
+
"failureDetails": [],
|
|
2046
|
+
"failureMessages": [],
|
|
2047
|
+
"fullName": "Anagram handles case of greek letters",
|
|
2048
|
+
"invocations": 1,
|
|
2049
|
+
"location": null,
|
|
2050
|
+
"numPassingAsserts": 1,
|
|
2051
|
+
"retryReasons": [],
|
|
2052
|
+
"status": "passed",
|
|
2053
|
+
"title": "handles case of greek letters"
|
|
2054
|
+
},
|
|
2055
|
+
{
|
|
2056
|
+
"ancestorTitles": [
|
|
2057
|
+
"Anagram"
|
|
2058
|
+
],
|
|
2059
|
+
"duration": 0,
|
|
2060
|
+
"failureDetails": [],
|
|
2061
|
+
"failureMessages": [],
|
|
2062
|
+
"fullName": "Anagram different characters may have the same bytes",
|
|
2063
|
+
"invocations": 1,
|
|
2064
|
+
"location": null,
|
|
2065
|
+
"numPassingAsserts": 1,
|
|
2066
|
+
"retryReasons": [],
|
|
2067
|
+
"status": "passed",
|
|
2068
|
+
"title": "different characters may have the same bytes"
|
|
2069
|
+
}
|
|
2070
|
+
],
|
|
2071
|
+
"endTime": 1759011518935,
|
|
2072
|
+
"message": "",
|
|
2073
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/anagram/anagram.spec.js",
|
|
2074
|
+
"startTime": 1759011518842,
|
|
2075
|
+
"status": "passed",
|
|
2076
|
+
"summary": ""
|
|
2077
|
+
}
|
|
2078
|
+
],
|
|
2079
|
+
"wasInterrupted": false
|
|
2080
|
+
}
|
|
2081
|
+
},
|
|
2082
|
+
"timeElapsed": 44.978,
|
|
2083
|
+
"cost": 0.06955838000000002,
|
|
2084
|
+
"startTime": "2025-09-27T22:17:53.967Z",
|
|
2085
|
+
"endTime": "2025-09-27T22:18:38.945Z",
|
|
2086
|
+
"finalOutput": "I have successfully implemented the `findAnagrams` function in `anagram.js`. The function takes a subject word and a list of candidate words, and returns the candidates that are anagrams of the subject, excluding the subject itself (case-insensitively). It handles case insensitivity, Greek letters, and ensures exact letter matching.\n\nAll 18 tests now pass, including the previously skipped ones. The implementation uses a normalization function that lowercases the word, splits into characters, sorts them, and joins back to create a sorted string for comparison. This ensures anagrams are detected correctly while preserving the original casing in the output.\n\nThe code passed linting without issues."
|
|
2087
|
+
},
|
|
2088
|
+
{
|
|
2089
|
+
"exerciseName": "armstrong-numbers",
|
|
2090
|
+
"status": "success",
|
|
2091
|
+
"turns": 13,
|
|
2092
|
+
"testResult": {
|
|
2093
|
+
"passed": 11,
|
|
2094
|
+
"failed": 0,
|
|
2095
|
+
"total": 11,
|
|
2096
|
+
"skipped": 0,
|
|
2097
|
+
"success": true,
|
|
2098
|
+
"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\":1759011558541,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Armstrong Numbers\"],\"duration\":1,\"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\":1,\"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\":1759011558620,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/armstrong-numbers/armstrong-numbers.spec.js\",\"startTime\":1759011558551,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
2099
|
+
"details": {
|
|
2100
|
+
"numFailedTestSuites": 0,
|
|
2101
|
+
"numFailedTests": 0,
|
|
2102
|
+
"numPassedTestSuites": 1,
|
|
2103
|
+
"numPassedTests": 11,
|
|
2104
|
+
"numPendingTestSuites": 0,
|
|
2105
|
+
"numPendingTests": 0,
|
|
2106
|
+
"numRuntimeErrorTestSuites": 0,
|
|
2107
|
+
"numTodoTests": 0,
|
|
2108
|
+
"numTotalTestSuites": 1,
|
|
2109
|
+
"numTotalTests": 11,
|
|
2110
|
+
"openHandles": [],
|
|
2111
|
+
"snapshot": {
|
|
2112
|
+
"added": 0,
|
|
2113
|
+
"didUpdate": false,
|
|
2114
|
+
"failure": false,
|
|
2115
|
+
"filesAdded": 0,
|
|
2116
|
+
"filesRemoved": 0,
|
|
2117
|
+
"filesRemovedList": [],
|
|
2118
|
+
"filesUnmatched": 0,
|
|
2119
|
+
"filesUpdated": 0,
|
|
2120
|
+
"matched": 0,
|
|
2121
|
+
"total": 0,
|
|
2122
|
+
"unchecked": 0,
|
|
2123
|
+
"uncheckedKeysByFile": [],
|
|
2124
|
+
"unmatched": 0,
|
|
2125
|
+
"updated": 0
|
|
2126
|
+
},
|
|
2127
|
+
"startTime": 1759011558541,
|
|
2128
|
+
"success": true,
|
|
2129
|
+
"testResults": [
|
|
2130
|
+
{
|
|
2131
|
+
"assertionResults": [
|
|
2132
|
+
{
|
|
2133
|
+
"ancestorTitles": [
|
|
2134
|
+
"Armstrong Numbers"
|
|
2135
|
+
],
|
|
2136
|
+
"duration": 1,
|
|
2137
|
+
"failureDetails": [],
|
|
2138
|
+
"failureMessages": [],
|
|
2139
|
+
"fullName": "Armstrong Numbers Zero is an Armstrong number",
|
|
2140
|
+
"invocations": 1,
|
|
2141
|
+
"location": null,
|
|
2142
|
+
"numPassingAsserts": 1,
|
|
2143
|
+
"retryReasons": [],
|
|
2144
|
+
"status": "passed",
|
|
2145
|
+
"title": "Zero is an Armstrong number"
|
|
2146
|
+
},
|
|
2147
|
+
{
|
|
2148
|
+
"ancestorTitles": [
|
|
2149
|
+
"Armstrong Numbers"
|
|
2150
|
+
],
|
|
2151
|
+
"duration": 0,
|
|
2152
|
+
"failureDetails": [],
|
|
2153
|
+
"failureMessages": [],
|
|
2154
|
+
"fullName": "Armstrong Numbers Single-digit numbers are Armstrong numbers",
|
|
2155
|
+
"invocations": 1,
|
|
2156
|
+
"location": null,
|
|
2157
|
+
"numPassingAsserts": 1,
|
|
2158
|
+
"retryReasons": [],
|
|
2159
|
+
"status": "passed",
|
|
2160
|
+
"title": "Single-digit numbers are Armstrong numbers"
|
|
2161
|
+
},
|
|
2162
|
+
{
|
|
2163
|
+
"ancestorTitles": [
|
|
2164
|
+
"Armstrong Numbers"
|
|
2165
|
+
],
|
|
2166
|
+
"duration": 0,
|
|
2167
|
+
"failureDetails": [],
|
|
2168
|
+
"failureMessages": [],
|
|
2169
|
+
"fullName": "Armstrong Numbers There are no two-digit Armstrong numbers",
|
|
2170
|
+
"invocations": 1,
|
|
2171
|
+
"location": null,
|
|
2172
|
+
"numPassingAsserts": 1,
|
|
2173
|
+
"retryReasons": [],
|
|
2174
|
+
"status": "passed",
|
|
2175
|
+
"title": "There are no two-digit Armstrong numbers"
|
|
2176
|
+
},
|
|
2177
|
+
{
|
|
2178
|
+
"ancestorTitles": [
|
|
2179
|
+
"Armstrong Numbers"
|
|
2180
|
+
],
|
|
2181
|
+
"duration": 0,
|
|
2182
|
+
"failureDetails": [],
|
|
2183
|
+
"failureMessages": [],
|
|
2184
|
+
"fullName": "Armstrong Numbers Three-digit number that is an Armstrong number",
|
|
2185
|
+
"invocations": 1,
|
|
2186
|
+
"location": null,
|
|
2187
|
+
"numPassingAsserts": 1,
|
|
2188
|
+
"retryReasons": [],
|
|
2189
|
+
"status": "passed",
|
|
2190
|
+
"title": "Three-digit number that is an Armstrong number"
|
|
2191
|
+
},
|
|
2192
|
+
{
|
|
2193
|
+
"ancestorTitles": [
|
|
2194
|
+
"Armstrong Numbers"
|
|
2195
|
+
],
|
|
2196
|
+
"duration": 1,
|
|
2197
|
+
"failureDetails": [],
|
|
2198
|
+
"failureMessages": [],
|
|
2199
|
+
"fullName": "Armstrong Numbers Three-digit number that is not an Armstrong number",
|
|
2200
|
+
"invocations": 1,
|
|
2201
|
+
"location": null,
|
|
2202
|
+
"numPassingAsserts": 1,
|
|
2203
|
+
"retryReasons": [],
|
|
2204
|
+
"status": "passed",
|
|
2205
|
+
"title": "Three-digit number that is not an Armstrong number"
|
|
2206
|
+
},
|
|
2207
|
+
{
|
|
2208
|
+
"ancestorTitles": [
|
|
2209
|
+
"Armstrong Numbers"
|
|
2210
|
+
],
|
|
2211
|
+
"duration": 0,
|
|
2212
|
+
"failureDetails": [],
|
|
2213
|
+
"failureMessages": [],
|
|
2214
|
+
"fullName": "Armstrong Numbers Four-digit number that is an Armstrong number",
|
|
2215
|
+
"invocations": 1,
|
|
2216
|
+
"location": null,
|
|
2217
|
+
"numPassingAsserts": 1,
|
|
2218
|
+
"retryReasons": [],
|
|
2219
|
+
"status": "passed",
|
|
2220
|
+
"title": "Four-digit number that is an Armstrong number"
|
|
2221
|
+
},
|
|
2222
|
+
{
|
|
2223
|
+
"ancestorTitles": [
|
|
2224
|
+
"Armstrong Numbers"
|
|
2225
|
+
],
|
|
2226
|
+
"duration": 0,
|
|
2227
|
+
"failureDetails": [],
|
|
2228
|
+
"failureMessages": [],
|
|
2229
|
+
"fullName": "Armstrong Numbers Four-digit number that is not an Armstrong number",
|
|
2230
|
+
"invocations": 1,
|
|
2231
|
+
"location": null,
|
|
2232
|
+
"numPassingAsserts": 1,
|
|
2233
|
+
"retryReasons": [],
|
|
2234
|
+
"status": "passed",
|
|
2235
|
+
"title": "Four-digit number that is not an Armstrong number"
|
|
2236
|
+
},
|
|
2237
|
+
{
|
|
2238
|
+
"ancestorTitles": [
|
|
2239
|
+
"Armstrong Numbers"
|
|
2240
|
+
],
|
|
2241
|
+
"duration": 0,
|
|
2242
|
+
"failureDetails": [],
|
|
2243
|
+
"failureMessages": [],
|
|
2244
|
+
"fullName": "Armstrong Numbers Seven-digit number that is an Armstrong number",
|
|
2245
|
+
"invocations": 1,
|
|
2246
|
+
"location": null,
|
|
2247
|
+
"numPassingAsserts": 1,
|
|
2248
|
+
"retryReasons": [],
|
|
2249
|
+
"status": "passed",
|
|
2250
|
+
"title": "Seven-digit number that is an Armstrong number"
|
|
2251
|
+
},
|
|
2252
|
+
{
|
|
2253
|
+
"ancestorTitles": [
|
|
2254
|
+
"Armstrong Numbers"
|
|
2255
|
+
],
|
|
2256
|
+
"duration": 0,
|
|
2257
|
+
"failureDetails": [],
|
|
2258
|
+
"failureMessages": [],
|
|
2259
|
+
"fullName": "Armstrong Numbers Seven-digit number that is not an Armstrong number",
|
|
2260
|
+
"invocations": 1,
|
|
2261
|
+
"location": null,
|
|
2262
|
+
"numPassingAsserts": 1,
|
|
2263
|
+
"retryReasons": [],
|
|
2264
|
+
"status": "passed",
|
|
2265
|
+
"title": "Seven-digit number that is not an Armstrong number"
|
|
2266
|
+
},
|
|
2267
|
+
{
|
|
2268
|
+
"ancestorTitles": [
|
|
2269
|
+
"Armstrong Numbers"
|
|
2270
|
+
],
|
|
2271
|
+
"duration": 0,
|
|
2272
|
+
"failureDetails": [],
|
|
2273
|
+
"failureMessages": [],
|
|
2274
|
+
"fullName": "Armstrong Numbers Armstrong number containing seven zeroes",
|
|
2275
|
+
"invocations": 1,
|
|
2276
|
+
"location": null,
|
|
2277
|
+
"numPassingAsserts": 1,
|
|
2278
|
+
"retryReasons": [],
|
|
2279
|
+
"status": "passed",
|
|
2280
|
+
"title": "Armstrong number containing seven zeroes"
|
|
2281
|
+
},
|
|
2282
|
+
{
|
|
2283
|
+
"ancestorTitles": [
|
|
2284
|
+
"Armstrong Numbers"
|
|
2285
|
+
],
|
|
2286
|
+
"duration": 0,
|
|
2287
|
+
"failureDetails": [],
|
|
2288
|
+
"failureMessages": [],
|
|
2289
|
+
"fullName": "Armstrong Numbers The largest and last Armstrong number",
|
|
2290
|
+
"invocations": 1,
|
|
2291
|
+
"location": null,
|
|
2292
|
+
"numPassingAsserts": 1,
|
|
2293
|
+
"retryReasons": [],
|
|
2294
|
+
"status": "passed",
|
|
2295
|
+
"title": "The largest and last Armstrong number"
|
|
2296
|
+
}
|
|
2297
|
+
],
|
|
2298
|
+
"endTime": 1759011558620,
|
|
2299
|
+
"message": "",
|
|
2300
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/armstrong-numbers/armstrong-numbers.spec.js",
|
|
2301
|
+
"startTime": 1759011558551,
|
|
2302
|
+
"status": "passed",
|
|
2303
|
+
"summary": ""
|
|
2304
|
+
}
|
|
2305
|
+
],
|
|
2306
|
+
"wasInterrupted": false
|
|
2307
|
+
}
|
|
2308
|
+
},
|
|
2309
|
+
"timeElapsed": 39.689,
|
|
2310
|
+
"cost": 0.03426234,
|
|
2311
|
+
"startTime": "2025-09-27T22:18:38.961Z",
|
|
2312
|
+
"endTime": "2025-09-27T22:19:18.650Z",
|
|
2313
|
+
"finalOutput": "## Summary\n\nI have successfully implemented the Armstrong number checker. Here's what I accomplished:\n\n### Implementation Details\n- **Function**: `isArmstrongNumber(num)` in `armstrong-numbers.js`\n- **Logic**: Converts the input to string to extract digits, calculates the sum of each digit raised to the power of the total number of digits, and compares it to the original number\n- **BigInt Support**: Uses BigInt for calculations to handle very large numbers (up to 39 digits as shown in the tests)\n- **Edge Cases**: Handles zero, single-digit numbers, and large BigInts correctly\n\n### Key Features\n- Works with both regular numbers and BigInts\n- Efficient: O(d) time complexity where d is the number of digits\n- No external dependencies beyond what's provided\n\n### Testing Results\n- ✅ All 11 tests pass\n- ✅ No linting issues\n- ✅ Handles all test cases including:\n - Zero (0)\n - Single-digit numbers (5)\n - Two-digit numbers (10 - not Armstrong)\n - Three-digit numbers (153 - Armstrong, 100 - not)\n - Four-digit numbers (9474 - Armstrong, 9475 - not)\n - Seven-digit numbers (9926315 - Armstrong, 9926314 - not)\n - Very large BigInts with many zeros and the largest known Armstrong number\n\nThe implementation is complete, all tests pass, and the code is clean with no linting errors."
|
|
2314
|
+
},
|
|
2315
|
+
{
|
|
2316
|
+
"exerciseName": "atbash-cipher",
|
|
2317
|
+
"status": "success",
|
|
2318
|
+
"turns": 15,
|
|
2319
|
+
"testResult": {
|
|
2320
|
+
"passed": 14,
|
|
2321
|
+
"failed": 0,
|
|
2322
|
+
"total": 14,
|
|
2323
|
+
"skipped": 0,
|
|
2324
|
+
"success": true,
|
|
2325
|
+
"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\":1759011597089,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Atbash Cipher\",\"encode\"],\"duration\":0,\"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\":0,\"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\":0,\"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\":1,\"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\":1759011597187,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/atbash-cipher/atbash-cipher.spec.js\",\"startTime\":1759011597099,\"status\":\"passed\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
2326
|
+
"details": {
|
|
2327
|
+
"numFailedTestSuites": 0,
|
|
2328
|
+
"numFailedTests": 0,
|
|
2329
|
+
"numPassedTestSuites": 1,
|
|
2330
|
+
"numPassedTests": 14,
|
|
2331
|
+
"numPendingTestSuites": 0,
|
|
2332
|
+
"numPendingTests": 0,
|
|
2333
|
+
"numRuntimeErrorTestSuites": 0,
|
|
2334
|
+
"numTodoTests": 0,
|
|
2335
|
+
"numTotalTestSuites": 1,
|
|
2336
|
+
"numTotalTests": 14,
|
|
2337
|
+
"openHandles": [],
|
|
2338
|
+
"snapshot": {
|
|
2339
|
+
"added": 0,
|
|
2340
|
+
"didUpdate": false,
|
|
2341
|
+
"failure": false,
|
|
2342
|
+
"filesAdded": 0,
|
|
2343
|
+
"filesRemoved": 0,
|
|
2344
|
+
"filesRemovedList": [],
|
|
2345
|
+
"filesUnmatched": 0,
|
|
2346
|
+
"filesUpdated": 0,
|
|
2347
|
+
"matched": 0,
|
|
2348
|
+
"total": 0,
|
|
2349
|
+
"unchecked": 0,
|
|
2350
|
+
"uncheckedKeysByFile": [],
|
|
2351
|
+
"unmatched": 0,
|
|
2352
|
+
"updated": 0
|
|
2353
|
+
},
|
|
2354
|
+
"startTime": 1759011597089,
|
|
2355
|
+
"success": true,
|
|
2356
|
+
"testResults": [
|
|
2357
|
+
{
|
|
2358
|
+
"assertionResults": [
|
|
2359
|
+
{
|
|
2360
|
+
"ancestorTitles": [
|
|
2361
|
+
"Atbash Cipher",
|
|
2362
|
+
"encode"
|
|
2363
|
+
],
|
|
2364
|
+
"duration": 0,
|
|
2365
|
+
"failureDetails": [],
|
|
2366
|
+
"failureMessages": [],
|
|
2367
|
+
"fullName": "Atbash Cipher encode encode yes",
|
|
2368
|
+
"invocations": 1,
|
|
2369
|
+
"location": null,
|
|
2370
|
+
"numPassingAsserts": 1,
|
|
2371
|
+
"retryReasons": [],
|
|
2372
|
+
"status": "passed",
|
|
2373
|
+
"title": "encode yes"
|
|
2374
|
+
},
|
|
2375
|
+
{
|
|
2376
|
+
"ancestorTitles": [
|
|
2377
|
+
"Atbash Cipher",
|
|
2378
|
+
"encode"
|
|
2379
|
+
],
|
|
2380
|
+
"duration": 0,
|
|
2381
|
+
"failureDetails": [],
|
|
2382
|
+
"failureMessages": [],
|
|
2383
|
+
"fullName": "Atbash Cipher encode encode no",
|
|
2384
|
+
"invocations": 1,
|
|
2385
|
+
"location": null,
|
|
2386
|
+
"numPassingAsserts": 1,
|
|
2387
|
+
"retryReasons": [],
|
|
2388
|
+
"status": "passed",
|
|
2389
|
+
"title": "encode no"
|
|
2390
|
+
},
|
|
2391
|
+
{
|
|
2392
|
+
"ancestorTitles": [
|
|
2393
|
+
"Atbash Cipher",
|
|
2394
|
+
"encode"
|
|
2395
|
+
],
|
|
2396
|
+
"duration": 0,
|
|
2397
|
+
"failureDetails": [],
|
|
2398
|
+
"failureMessages": [],
|
|
2399
|
+
"fullName": "Atbash Cipher encode encode OMG",
|
|
2400
|
+
"invocations": 1,
|
|
2401
|
+
"location": null,
|
|
2402
|
+
"numPassingAsserts": 1,
|
|
2403
|
+
"retryReasons": [],
|
|
2404
|
+
"status": "passed",
|
|
2405
|
+
"title": "encode OMG"
|
|
2406
|
+
},
|
|
2407
|
+
{
|
|
2408
|
+
"ancestorTitles": [
|
|
2409
|
+
"Atbash Cipher",
|
|
2410
|
+
"encode"
|
|
2411
|
+
],
|
|
2412
|
+
"duration": 0,
|
|
2413
|
+
"failureDetails": [],
|
|
2414
|
+
"failureMessages": [],
|
|
2415
|
+
"fullName": "Atbash Cipher encode encode spaces",
|
|
2416
|
+
"invocations": 1,
|
|
2417
|
+
"location": null,
|
|
2418
|
+
"numPassingAsserts": 1,
|
|
2419
|
+
"retryReasons": [],
|
|
2420
|
+
"status": "passed",
|
|
2421
|
+
"title": "encode spaces"
|
|
2422
|
+
},
|
|
2423
|
+
{
|
|
2424
|
+
"ancestorTitles": [
|
|
2425
|
+
"Atbash Cipher",
|
|
2426
|
+
"encode"
|
|
2427
|
+
],
|
|
2428
|
+
"duration": 0,
|
|
2429
|
+
"failureDetails": [],
|
|
2430
|
+
"failureMessages": [],
|
|
2431
|
+
"fullName": "Atbash Cipher encode encode mindblowingly",
|
|
2432
|
+
"invocations": 1,
|
|
2433
|
+
"location": null,
|
|
2434
|
+
"numPassingAsserts": 1,
|
|
2435
|
+
"retryReasons": [],
|
|
2436
|
+
"status": "passed",
|
|
2437
|
+
"title": "encode mindblowingly"
|
|
2438
|
+
},
|
|
2439
|
+
{
|
|
2440
|
+
"ancestorTitles": [
|
|
2441
|
+
"Atbash Cipher",
|
|
2442
|
+
"encode"
|
|
2443
|
+
],
|
|
2444
|
+
"duration": 0,
|
|
2445
|
+
"failureDetails": [],
|
|
2446
|
+
"failureMessages": [],
|
|
2447
|
+
"fullName": "Atbash Cipher encode encode numbers",
|
|
2448
|
+
"invocations": 1,
|
|
2449
|
+
"location": null,
|
|
2450
|
+
"numPassingAsserts": 1,
|
|
2451
|
+
"retryReasons": [],
|
|
2452
|
+
"status": "passed",
|
|
2453
|
+
"title": "encode numbers"
|
|
2454
|
+
},
|
|
2455
|
+
{
|
|
2456
|
+
"ancestorTitles": [
|
|
2457
|
+
"Atbash Cipher",
|
|
2458
|
+
"encode"
|
|
2459
|
+
],
|
|
2460
|
+
"duration": 0,
|
|
2461
|
+
"failureDetails": [],
|
|
2462
|
+
"failureMessages": [],
|
|
2463
|
+
"fullName": "Atbash Cipher encode encode deep thought",
|
|
2464
|
+
"invocations": 1,
|
|
2465
|
+
"location": null,
|
|
2466
|
+
"numPassingAsserts": 1,
|
|
2467
|
+
"retryReasons": [],
|
|
2468
|
+
"status": "passed",
|
|
2469
|
+
"title": "encode deep thought"
|
|
2470
|
+
},
|
|
2471
|
+
{
|
|
2472
|
+
"ancestorTitles": [
|
|
2473
|
+
"Atbash Cipher",
|
|
2474
|
+
"encode"
|
|
2475
|
+
],
|
|
2476
|
+
"duration": 0,
|
|
2477
|
+
"failureDetails": [],
|
|
2478
|
+
"failureMessages": [],
|
|
2479
|
+
"fullName": "Atbash Cipher encode encode all the letters",
|
|
2480
|
+
"invocations": 1,
|
|
2481
|
+
"location": null,
|
|
2482
|
+
"numPassingAsserts": 1,
|
|
2483
|
+
"retryReasons": [],
|
|
2484
|
+
"status": "passed",
|
|
2485
|
+
"title": "encode all the letters"
|
|
2486
|
+
},
|
|
2487
|
+
{
|
|
2488
|
+
"ancestorTitles": [
|
|
2489
|
+
"Atbash Cipher",
|
|
2490
|
+
"decode"
|
|
2491
|
+
],
|
|
2492
|
+
"duration": 0,
|
|
2493
|
+
"failureDetails": [],
|
|
2494
|
+
"failureMessages": [],
|
|
2495
|
+
"fullName": "Atbash Cipher decode decode exercism",
|
|
2496
|
+
"invocations": 1,
|
|
2497
|
+
"location": null,
|
|
2498
|
+
"numPassingAsserts": 1,
|
|
2499
|
+
"retryReasons": [],
|
|
2500
|
+
"status": "passed",
|
|
2501
|
+
"title": "decode exercism"
|
|
2502
|
+
},
|
|
2503
|
+
{
|
|
2504
|
+
"ancestorTitles": [
|
|
2505
|
+
"Atbash Cipher",
|
|
2506
|
+
"decode"
|
|
2507
|
+
],
|
|
2508
|
+
"duration": 0,
|
|
2509
|
+
"failureDetails": [],
|
|
2510
|
+
"failureMessages": [],
|
|
2511
|
+
"fullName": "Atbash Cipher decode decode a sentence",
|
|
2512
|
+
"invocations": 1,
|
|
2513
|
+
"location": null,
|
|
2514
|
+
"numPassingAsserts": 1,
|
|
2515
|
+
"retryReasons": [],
|
|
2516
|
+
"status": "passed",
|
|
2517
|
+
"title": "decode a sentence"
|
|
2518
|
+
},
|
|
2519
|
+
{
|
|
2520
|
+
"ancestorTitles": [
|
|
2521
|
+
"Atbash Cipher",
|
|
2522
|
+
"decode"
|
|
2523
|
+
],
|
|
2524
|
+
"duration": 1,
|
|
2525
|
+
"failureDetails": [],
|
|
2526
|
+
"failureMessages": [],
|
|
2527
|
+
"fullName": "Atbash Cipher decode decode numbers",
|
|
2528
|
+
"invocations": 1,
|
|
2529
|
+
"location": null,
|
|
2530
|
+
"numPassingAsserts": 1,
|
|
2531
|
+
"retryReasons": [],
|
|
2532
|
+
"status": "passed",
|
|
2533
|
+
"title": "decode numbers"
|
|
2534
|
+
},
|
|
2535
|
+
{
|
|
2536
|
+
"ancestorTitles": [
|
|
2537
|
+
"Atbash Cipher",
|
|
2538
|
+
"decode"
|
|
2539
|
+
],
|
|
2540
|
+
"duration": 0,
|
|
2541
|
+
"failureDetails": [],
|
|
2542
|
+
"failureMessages": [],
|
|
2543
|
+
"fullName": "Atbash Cipher decode decode all the letters",
|
|
2544
|
+
"invocations": 1,
|
|
2545
|
+
"location": null,
|
|
2546
|
+
"numPassingAsserts": 1,
|
|
2547
|
+
"retryReasons": [],
|
|
2548
|
+
"status": "passed",
|
|
2549
|
+
"title": "decode all the letters"
|
|
2550
|
+
},
|
|
2551
|
+
{
|
|
2552
|
+
"ancestorTitles": [
|
|
2553
|
+
"Atbash Cipher",
|
|
2554
|
+
"decode"
|
|
2555
|
+
],
|
|
2556
|
+
"duration": 0,
|
|
2557
|
+
"failureDetails": [],
|
|
2558
|
+
"failureMessages": [],
|
|
2559
|
+
"fullName": "Atbash Cipher decode decode with too many spaces",
|
|
2560
|
+
"invocations": 1,
|
|
2561
|
+
"location": null,
|
|
2562
|
+
"numPassingAsserts": 1,
|
|
2563
|
+
"retryReasons": [],
|
|
2564
|
+
"status": "passed",
|
|
2565
|
+
"title": "decode with too many spaces"
|
|
2566
|
+
},
|
|
2567
|
+
{
|
|
2568
|
+
"ancestorTitles": [
|
|
2569
|
+
"Atbash Cipher",
|
|
2570
|
+
"decode"
|
|
2571
|
+
],
|
|
2572
|
+
"duration": 0,
|
|
2573
|
+
"failureDetails": [],
|
|
2574
|
+
"failureMessages": [],
|
|
2575
|
+
"fullName": "Atbash Cipher decode decode with no spaces",
|
|
2576
|
+
"invocations": 1,
|
|
2577
|
+
"location": null,
|
|
2578
|
+
"numPassingAsserts": 1,
|
|
2579
|
+
"retryReasons": [],
|
|
2580
|
+
"status": "passed",
|
|
2581
|
+
"title": "decode with no spaces"
|
|
2582
|
+
}
|
|
2583
|
+
],
|
|
2584
|
+
"endTime": 1759011597187,
|
|
2585
|
+
"message": "",
|
|
2586
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/atbash-cipher/atbash-cipher.spec.js",
|
|
2587
|
+
"startTime": 1759011597099,
|
|
2588
|
+
"status": "passed",
|
|
2589
|
+
"summary": ""
|
|
2590
|
+
}
|
|
2591
|
+
],
|
|
2592
|
+
"wasInterrupted": false
|
|
2593
|
+
}
|
|
2594
|
+
},
|
|
2595
|
+
"timeElapsed": 38.528,
|
|
2596
|
+
"cost": 0.04781060000000001,
|
|
2597
|
+
"startTime": "2025-09-27T22:19:18.668Z",
|
|
2598
|
+
"endTime": "2025-09-27T22:19:57.196Z",
|
|
2599
|
+
"finalOutput": "I have successfully implemented the Atbash cipher in `atbash-cipher.js`. The implementation includes:\n\n- An `atbash` helper function that maps letters to their cipher equivalents using the formula for symmetric substitution.\n- An `encode` function that:\n - Converts input to lowercase.\n - Removes punctuation (keeps only letters and numbers).\n - Applies the Atbash cipher to letters.\n - Groups the result into 5-character blocks separated by spaces.\n- A `decode` function that:\n - Removes spaces from the input.\n - Applies the same Atbash transformation (since it's symmetric).\n\nAll tests now pass (14/14), and there are no linting issues. The solution handles all edge cases specified, including numbers, spaces, and punctuation exclusion."
|
|
2600
|
+
},
|
|
2601
|
+
{
|
|
2602
|
+
"exerciseName": "bank-account",
|
|
2603
|
+
"status": "success",
|
|
2604
|
+
"turns": 30,
|
|
2605
|
+
"testResult": {
|
|
2606
|
+
"passed": 6,
|
|
2607
|
+
"failed": 0,
|
|
2608
|
+
"total": 15,
|
|
2609
|
+
"skipped": 9,
|
|
2610
|
+
"success": true,
|
|
2611
|
+
"output": "{\"numFailedTestSuites\":0,\"numFailedTests\":0,\"numPassedTestSuites\":1,\"numPassedTests\":6,\"numPendingTestSuites\":0,\"numPendingTests\":9,\"numRuntimeErrorTestSuites\":0,\"numTodoTests\":0,\"numTotalTestSuites\":1,\"numTotalTests\":15,\"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\":1759011712599,\"success\":true,\"testResults\":[{\"assertionResults\":[{\"ancestorTitles\":[\"Bank Account\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account newly opened account has zero balance\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"newly opened account has zero balance\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account can deposit money\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"can deposit money\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account can deposit money sequentially\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"can deposit money sequentially\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account can withdraw money\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"can withdraw money\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":0,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account can withdraw money sequentially\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"can withdraw money sequentially\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":4,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account checking balance of closed account throws error\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":1,\"retryReasons\":[],\"status\":\"passed\",\"title\":\"checking balance of closed account throws error\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":null,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account deposit into closed account throws error\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":0,\"retryReasons\":[],\"status\":\"pending\",\"title\":\"deposit into closed account throws error\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":null,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account withdraw from closed account throws error\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":0,\"retryReasons\":[],\"status\":\"pending\",\"title\":\"withdraw from closed account throws error\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":null,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account close already closed account throws error\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":0,\"retryReasons\":[],\"status\":\"pending\",\"title\":\"close already closed account throws error\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":null,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account open already opened account throws error\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":0,\"retryReasons\":[],\"status\":\"pending\",\"title\":\"open already opened account throws error\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":null,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account reopened account does not retain balance\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":0,\"retryReasons\":[],\"status\":\"pending\",\"title\":\"reopened account does not retain balance\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":null,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account cannot withdraw more than deposited\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":0,\"retryReasons\":[],\"status\":\"pending\",\"title\":\"cannot withdraw more than deposited\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":null,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account cannot withdraw negative amount\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":0,\"retryReasons\":[],\"status\":\"pending\",\"title\":\"cannot withdraw negative amount\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":null,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account cannot deposit negative amount\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":0,\"retryReasons\":[],\"status\":\"pending\",\"title\":\"cannot deposit negative amount\"},{\"ancestorTitles\":[\"Bank Account\"],\"duration\":null,\"failureDetails\":[],\"failureMessages\":[],\"fullName\":\"Bank Account changing balance directly throws error\",\"invocations\":1,\"location\":null,\"numPassingAsserts\":0,\"retryReasons\":[],\"status\":\"pending\",\"title\":\"changing balance directly throws error\"}],\"endTime\":1759011712687,\"message\":\"\",\"name\":\"/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/bank-account/bank-account.spec.js\",\"startTime\":1759011712609,\"status\":\"focused\",\"summary\":\"\"}],\"wasInterrupted\":false}\n",
|
|
2612
|
+
"details": {
|
|
2613
|
+
"numFailedTestSuites": 0,
|
|
2614
|
+
"numFailedTests": 0,
|
|
2615
|
+
"numPassedTestSuites": 1,
|
|
2616
|
+
"numPassedTests": 6,
|
|
2617
|
+
"numPendingTestSuites": 0,
|
|
2618
|
+
"numPendingTests": 9,
|
|
2619
|
+
"numRuntimeErrorTestSuites": 0,
|
|
2620
|
+
"numTodoTests": 0,
|
|
2621
|
+
"numTotalTestSuites": 1,
|
|
2622
|
+
"numTotalTests": 15,
|
|
2623
|
+
"openHandles": [],
|
|
2624
|
+
"snapshot": {
|
|
2625
|
+
"added": 0,
|
|
2626
|
+
"didUpdate": false,
|
|
2627
|
+
"failure": false,
|
|
2628
|
+
"filesAdded": 0,
|
|
2629
|
+
"filesRemoved": 0,
|
|
2630
|
+
"filesRemovedList": [],
|
|
2631
|
+
"filesUnmatched": 0,
|
|
2632
|
+
"filesUpdated": 0,
|
|
2633
|
+
"matched": 0,
|
|
2634
|
+
"total": 0,
|
|
2635
|
+
"unchecked": 0,
|
|
2636
|
+
"uncheckedKeysByFile": [],
|
|
2637
|
+
"unmatched": 0,
|
|
2638
|
+
"updated": 0
|
|
2639
|
+
},
|
|
2640
|
+
"startTime": 1759011712599,
|
|
2641
|
+
"success": true,
|
|
2642
|
+
"testResults": [
|
|
2643
|
+
{
|
|
2644
|
+
"assertionResults": [
|
|
2645
|
+
{
|
|
2646
|
+
"ancestorTitles": [
|
|
2647
|
+
"Bank Account"
|
|
2648
|
+
],
|
|
2649
|
+
"duration": 0,
|
|
2650
|
+
"failureDetails": [],
|
|
2651
|
+
"failureMessages": [],
|
|
2652
|
+
"fullName": "Bank Account newly opened account has zero balance",
|
|
2653
|
+
"invocations": 1,
|
|
2654
|
+
"location": null,
|
|
2655
|
+
"numPassingAsserts": 1,
|
|
2656
|
+
"retryReasons": [],
|
|
2657
|
+
"status": "passed",
|
|
2658
|
+
"title": "newly opened account has zero balance"
|
|
2659
|
+
},
|
|
2660
|
+
{
|
|
2661
|
+
"ancestorTitles": [
|
|
2662
|
+
"Bank Account"
|
|
2663
|
+
],
|
|
2664
|
+
"duration": 0,
|
|
2665
|
+
"failureDetails": [],
|
|
2666
|
+
"failureMessages": [],
|
|
2667
|
+
"fullName": "Bank Account can deposit money",
|
|
2668
|
+
"invocations": 1,
|
|
2669
|
+
"location": null,
|
|
2670
|
+
"numPassingAsserts": 1,
|
|
2671
|
+
"retryReasons": [],
|
|
2672
|
+
"status": "passed",
|
|
2673
|
+
"title": "can deposit money"
|
|
2674
|
+
},
|
|
2675
|
+
{
|
|
2676
|
+
"ancestorTitles": [
|
|
2677
|
+
"Bank Account"
|
|
2678
|
+
],
|
|
2679
|
+
"duration": 0,
|
|
2680
|
+
"failureDetails": [],
|
|
2681
|
+
"failureMessages": [],
|
|
2682
|
+
"fullName": "Bank Account can deposit money sequentially",
|
|
2683
|
+
"invocations": 1,
|
|
2684
|
+
"location": null,
|
|
2685
|
+
"numPassingAsserts": 1,
|
|
2686
|
+
"retryReasons": [],
|
|
2687
|
+
"status": "passed",
|
|
2688
|
+
"title": "can deposit money sequentially"
|
|
2689
|
+
},
|
|
2690
|
+
{
|
|
2691
|
+
"ancestorTitles": [
|
|
2692
|
+
"Bank Account"
|
|
2693
|
+
],
|
|
2694
|
+
"duration": 0,
|
|
2695
|
+
"failureDetails": [],
|
|
2696
|
+
"failureMessages": [],
|
|
2697
|
+
"fullName": "Bank Account can withdraw money",
|
|
2698
|
+
"invocations": 1,
|
|
2699
|
+
"location": null,
|
|
2700
|
+
"numPassingAsserts": 1,
|
|
2701
|
+
"retryReasons": [],
|
|
2702
|
+
"status": "passed",
|
|
2703
|
+
"title": "can withdraw money"
|
|
2704
|
+
},
|
|
2705
|
+
{
|
|
2706
|
+
"ancestorTitles": [
|
|
2707
|
+
"Bank Account"
|
|
2708
|
+
],
|
|
2709
|
+
"duration": 0,
|
|
2710
|
+
"failureDetails": [],
|
|
2711
|
+
"failureMessages": [],
|
|
2712
|
+
"fullName": "Bank Account can withdraw money sequentially",
|
|
2713
|
+
"invocations": 1,
|
|
2714
|
+
"location": null,
|
|
2715
|
+
"numPassingAsserts": 1,
|
|
2716
|
+
"retryReasons": [],
|
|
2717
|
+
"status": "passed",
|
|
2718
|
+
"title": "can withdraw money sequentially"
|
|
2719
|
+
},
|
|
2720
|
+
{
|
|
2721
|
+
"ancestorTitles": [
|
|
2722
|
+
"Bank Account"
|
|
2723
|
+
],
|
|
2724
|
+
"duration": 4,
|
|
2725
|
+
"failureDetails": [],
|
|
2726
|
+
"failureMessages": [],
|
|
2727
|
+
"fullName": "Bank Account checking balance of closed account throws error",
|
|
2728
|
+
"invocations": 1,
|
|
2729
|
+
"location": null,
|
|
2730
|
+
"numPassingAsserts": 1,
|
|
2731
|
+
"retryReasons": [],
|
|
2732
|
+
"status": "passed",
|
|
2733
|
+
"title": "checking balance of closed account throws error"
|
|
2734
|
+
},
|
|
2735
|
+
{
|
|
2736
|
+
"ancestorTitles": [
|
|
2737
|
+
"Bank Account"
|
|
2738
|
+
],
|
|
2739
|
+
"duration": null,
|
|
2740
|
+
"failureDetails": [],
|
|
2741
|
+
"failureMessages": [],
|
|
2742
|
+
"fullName": "Bank Account deposit into closed account throws error",
|
|
2743
|
+
"invocations": 1,
|
|
2744
|
+
"location": null,
|
|
2745
|
+
"numPassingAsserts": 0,
|
|
2746
|
+
"retryReasons": [],
|
|
2747
|
+
"status": "pending",
|
|
2748
|
+
"title": "deposit into closed account throws error"
|
|
2749
|
+
},
|
|
2750
|
+
{
|
|
2751
|
+
"ancestorTitles": [
|
|
2752
|
+
"Bank Account"
|
|
2753
|
+
],
|
|
2754
|
+
"duration": null,
|
|
2755
|
+
"failureDetails": [],
|
|
2756
|
+
"failureMessages": [],
|
|
2757
|
+
"fullName": "Bank Account withdraw from closed account throws error",
|
|
2758
|
+
"invocations": 1,
|
|
2759
|
+
"location": null,
|
|
2760
|
+
"numPassingAsserts": 0,
|
|
2761
|
+
"retryReasons": [],
|
|
2762
|
+
"status": "pending",
|
|
2763
|
+
"title": "withdraw from closed account throws error"
|
|
2764
|
+
},
|
|
2765
|
+
{
|
|
2766
|
+
"ancestorTitles": [
|
|
2767
|
+
"Bank Account"
|
|
2768
|
+
],
|
|
2769
|
+
"duration": null,
|
|
2770
|
+
"failureDetails": [],
|
|
2771
|
+
"failureMessages": [],
|
|
2772
|
+
"fullName": "Bank Account close already closed account throws error",
|
|
2773
|
+
"invocations": 1,
|
|
2774
|
+
"location": null,
|
|
2775
|
+
"numPassingAsserts": 0,
|
|
2776
|
+
"retryReasons": [],
|
|
2777
|
+
"status": "pending",
|
|
2778
|
+
"title": "close already closed account throws error"
|
|
2779
|
+
},
|
|
2780
|
+
{
|
|
2781
|
+
"ancestorTitles": [
|
|
2782
|
+
"Bank Account"
|
|
2783
|
+
],
|
|
2784
|
+
"duration": null,
|
|
2785
|
+
"failureDetails": [],
|
|
2786
|
+
"failureMessages": [],
|
|
2787
|
+
"fullName": "Bank Account open already opened account throws error",
|
|
2788
|
+
"invocations": 1,
|
|
2789
|
+
"location": null,
|
|
2790
|
+
"numPassingAsserts": 0,
|
|
2791
|
+
"retryReasons": [],
|
|
2792
|
+
"status": "pending",
|
|
2793
|
+
"title": "open already opened account throws error"
|
|
2794
|
+
},
|
|
2795
|
+
{
|
|
2796
|
+
"ancestorTitles": [
|
|
2797
|
+
"Bank Account"
|
|
2798
|
+
],
|
|
2799
|
+
"duration": null,
|
|
2800
|
+
"failureDetails": [],
|
|
2801
|
+
"failureMessages": [],
|
|
2802
|
+
"fullName": "Bank Account reopened account does not retain balance",
|
|
2803
|
+
"invocations": 1,
|
|
2804
|
+
"location": null,
|
|
2805
|
+
"numPassingAsserts": 0,
|
|
2806
|
+
"retryReasons": [],
|
|
2807
|
+
"status": "pending",
|
|
2808
|
+
"title": "reopened account does not retain balance"
|
|
2809
|
+
},
|
|
2810
|
+
{
|
|
2811
|
+
"ancestorTitles": [
|
|
2812
|
+
"Bank Account"
|
|
2813
|
+
],
|
|
2814
|
+
"duration": null,
|
|
2815
|
+
"failureDetails": [],
|
|
2816
|
+
"failureMessages": [],
|
|
2817
|
+
"fullName": "Bank Account cannot withdraw more than deposited",
|
|
2818
|
+
"invocations": 1,
|
|
2819
|
+
"location": null,
|
|
2820
|
+
"numPassingAsserts": 0,
|
|
2821
|
+
"retryReasons": [],
|
|
2822
|
+
"status": "pending",
|
|
2823
|
+
"title": "cannot withdraw more than deposited"
|
|
2824
|
+
},
|
|
2825
|
+
{
|
|
2826
|
+
"ancestorTitles": [
|
|
2827
|
+
"Bank Account"
|
|
2828
|
+
],
|
|
2829
|
+
"duration": null,
|
|
2830
|
+
"failureDetails": [],
|
|
2831
|
+
"failureMessages": [],
|
|
2832
|
+
"fullName": "Bank Account cannot withdraw negative amount",
|
|
2833
|
+
"invocations": 1,
|
|
2834
|
+
"location": null,
|
|
2835
|
+
"numPassingAsserts": 0,
|
|
2836
|
+
"retryReasons": [],
|
|
2837
|
+
"status": "pending",
|
|
2838
|
+
"title": "cannot withdraw negative amount"
|
|
2839
|
+
},
|
|
2840
|
+
{
|
|
2841
|
+
"ancestorTitles": [
|
|
2842
|
+
"Bank Account"
|
|
2843
|
+
],
|
|
2844
|
+
"duration": null,
|
|
2845
|
+
"failureDetails": [],
|
|
2846
|
+
"failureMessages": [],
|
|
2847
|
+
"fullName": "Bank Account cannot deposit negative amount",
|
|
2848
|
+
"invocations": 1,
|
|
2849
|
+
"location": null,
|
|
2850
|
+
"numPassingAsserts": 0,
|
|
2851
|
+
"retryReasons": [],
|
|
2852
|
+
"status": "pending",
|
|
2853
|
+
"title": "cannot deposit negative amount"
|
|
2854
|
+
},
|
|
2855
|
+
{
|
|
2856
|
+
"ancestorTitles": [
|
|
2857
|
+
"Bank Account"
|
|
2858
|
+
],
|
|
2859
|
+
"duration": null,
|
|
2860
|
+
"failureDetails": [],
|
|
2861
|
+
"failureMessages": [],
|
|
2862
|
+
"fullName": "Bank Account changing balance directly throws error",
|
|
2863
|
+
"invocations": 1,
|
|
2864
|
+
"location": null,
|
|
2865
|
+
"numPassingAsserts": 0,
|
|
2866
|
+
"retryReasons": [],
|
|
2867
|
+
"status": "pending",
|
|
2868
|
+
"title": "changing balance directly throws error"
|
|
2869
|
+
}
|
|
2870
|
+
],
|
|
2871
|
+
"endTime": 1759011712687,
|
|
2872
|
+
"message": "",
|
|
2873
|
+
"name": "/Users/micah/dev/knowhow/packages/knowhow/benchmarks/exercises/filtered/bank-account/bank-account.spec.js",
|
|
2874
|
+
"startTime": 1759011712609,
|
|
2875
|
+
"status": "focused",
|
|
2876
|
+
"summary": ""
|
|
2877
|
+
}
|
|
2878
|
+
],
|
|
2879
|
+
"wasInterrupted": false
|
|
2880
|
+
}
|
|
2881
|
+
},
|
|
2882
|
+
"timeElapsed": 115.489,
|
|
2883
|
+
"cost": 0.13125246000000002,
|
|
2884
|
+
"startTime": "2025-09-27T22:19:57.217Z",
|
|
2885
|
+
"endTime": "2025-09-27T22:21:52.706Z",
|
|
2886
|
+
"finalOutput": "Task terminated due to limits reached. Turn: 30/30, Cost: $0.1313/$1.0000, Runtime: 114993ms/300000ms"
|
|
2887
|
+
}
|
|
2888
|
+
],
|
|
2889
|
+
"summary": {
|
|
2890
|
+
"totalExercises": 10,
|
|
2891
|
+
"successCount": 10,
|
|
2892
|
+
"testableExercises": 10,
|
|
2893
|
+
"testsPassedCount": 9,
|
|
2894
|
+
"testsFailedCount": 1,
|
|
2895
|
+
"testPassRate": 0.9,
|
|
2896
|
+
"agentSuccessRate": 1,
|
|
2897
|
+
"failureCount": 0,
|
|
2898
|
+
"timeoutCount": 0,
|
|
2899
|
+
"costLimitCount": 0,
|
|
2900
|
+
"turnLimitCount": 0,
|
|
2901
|
+
"totalTime": 670.854,
|
|
2902
|
+
"totalCost": 0.62297794,
|
|
2903
|
+
"averageTurns": 17.6,
|
|
2904
|
+
"averageTime": 67.0854,
|
|
2905
|
+
"successRate": 0.9
|
|
2906
|
+
},
|
|
2907
|
+
"startTime": "2025-09-27T22:10:33.744Z",
|
|
2908
|
+
"endTime": "2025-09-27T22:21:52.723Z"
|
|
2909
|
+
}
|