{"id":20859378,"url":"https://github.com/engineeringsoftware/tempo","last_synced_at":"2025-05-12T08:32:25.413Z","repository":{"id":238622509,"uuid":"395437565","full_name":"EngineeringSoftware/tempo","owner":"EngineeringSoftware","description":"Programming and execution model for parallel bounded exhaustive testing","archived":false,"fork":false,"pushed_at":"2024-05-10T19:14:09.000Z","size":163,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2024-05-10T20:26:56.016Z","etag":null,"topics":["bounded-exhaustive-testing","execution","model","programming"],"latest_commit_sha":null,"homepage":"","language":"Cuda","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/EngineeringSoftware.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-08-12T20:34:11.000Z","updated_at":"2024-05-10T19:18:12.000Z","dependencies_parsed_at":"2024-05-07T05:36:08.680Z","dependency_job_id":null,"html_url":"https://github.com/EngineeringSoftware/tempo","commit_stats":null,"previous_names":["engineeringsoftware/tempo"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EngineeringSoftware%2Ftempo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EngineeringSoftware%2Ftempo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EngineeringSoftware%2Ftempo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/EngineeringSoftware%2Ftempo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/EngineeringSoftware","download_url":"https://codeload.github.com/EngineeringSoftware/tempo/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225130723,"owners_count":17425506,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bounded-exhaustive-testing","execution","model","programming"],"created_at":"2024-11-18T04:49:39.926Z","updated_at":"2024-11-18T04:49:40.615Z","avatar_url":"https://github.com/EngineeringSoftware.png","language":"Cuda","readme":"# Tempo\n\nProgramming and execution models for parallel bounded exhaustive testing.\n\n\n## About\n\nBounded-exhaustive testing (BET), which exercises a program under test\nfor all inputs up to some bounds, is an effective method for detecting\nsoftware bugs. Systematic property-based testing is a BET approach\nwhere developers write test generation programs that describe\nproperties of test inputs. Hybrid test generation programs offer the\nmost expressive way to write desired properties by freely combining\ndeclarative filters and imperative generators. However, exploring\nhybrid test generation programs, to obtain test inputs, is both\ncomputationally demanding and challenging to parallelize. Tempo is a\nframework for parallel exploration of hybrid test generation programs.\n\n\n## Example\n\nIn the example below, we define a CUDA kernel that executes all\npossible sequences (up to `n` calls) of `put` and `remove` on\n`int_avl_tree_map`.\n\nLet's say that you set `n=1`.  In that case, the kernel below will\nexecute the following method sequences: (1) `tm.put(0); tm.put(0)`,\n(2) `tm.put(0); tm.remove(0)`, (3) `tm.remove(0); tm.put(0)`, (4)\n`tm.remove(0); tm.remove(0)`.\n\n```cuda\n__global__ void avltSeqGPU(const int32_t bck_active, const int32_t n, const int32_t print_id) {\n    const unsigned int tid = blockDim.x * blockIdx.x + threadIdx.x;\n    if (tid \u003e= bck_active) {\n        return;\n    }\n\n    Object objectHeap[POOL_SIZE];\n    Node nodeHeap[POOL_SIZE];\n\n    Env env(objectHeap, nodeHeap);\n\n    int_avl_tree_map tm(\u0026env);\n    for (int i = 0; i \u003c n; ++i) {\n        const int op = _choice(0, 1);\n        const int value = _choice(0, n - 1);\n        if (op == 0) {\n            Object* const new_object = env.objectAlloc();\n            new_object-\u003eid = value;\n            tm.put(value, new_object);\n        } else {\n            tm.remove(value);\n        }\n    }\n\n    // use input (generated above) to test something\n    // e.g., tm.put(tid, new_object);\n}\n```\n\nUnlike \"normal\" CUDA kernels, kernels for Tempo are (automatically)\nexecuted a number of times to explore aforementioned sequences.\nNamely, execution of the `_choice` function, stops a tread that\ninvoked the function and queues tasks for the next kernel invocation;\nthere will be one new task for every value in the range given by\n`_choice`.\n\n\n## Citation\n\nIf you have used Tempo in a research project, please cite this\nresearch\n[paper](https://users.ece.utexas.edu/~gligoric/papers/AlAwarETAL21Tempo.pdf):\n\n```bib\n@inproceedings{AlAwarETAL21Tempo,\n  author = {Al Awar, Nader and Jain, Kush and Rossbach, Christopher J. and Gligoric, Milos},\n  title = {Programming and Execution Models for Parallel Bounded Exhaustive Testing},\n  booktitle = {Conference on Object-Oriented Programming, Systems, Languages, and Applications},\n  pages = {1--28},\n  year = {2021},\n}\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengineeringsoftware%2Ftempo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fengineeringsoftware%2Ftempo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fengineeringsoftware%2Ftempo/lists"}