{"id":21194717,"url":"https://github.com/quickchick/testingnoninterference","last_synced_at":"2026-03-08T22:34:14.763Z","repository":{"id":19927437,"uuid":"23193927","full_name":"QuickChick/TestingNoninterference","owner":"QuickChick","description":"Haskell code associated to the \"Testing Noninterference, Quickly\" paper. The associated Coq proofs are in a separate repository: https://github.com/QuickChick/IFC","archived":false,"fork":false,"pushed_at":"2015-08-08T08:04:34.000Z","size":3424,"stargazers_count":8,"open_issues_count":1,"forks_count":3,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-07-10T08:08:13.261Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/QuickChick.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2014-08-21T16:09:59.000Z","updated_at":"2025-06-19T17:46:05.000Z","dependencies_parsed_at":"2022-08-17T15:50:43.302Z","dependency_job_id":null,"html_url":"https://github.com/QuickChick/TestingNoninterference","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/QuickChick/TestingNoninterference","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickChick%2FTestingNoninterference","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickChick%2FTestingNoninterference/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickChick%2FTestingNoninterference/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickChick%2FTestingNoninterference/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/QuickChick","download_url":"https://codeload.github.com/QuickChick/TestingNoninterference/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/QuickChick%2FTestingNoninterference/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30275583,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-08T20:45:49.896Z","status":"ssl_error","status_checked_at":"2026-03-08T20:45:49.525Z","response_time":56,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-11-20T19:24:03.956Z","updated_at":"2026-03-08T22:34:14.748Z","avatar_url":"https://github.com/QuickChick.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"\nCode for Testing Noninterference\n================================\n\n### Description\n\n- Haskell code associated to the following paper:\n  - Catalin Hritcu, Leonidas Lampropoulos, Antal Spector-Zabusky, Arthur Azevedo de Amorim, Maxime Dénès, John Hughes, Benjamin C. Pierce, and Dimitrios Vytiniotis. Testing Noninterference, Quickly. arXiv:1409.0393. Submitted to Special Issue of Journal of Functional Programming for ICFP 2013. September 2014. (http://arxiv.org/abs/1409.0393)\n- The associated Coq proofs are in a separate repository: https://github.com/QuickChick/IFC\n\n### Prerequisites\n\n- GHC 7.4.x-7.8.x (known to work with 7.4.1, 7.6.3, and 7.8.3)\n- Haskell packages (available with 'cabal install package-name'):\n  - QuickCheck 2.7.x (known to work with 2.7.3)\n  - CmdArgs \u003e0.9.5\n  - concurrent-extra\n- UNIX utilities like make, echo, rm, etc.\n\n### Building\n\nRun \"make\" in the top directory\n\n### Using ghci\n\nAll you need to do is invoke ghci (e.g. C-c C-l in Emacs if using\nhaskell-mode default key bindings) and the .ghci files will take care\nof the rest.\n\nOn Linux you might have permission problems (you might see \"WARNING:\n.ghci is writable by someone else, IGNORING!\" when starting ghci), in\nwhich case you need to make sure that this dir, its subdirs and the\n.ghci files inside are not group readable. A command like\n\n    chmod -R g-w .\n\nshould usually solve the problem.\n\n### Contents\n\n    Makefile\n    Makefile.common\n\n    stack/    -- Simple information-flow stack machine\n\n        Machine.hs     : definition of the abstract machine\n        Generation.hs  : random program generation\n        Driver.hs      : experiment set up, top level properties, main\n        Flags.hs       : various flags configuration of a machine\n        Instr.hs       : instruction set architecture\n        Labels.hs      : label models and observations\n        Observable.hs  : observable classes\n        ObservableInst.hs : observable classes and shrinking variations\n        ...\n\n    register/ -- Information-flow register machine with advanced features\n        ...\n\n    common/ -- Common definitions, and helpers\n        Aggregate.hs\n        Machine.hs              : common definitions for generic \"machines\"\n        Pretty.hs               : pretty printing\n        Trace.hs                : execution traces\n        Util.hs                 : misc. helpers\n        ...\n\n### Old description for stack machine code (TODO: bring this up to date)\n\n#### Running the test driver from command line\n\nYou may run the test driver from the command line with:\n\n     ./Driver\n\nThis will run with the default configuration, shown in Flags.hs\nHowever you may override one of the options manually as well -- for\ninstance:\n\n    ./Driver --gen-strategy=GenNaive --tests=10000\n\nor\n\n    ./Driver --gen-strategy=GenByExec --tests=30000\n\nAll values (and names for named options) are specified in Flags.hs. Finally,\nyou may run:\n\n    ./Driver --help\n\nto see a list of available options.\n\n#### Basic profiling of test generation\n\nTMUDriver contains flags that can profile tests for some\nbasic statistics. Namely, the\n\n    --prop-test=PropJustProfileLengths\n\nand\n\n    --prop-test=PropJustProfileWF\n\nrun profiling on tests with the current configuration. The former is\nprofiling execution lenghts, the latter is profiling the reasons for\ntermination. You may use --tests to determine the number of tests,\nor --gen-strategy to determine under which strategy you want to profile, etc.\n\n#### Bulk testing and profiling\n\nSome new options have been introduced that help profile/test in the bulk.\n\nNamely, you may want to give a string argument to --ifc-semantics, e.g.:\n\n    --ifc-semantics=\"[IfcBugAddNoTaint,IfcBugStoreNoTaint]\"\n\nwhich will iterate over these two buggy behaviors. The --ifc-semantics\nflag stands for a list of behaviours you would like to test. For convenience\nthere exists a wildcard value:\n\n    --ifc-semantics=\"*\"\n\nwhich you may use to iterate over all bugs.\n\nWhen testing you may want to suppress printing information from the\nactual counterexample, which you can do with:\n    --show-counterexamples=False\n\nHere is an example usage:\n\n    ./Driver --ifc-semantics=\"*\"\n             --gen-strategy=GenByExec\n             --show-counterexamples=False\n\nIterates over all bugs using GenByExec, not showing\ncounterexamples. It will print out average results in some format\n[DV:TODO]\n\n#### Coding syntax rules\n\nThe rationale for these rules is that they make refactoring easier.\n\nIn ghci, warnings will be raised:\n- if a top-level declaration is missing a type signature\n- if a tab is present\n- if a do block uses a value of type m A, for A ≠ (), without binding\n  it to a value\n- if you have an incomplete set of pattern matches\n\nFor instance,\n\n    Prelude\u003e let j (Just a) = a\n    \u003cinteractive\u003e:2:5:\n      Warning: Pattern match(es) are non-exhaustive\n        In an equation for `j': Patterns not matched: Nothing\n\nAt compile-time, these warnings are errors: you're forced to stick to\nthese coding standards.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquickchick%2Ftestingnoninterference","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fquickchick%2Ftestingnoninterference","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fquickchick%2Ftestingnoninterference/lists"}