From 23a08da0ece097fc1ee6caebbe4b400e0156b0fd Mon Sep 17 00:00:00 2001 From: Chengyu Zhang Date: Tue, 17 Aug 2021 09:33:33 +0800 Subject: [PATCH 1/8] fix pypi package for putting everything in one folder --- bin/opfuzz | 12 ++++----- bin/typefuzz | 12 ++++----- bin/yinyang | 12 ++++----- setup.cfg | 2 +- tests/integration/parsing/ast/Ast.py | 8 +++--- tests/integration/parsing/ast/CheckOutput.py | 6 ++--- tests/integration/parsing/parser/Parse.py | 4 +-- tests/unit/TestGenTypeAwareMutation.py | 8 +++--- tests/unit/TestLocalVariables.py | 10 ++++---- tests/unit/TestParsing.py | 2 +- tests/unit/TestSemanticFusion.py | 4 +-- tests/unit/TestTerm.py | 4 +-- tests/unit/TestTypeAwareOpMutation.py | 4 +-- tests/unit/TestTypechecker.py | 8 +++--- {config => yinyang}/__init__.py | 0 {config => yinyang/config}/Config.py | 0 {config => yinyang/config}/OpfuzzHelptext.py | 2 +- .../config}/TypefuzzHelptext.py | 2 +- {config => yinyang/config}/YinyangHelptext.py | 2 +- {src => yinyang/config}/__init__.py | 0 .../config}/fusion_functions.txt | 0 .../config}/operator_mutations.txt | 0 {config => yinyang/config}/option_setting.txt | 0 .../config}/typefuzz_config.txt | 0 {src/base => yinyang/src}/__init__.py | 0 {src => yinyang/src}/base/ArgumentParser.py | 4 +-- {src => yinyang/src}/base/Driver.py | 6 ++--- {src => yinyang/src}/base/Error.py | 2 +- {src => yinyang/src}/base/Exitcodes.py | 0 {src => yinyang/src}/base/Utils.py | 0 {src => yinyang/src}/base/Version.py | 0 {src/core => yinyang/src/base}/__init__.py | 0 {src => yinyang/src}/core/Fuzzer.py | 24 +++++++++--------- {src => yinyang/src}/core/FuzzerUtil.py | 8 +++--- {src => yinyang/src}/core/Logger.py | 0 {src => yinyang/src}/core/OptionGenerator.py | 0 {src => yinyang/src}/core/Solver.py | 2 +- {src => yinyang/src}/core/Statistic.py | 0 .../src/core}/__init__.py | 0 .../GenTypeAwareMutation.py | 10 ++++---- .../mutators/GenTypeAwareMutation/Operator.py | 2 +- .../mutators/GenTypeAwareMutation/Util.py | 4 +-- .../GenTypeAwareMutation}/__init__.py | 0 {src => yinyang/src}/mutators/Mutator.py | 0 .../mutators/SemanticFusion/SemanticFusion.py | 12 ++++----- .../src}/mutators/SemanticFusion/Util.py | 2 +- .../mutators/SemanticFusion/VariableFusion.py | 2 +- .../src/mutators/SemanticFusion}/__init__.py | 0 .../src}/mutators/TypeAwareOpMutation.py | 2 +- yinyang/src/mutators/__init__.py | 0 {src => yinyang/src}/parsing/Ast.py | 0 {src => yinyang/src}/parsing/AstVisitor.py | 8 +++--- {src => yinyang/src}/parsing/Parse.py | 8 +++--- {src => yinyang/src}/parsing/SMTLIBv2.g4 | 0 {src => yinyang/src}/parsing/SMTLIBv2.interp | 0 {src => yinyang/src}/parsing/SMTLIBv2.tokens | 0 .../src}/parsing/SMTLIBv2Lexer.interp | 0 {src => yinyang/src}/parsing/SMTLIBv2Lexer.py | 0 .../src}/parsing/SMTLIBv2Lexer.tokens | 0 .../src}/parsing/SMTLIBv2Listener.py | 0 .../src}/parsing/SMTLIBv2Parser.py | 0 .../src}/parsing/SMTLIBv2Visitor.py | 4 +-- .../src}/parsing/TimeoutDecorator.py | 0 {src => yinyang/src}/parsing/Typechecker.py | 4 +-- {src => yinyang/src}/parsing/Types.py | 0 {src => yinyang/src}/parsing/__init__.py | 0 .../src}/parsing/antlr-4.9.2-complete.jar | Bin .../src}/parsing/regenerate_grammar.sh | 0 68 files changed, 103 insertions(+), 103 deletions(-) rename {config => yinyang}/__init__.py (100%) rename {config => yinyang/config}/Config.py (100%) rename {config => yinyang/config}/OpfuzzHelptext.py (99%) rename {config => yinyang/config}/TypefuzzHelptext.py (99%) rename {config => yinyang/config}/YinyangHelptext.py (99%) rename {src => yinyang/config}/__init__.py (100%) rename {config => yinyang/config}/fusion_functions.txt (100%) rename {config => yinyang/config}/operator_mutations.txt (100%) rename {config => yinyang/config}/option_setting.txt (100%) rename {config => yinyang/config}/typefuzz_config.txt (100%) rename {src/base => yinyang/src}/__init__.py (100%) rename {src => yinyang/src}/base/ArgumentParser.py (98%) rename {src => yinyang/src}/base/Driver.py (96%) rename {src => yinyang/src}/base/Error.py (96%) rename {src => yinyang/src}/base/Exitcodes.py (100%) rename {src => yinyang/src}/base/Utils.py (100%) rename {src => yinyang/src}/base/Version.py (100%) rename {src/core => yinyang/src/base}/__init__.py (100%) rename {src => yinyang/src}/core/Fuzzer.py (95%) rename {src => yinyang/src}/core/FuzzerUtil.py (92%) rename {src => yinyang/src}/core/Logger.py (100%) rename {src => yinyang/src}/core/OptionGenerator.py (100%) rename {src => yinyang/src}/core/Solver.py (98%) rename {src => yinyang/src}/core/Statistic.py (100%) rename {src/mutators/GenTypeAwareMutation => yinyang/src/core}/__init__.py (100%) rename {src => yinyang/src}/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py (95%) rename {src => yinyang/src}/mutators/GenTypeAwareMutation/Operator.py (98%) rename {src => yinyang/src}/mutators/GenTypeAwareMutation/Util.py (98%) rename {src/mutators/SemanticFusion => yinyang/src/mutators/GenTypeAwareMutation}/__init__.py (100%) rename {src => yinyang/src}/mutators/Mutator.py (100%) rename {src => yinyang/src}/mutators/SemanticFusion/SemanticFusion.py (93%) mode change 100755 => 100644 rename {src => yinyang/src}/mutators/SemanticFusion/Util.py (99%) mode change 100755 => 100644 rename {src => yinyang/src}/mutators/SemanticFusion/VariableFusion.py (98%) mode change 100755 => 100644 rename {src/mutators => yinyang/src/mutators/SemanticFusion}/__init__.py (100%) rename {src => yinyang/src}/mutators/TypeAwareOpMutation.py (98%) create mode 100644 yinyang/src/mutators/__init__.py rename {src => yinyang/src}/parsing/Ast.py (100%) rename {src => yinyang/src}/parsing/AstVisitor.py (98%) rename {src => yinyang/src}/parsing/Parse.py (96%) rename {src => yinyang/src}/parsing/SMTLIBv2.g4 (100%) rename {src => yinyang/src}/parsing/SMTLIBv2.interp (100%) rename {src => yinyang/src}/parsing/SMTLIBv2.tokens (100%) rename {src => yinyang/src}/parsing/SMTLIBv2Lexer.interp (100%) rename {src => yinyang/src}/parsing/SMTLIBv2Lexer.py (100%) rename {src => yinyang/src}/parsing/SMTLIBv2Lexer.tokens (100%) rename {src => yinyang/src}/parsing/SMTLIBv2Listener.py (100%) rename {src => yinyang/src}/parsing/SMTLIBv2Parser.py (100%) rename {src => yinyang/src}/parsing/SMTLIBv2Visitor.py (99%) rename {src => yinyang/src}/parsing/TimeoutDecorator.py (100%) rename {src => yinyang/src}/parsing/Typechecker.py (99%) rename {src => yinyang/src}/parsing/Types.py (100%) rename {src => yinyang/src}/parsing/__init__.py (100%) rename {src => yinyang/src}/parsing/antlr-4.9.2-complete.jar (100%) mode change 100755 => 100644 rename {src => yinyang/src}/parsing/regenerate_grammar.sh (100%) mode change 100755 => 100644 diff --git a/bin/opfuzz b/bin/opfuzz index 040f4ca..6f607bc 100755 --- a/bin/opfuzz +++ b/bin/opfuzz @@ -34,14 +34,14 @@ sys.path.append(rootpath) current_dir = os.getcwd() -from src.base.Driver import run_checks -from src.base.Error import raise_runtime_error -from src.base.ArgumentParser import build_opfuzz_parser -from src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_USAGE, ERR_INTERNAL +from yinyang.src.base.Driver import run_checks +from yinyang.src.base.Error import raise_runtime_error +from yinyang.src.base.ArgumentParser import build_opfuzz_parser +from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_USAGE, ERR_INTERNAL -from src.core.Fuzzer import Fuzzer +from yinyang.src.core.Fuzzer import Fuzzer -from config.OpfuzzHelptext import ( +from yinyang.config.OpfuzzHelptext import ( usage, header, short_description, diff --git a/bin/typefuzz b/bin/typefuzz index 7284672..8ba778b 100755 --- a/bin/typefuzz +++ b/bin/typefuzz @@ -33,14 +33,14 @@ sys.path.append(rootpath) current_dir = os.getcwd() -from src.base.Driver import run_checks -from src.base.Error import raise_runtime_error -from src.base.ArgumentParser import build_typefuzz_parser -from src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_USAGE, ERR_INTERNAL +from yinyang.src.base.Driver import run_checks +from yinyang.src.base.Error import raise_runtime_error +from yinyang.src.base.ArgumentParser import build_typefuzz_parser +from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_USAGE, ERR_INTERNAL -from src.core.Fuzzer import Fuzzer +from yinyang.src.core.Fuzzer import Fuzzer -from config.TypefuzzHelptext import ( +from yinyang.config.TypefuzzHelptext import ( usage, header, short_description, diff --git a/bin/yinyang b/bin/yinyang index a88b85e..c060537 100755 --- a/bin/yinyang +++ b/bin/yinyang @@ -34,14 +34,14 @@ sys.path.append(rootpath) current_dir = os.getcwd() -from src.base.Driver import run_checks -from src.base.Error import raise_runtime_error -from src.base.ArgumentParser import build_yinyang_parser -from src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_USAGE, ERR_INTERNAL +from yinyang.src.base.Driver import run_checks +from yinyang.src.base.Error import raise_runtime_error +from yinyang.src.base.ArgumentParser import build_yinyang_parser +from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_USAGE, ERR_INTERNAL -from src.core.Fuzzer import Fuzzer +from yinyang.src.core.Fuzzer import Fuzzer -from config.YinyangHelptext import ( +from yinyang.config.YinyangHelptext import ( usage, header, short_description, diff --git a/setup.cfg b/setup.cfg index 69e5550..005fd06 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = yinyang -version = 0.1.0 +version = 0.0.33 author = Dominik Winterer, Chengyu Zhang, Jiwon Park, Zhendong Su author_email = dominik.winterer@inf.ethz.ch, dale.chengyu.zhang@gmail.com, jiwon.park@polytechnique.edu, ‎zhendong.su@inf.ethz.ch description = A fuzzing framework for SMT solvers diff --git a/tests/integration/parsing/ast/Ast.py b/tests/integration/parsing/ast/Ast.py index 61771bc..38ad757 100755 --- a/tests/integration/parsing/ast/Ast.py +++ b/tests/integration/parsing/ast/Ast.py @@ -24,10 +24,10 @@ from antlr4.CommonTokenStream import FileStream, CommonTokenStream -from src.parsing.SMTLIBv2Lexer import SMTLIBv2Lexer -from src.parsing.SMTLIBv2Parser import SMTLIBv2Parser -from src.parsing.AstVisitor import AstVisitor -from src.parsing.Parse import parse_file +from yinyang.src.parsing.SMTLIBv2Lexer import SMTLIBv2Lexer +from yinyang.src.parsing.SMTLIBv2Parser import SMTLIBv2Parser +from yinyang.src.parsing.AstVisitor import AstVisitor +from yinyang.src.parsing.Parse import parse_file sys.setrecursionlimit(100000) sys.path.append("../../../../") diff --git a/tests/integration/parsing/ast/CheckOutput.py b/tests/integration/parsing/ast/CheckOutput.py index 73f742b..ca6b1d0 100755 --- a/tests/integration/parsing/ast/CheckOutput.py +++ b/tests/integration/parsing/ast/CheckOutput.py @@ -30,9 +30,9 @@ from antlr4.CommonTokenStream import FileStream, CommonTokenStream -from src.parsing.SMTLIBv2Lexer import SMTLIBv2Lexer -from src.parsing.SMTLIBv2Parser import SMTLIBv2Parser -from src.parsing.AstVisitor import AstVisitor +from yinyang.src.parsing.SMTLIBv2Lexer import SMTLIBv2Lexer +from yinyang.src.parsing.SMTLIBv2Parser import SMTLIBv2Parser +from yinyang.src.parsing.AstVisitor import AstVisitor sys.setrecursionlimit(100000) diff --git a/tests/integration/parsing/parser/Parse.py b/tests/integration/parsing/parser/Parse.py index c4448fe..8c8a827 100755 --- a/tests/integration/parsing/parser/Parse.py +++ b/tests/integration/parsing/parser/Parse.py @@ -23,8 +23,8 @@ import sys from antlr4.CommonTokenStream import CommonTokenStream, FileStream -from src.parsing.SMTLIBv2Lexer import SMTLIBv2Lexer -from src.parsing.SMTLIBv2Parser import SMTLIBv2Parser +from yinyang.src.parsing.SMTLIBv2Lexer import SMTLIBv2Lexer +from yinyang.src.parsing.SMTLIBv2Parser import SMTLIBv2Parser sys.setrecursionlimit(100000) sys.path.append("../../") diff --git a/tests/unit/TestGenTypeAwareMutation.py b/tests/unit/TestGenTypeAwareMutation.py index 5122021..1a7b96c 100644 --- a/tests/unit/TestGenTypeAwareMutation.py +++ b/tests/unit/TestGenTypeAwareMutation.py @@ -26,10 +26,10 @@ sys.path.append("../../") import os -from src.parsing.Parse import * -from src.parsing.Typechecker import Context, typecheck -from src.mutators.GenTypeAwareMutation.GenTypeAwareMutation import * -from src.mutators.GenTypeAwareMutation.Util import * +from yinyang.src.parsing.Parse import * +from yinyang.src.parsing.Typechecker import Context, typecheck +from yinyang.src.mutators.GenTypeAwareMutation.GenTypeAwareMutation import * +from yinyang.src.mutators.GenTypeAwareMutation.Util import * class Mockargs: diff --git a/tests/unit/TestLocalVariables.py b/tests/unit/TestLocalVariables.py index 1cb70e4..5678fcd 100644 --- a/tests/unit/TestLocalVariables.py +++ b/tests/unit/TestLocalVariables.py @@ -26,11 +26,11 @@ sys.path.append("../../") -from src.parsing.parse import * -from src.parsing.typechecker import Context, typecheck -from src.generators.TypeAwareOpMutation import TypeAwareOpMutation -from src.generators.GenTypeAwareMutation.GenTypeAwareMutation import * -from src.generators.GenTypeAwareMutation.Util import * +from yinyang.src.parsing.parse import * +from yinyang.src.parsing.typechecker import Context, typecheck +from yinyang.src.generators.TypeAwareOpMutation import TypeAwareOpMutation +from yinyang.src.generators.GenTypeAwareMutation.GenTypeAwareMutation import * +from yinyang.src.generators.GenTypeAwareMutation.Util import * class Mockargs: diff --git a/tests/unit/TestParsing.py b/tests/unit/TestParsing.py index 3f46ce6..c9f8736 100644 --- a/tests/unit/TestParsing.py +++ b/tests/unit/TestParsing.py @@ -23,7 +23,7 @@ import unittest import sys -from src.parsing.Parse import parse_str, parse_file +from yinyang.src.parsing.Parse import parse_str, parse_file sys.path.append("../../") diff --git a/tests/unit/TestSemanticFusion.py b/tests/unit/TestSemanticFusion.py index 6347a54..17fe102 100644 --- a/tests/unit/TestSemanticFusion.py +++ b/tests/unit/TestSemanticFusion.py @@ -23,8 +23,8 @@ import sys import unittest -from src.parsing.Parse import parse_file -from src.mutators.SemanticFusion.SemanticFusion import SemanticFusion +from yinyang.src.parsing.Parse import parse_file +from yinyang.src.mutators.SemanticFusion.SemanticFusion import SemanticFusion sys.path.append("../../") diff --git a/tests/unit/TestTerm.py b/tests/unit/TestTerm.py index 3d3b64f..fb35c0d 100644 --- a/tests/unit/TestTerm.py +++ b/tests/unit/TestTerm.py @@ -23,8 +23,8 @@ import sys import unittest -from src.parsing.Parse import parse_str -from src.parsing.Ast import Const, Var, Expr +from yinyang.src.parsing.Parse import parse_str +from yinyang.src.parsing.Ast import Const, Var, Expr sys.path.append("../../") diff --git a/tests/unit/TestTypeAwareOpMutation.py b/tests/unit/TestTypeAwareOpMutation.py index b919206..3b0d626 100644 --- a/tests/unit/TestTypeAwareOpMutation.py +++ b/tests/unit/TestTypeAwareOpMutation.py @@ -23,8 +23,8 @@ import sys import unittest -from src.parsing.Parse import parse_str, parse_file -from src.mutators.TypeAwareOpMutation import TypeAwareOpMutation +from yinyang.src.parsing.Parse import parse_str, parse_file +from yinyang.src.mutators.TypeAwareOpMutation import TypeAwareOpMutation sys.path.append("../../") diff --git a/tests/unit/TestTypechecker.py b/tests/unit/TestTypechecker.py index b0cba0f..41ae015 100644 --- a/tests/unit/TestTypechecker.py +++ b/tests/unit/TestTypechecker.py @@ -26,21 +26,21 @@ sys.path.append("../../") -from src.parsing.Ast import ( +from yinyang.src.parsing.Ast import ( Assert, ) -from src.parsing.Parse import ( +from yinyang.src.parsing.Parse import ( parse_str, parse_file ) -from src.parsing.Types import ( +from yinyang.src.parsing.Types import ( UNKNOWN, BOOLEAN_TYPE, INTEGER_TYPE, STRING_TYPE, ) -from src.parsing.Typechecker import Context, typecheck_expr, typecheck +from yinyang.src.parsing.Typechecker import Context, typecheck_expr, typecheck def check_type(expr): diff --git a/config/__init__.py b/yinyang/__init__.py similarity index 100% rename from config/__init__.py rename to yinyang/__init__.py diff --git a/config/Config.py b/yinyang/config/Config.py similarity index 100% rename from config/Config.py rename to yinyang/config/Config.py diff --git a/config/OpfuzzHelptext.py b/yinyang/config/OpfuzzHelptext.py similarity index 99% rename from config/OpfuzzHelptext.py rename to yinyang/config/OpfuzzHelptext.py index ddeddc8..34a6247 100644 --- a/config/OpfuzzHelptext.py +++ b/yinyang/config/OpfuzzHelptext.py @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from src.base.Version import VERSION +from yinyang.src.base.Version import VERSION header = ( diff --git a/config/TypefuzzHelptext.py b/yinyang/config/TypefuzzHelptext.py similarity index 99% rename from config/TypefuzzHelptext.py rename to yinyang/config/TypefuzzHelptext.py index 60c6523..5b581d7 100644 --- a/config/TypefuzzHelptext.py +++ b/yinyang/config/TypefuzzHelptext.py @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from src.base.Version import VERSION +from yinyang.src.base.Version import VERSION header = ( diff --git a/config/YinyangHelptext.py b/yinyang/config/YinyangHelptext.py similarity index 99% rename from config/YinyangHelptext.py rename to yinyang/config/YinyangHelptext.py index 87925b1..b354d09 100644 --- a/config/YinyangHelptext.py +++ b/yinyang/config/YinyangHelptext.py @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from src.base.Version import VERSION +from yinyang.src.base.Version import VERSION header = ( diff --git a/src/__init__.py b/yinyang/config/__init__.py similarity index 100% rename from src/__init__.py rename to yinyang/config/__init__.py diff --git a/config/fusion_functions.txt b/yinyang/config/fusion_functions.txt similarity index 100% rename from config/fusion_functions.txt rename to yinyang/config/fusion_functions.txt diff --git a/config/operator_mutations.txt b/yinyang/config/operator_mutations.txt similarity index 100% rename from config/operator_mutations.txt rename to yinyang/config/operator_mutations.txt diff --git a/config/option_setting.txt b/yinyang/config/option_setting.txt similarity index 100% rename from config/option_setting.txt rename to yinyang/config/option_setting.txt diff --git a/config/typefuzz_config.txt b/yinyang/config/typefuzz_config.txt similarity index 100% rename from config/typefuzz_config.txt rename to yinyang/config/typefuzz_config.txt diff --git a/src/base/__init__.py b/yinyang/src/__init__.py similarity index 100% rename from src/base/__init__.py rename to yinyang/src/__init__.py diff --git a/src/base/ArgumentParser.py b/yinyang/src/base/ArgumentParser.py similarity index 98% rename from src/base/ArgumentParser.py rename to yinyang/src/base/ArgumentParser.py index e0feda0..a80df28 100644 --- a/src/base/ArgumentParser.py +++ b/yinyang/src/base/ArgumentParser.py @@ -22,8 +22,8 @@ import argparse -from src.base.Exitcodes import ERR_USAGE -from src.base.Version import VERSION, COMMIT +from yinyang.src.base.Exitcodes import ERR_USAGE +from yinyang.src.base.Version import VERSION, COMMIT class ArgumentParser(argparse.ArgumentParser): diff --git a/src/base/Driver.py b/yinyang/src/base/Driver.py similarity index 96% rename from src/base/Driver.py rename to yinyang/src/base/Driver.py index 45a393f..6296811 100644 --- a/src/base/Driver.py +++ b/yinyang/src/base/Driver.py @@ -23,16 +23,16 @@ import os import sys from pathlib import Path -from src.base.Exitcodes import ERR_USAGE, ERR_EXHAUSTED_DISK +from yinyang.src.base.Exitcodes import ERR_USAGE, ERR_EXHAUSTED_DISK path = Path(__file__) rootpath = str(path.parent.absolute().parent) try: sys.path.insert(1, os.getcwd() + "/.yinyang") - from Config import solvers + from yinyang.config import solvers except Exception as e: - from config.Config import solvers + from yinyang.config.Config import solvers def check_solver_clis(): diff --git a/src/base/Error.py b/yinyang/src/base/Error.py similarity index 96% rename from src/base/Error.py rename to yinyang/src/base/Error.py index 8106180..df37729 100644 --- a/src/base/Error.py +++ b/yinyang/src/base/Error.py @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from src.base.Version import VERSION, COMMIT +from yinyang.src.base.Version import VERSION, COMMIT def raise_runtime_error(trace, argv, e): diff --git a/src/base/Exitcodes.py b/yinyang/src/base/Exitcodes.py similarity index 100% rename from src/base/Exitcodes.py rename to yinyang/src/base/Exitcodes.py diff --git a/src/base/Utils.py b/yinyang/src/base/Utils.py similarity index 100% rename from src/base/Utils.py rename to yinyang/src/base/Utils.py diff --git a/src/base/Version.py b/yinyang/src/base/Version.py similarity index 100% rename from src/base/Version.py rename to yinyang/src/base/Version.py diff --git a/src/core/__init__.py b/yinyang/src/base/__init__.py similarity index 100% rename from src/core/__init__.py rename to yinyang/src/base/__init__.py diff --git a/src/core/Fuzzer.py b/yinyang/src/core/Fuzzer.py similarity index 95% rename from src/core/Fuzzer.py rename to yinyang/src/core/Fuzzer.py index ce32315..c39d24d 100644 --- a/src/core/Fuzzer.py +++ b/yinyang/src/core/Fuzzer.py @@ -30,24 +30,24 @@ import logging import pathlib -from src.core.Statistic import Statistic -from src.core.Solver import Solver, SolverQueryResult, SolverResult +from yinyang.src.core.Statistic import Statistic +from yinyang.src.core.Solver import Solver, SolverQueryResult, SolverResult -from src.parsing.Parse import parse_file -from src.parsing.Typechecker import typecheck +from yinyang.src.parsing.Parse import parse_file +from yinyang.src.parsing.Typechecker import typecheck -from src.mutators.TypeAwareOpMutation import TypeAwareOpMutation -from src.mutators.SemanticFusion.SemanticFusion import SemanticFusion -from src.mutators.GenTypeAwareMutation.Util import get_unique_subterms -from src.mutators.GenTypeAwareMutation.GenTypeAwareMutation import ( +from yinyang.src.mutators.TypeAwareOpMutation import TypeAwareOpMutation +from yinyang.src.mutators.SemanticFusion.SemanticFusion import SemanticFusion +from yinyang.src.mutators.GenTypeAwareMutation.Util import get_unique_subterms +from yinyang.src.mutators.GenTypeAwareMutation.GenTypeAwareMutation import ( GenTypeAwareMutation ) -from src.base.Utils import random_string, plain, escape -from src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_EXHAUSTED_DISK +from yinyang.src.base.Utils import random_string, plain, escape +from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_EXHAUSTED_DISK -from src.core.Logger import ( +from yinyang.src.core.Logger import ( init_logging, log_strategy_num_seeds, log_generation_attempt, @@ -60,7 +60,7 @@ log_soundness_trigger, log_invalid_mutant, ) -from src.core.FuzzerUtil import ( +from yinyang.src.core.FuzzerUtil import ( get_seeds, grep_result, admissible_seed_size, diff --git a/src/core/FuzzerUtil.py b/yinyang/src/core/FuzzerUtil.py similarity index 92% rename from src/core/FuzzerUtil.py rename to yinyang/src/core/FuzzerUtil.py index 6237ae7..c1121e3 100644 --- a/src/core/FuzzerUtil.py +++ b/yinyang/src/core/FuzzerUtil.py @@ -23,15 +23,15 @@ import re import pathlib -from src.base.Utils import in_list +from yinyang.src.base.Utils import in_list try: sys.path.insert(1, os.getcwd() + "/.yinyang") - from Config import crash_list, duplicate_list, ignore_list + from yinyang.config import crash_list, duplicate_list, ignore_list except Exception as e: - from config.Config import crash_list, duplicate_list, ignore_list + from yinyang.config.Config import crash_list, duplicate_list, ignore_list -from src.core.Solver import SolverResult, SolverQueryResult +from yinyang.src.core.Solver import SolverResult, SolverQueryResult def in_crash_list(stdout, stderr): diff --git a/src/core/Logger.py b/yinyang/src/core/Logger.py similarity index 100% rename from src/core/Logger.py rename to yinyang/src/core/Logger.py diff --git a/src/core/OptionGenerator.py b/yinyang/src/core/OptionGenerator.py similarity index 100% rename from src/core/OptionGenerator.py rename to yinyang/src/core/OptionGenerator.py diff --git a/src/core/Solver.py b/yinyang/src/core/Solver.py similarity index 98% rename from src/core/Solver.py rename to yinyang/src/core/Solver.py index 1ecf8fd..86f627a 100644 --- a/src/core/Solver.py +++ b/yinyang/src/core/Solver.py @@ -23,7 +23,7 @@ import subprocess from enum import Enum -from src.base.Exitcodes import ERR_USAGE +from yinyang.src.base.Exitcodes import ERR_USAGE class SolverQueryResult(Enum): diff --git a/src/core/Statistic.py b/yinyang/src/core/Statistic.py similarity index 100% rename from src/core/Statistic.py rename to yinyang/src/core/Statistic.py diff --git a/src/mutators/GenTypeAwareMutation/__init__.py b/yinyang/src/core/__init__.py similarity index 100% rename from src/mutators/GenTypeAwareMutation/__init__.py rename to yinyang/src/core/__init__.py diff --git a/src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py b/yinyang/src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py similarity index 95% rename from src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py rename to yinyang/src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py index 15b5f8e..db3a039 100644 --- a/src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py +++ b/yinyang/src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py @@ -22,15 +22,15 @@ import random -from src.mutators.Mutator import Mutator -from src.mutators.GenTypeAwareMutation.Operator import ( +from yinyang.src.mutators.Mutator import Mutator +from yinyang.src.mutators.GenTypeAwareMutation.Operator import ( Operator, handle_parametric_op, handle_non_parametric_op ) -from src.mutators.GenTypeAwareMutation.Util import ( +from yinyang.src.mutators.GenTypeAwareMutation.Util import ( type2num, get_all_subterms, local_compatible ) -from src.parsing.Ast import Expr -from src.parsing.Types import ALL +from yinyang.src.parsing.Ast import Expr +from yinyang.src.parsing.Types import ALL class GenTypeAwareMutation(Mutator): diff --git a/src/mutators/GenTypeAwareMutation/Operator.py b/yinyang/src/mutators/GenTypeAwareMutation/Operator.py similarity index 98% rename from src/mutators/GenTypeAwareMutation/Operator.py rename to yinyang/src/mutators/GenTypeAwareMutation/Operator.py index 99a8019..c62a654 100644 --- a/src/mutators/GenTypeAwareMutation/Operator.py +++ b/yinyang/src/mutators/GenTypeAwareMutation/Operator.py @@ -20,7 +20,7 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from src.parsing.Types import sort2type +from yinyang.src.parsing.Types import sort2type class Operator: diff --git a/src/mutators/GenTypeAwareMutation/Util.py b/yinyang/src/mutators/GenTypeAwareMutation/Util.py similarity index 98% rename from src/mutators/GenTypeAwareMutation/Util.py rename to yinyang/src/mutators/GenTypeAwareMutation/Util.py index 7c56306..3720e84 100644 --- a/src/mutators/GenTypeAwareMutation/Util.py +++ b/yinyang/src/mutators/GenTypeAwareMutation/Util.py @@ -22,8 +22,8 @@ import copy -from src.parsing.Ast import Term -from src.parsing.Types import ( +from yinyang.src.parsing.Ast import Term +from yinyang.src.parsing.Types import ( BOOLEAN_TYPE, REAL_TYPE, INTEGER_TYPE, ROUNDINGMODE_TYPE, STRING_TYPE, REGEXP_TYPE ) diff --git a/src/mutators/SemanticFusion/__init__.py b/yinyang/src/mutators/GenTypeAwareMutation/__init__.py similarity index 100% rename from src/mutators/SemanticFusion/__init__.py rename to yinyang/src/mutators/GenTypeAwareMutation/__init__.py diff --git a/src/mutators/Mutator.py b/yinyang/src/mutators/Mutator.py similarity index 100% rename from src/mutators/Mutator.py rename to yinyang/src/mutators/Mutator.py diff --git a/src/mutators/SemanticFusion/SemanticFusion.py b/yinyang/src/mutators/SemanticFusion/SemanticFusion.py old mode 100755 new mode 100644 similarity index 93% rename from src/mutators/SemanticFusion/SemanticFusion.py rename to yinyang/src/mutators/SemanticFusion/SemanticFusion.py index f7c0b4c..7a9ece9 --- a/src/mutators/SemanticFusion/SemanticFusion.py +++ b/yinyang/src/mutators/SemanticFusion/SemanticFusion.py @@ -23,8 +23,8 @@ import random import copy -from src.mutators.Mutator import Mutator -from src.mutators.SemanticFusion.VariableFusion import ( +from yinyang.src.mutators.Mutator import Mutator +from yinyang.src.mutators.SemanticFusion.VariableFusion import ( fill_template, inv_x, inv_y, @@ -32,14 +32,14 @@ add_fusion_constraints, add_var_decls, ) -from src.mutators.SemanticFusion.Util import ( +from yinyang.src.mutators.SemanticFusion.Util import ( random_var_triplets, disjunction, conjunction, ) -from src.base.Exitcodes import ERR_USAGE -from src.parsing.Parse import parse_str -from src.parsing.Ast import DeclareFun +from yinyang.src.base.Exitcodes import ERR_USAGE +from yinyang.src.parsing.Parse import parse_str +from yinyang.src.parsing.Ast import DeclareFun class SemanticFusion(Mutator): diff --git a/src/mutators/SemanticFusion/Util.py b/yinyang/src/mutators/SemanticFusion/Util.py old mode 100755 new mode 100644 similarity index 99% rename from src/mutators/SemanticFusion/Util.py rename to yinyang/src/mutators/SemanticFusion/Util.py index 6066e74..aaad004 --- a/src/mutators/SemanticFusion/Util.py +++ b/yinyang/src/mutators/SemanticFusion/Util.py @@ -23,7 +23,7 @@ import random import itertools -from src.parsing.Ast import ( +from yinyang.src.parsing.Ast import ( Term, Script, Assert, diff --git a/src/mutators/SemanticFusion/VariableFusion.py b/yinyang/src/mutators/SemanticFusion/VariableFusion.py old mode 100755 new mode 100644 similarity index 98% rename from src/mutators/SemanticFusion/VariableFusion.py rename to yinyang/src/mutators/SemanticFusion/VariableFusion.py index de1b2cf..15da885 --- a/src/mutators/SemanticFusion/VariableFusion.py +++ b/yinyang/src/mutators/SemanticFusion/VariableFusion.py @@ -24,7 +24,7 @@ import copy import string -from src.parsing.Ast import Const, Var, Expr, Assert, DeclareConst +from yinyang.src.parsing.Ast import Const, Var, Expr, Assert, DeclareConst def gen_random_string(length): diff --git a/src/mutators/__init__.py b/yinyang/src/mutators/SemanticFusion/__init__.py similarity index 100% rename from src/mutators/__init__.py rename to yinyang/src/mutators/SemanticFusion/__init__.py diff --git a/src/mutators/TypeAwareOpMutation.py b/yinyang/src/mutators/TypeAwareOpMutation.py similarity index 98% rename from src/mutators/TypeAwareOpMutation.py rename to yinyang/src/mutators/TypeAwareOpMutation.py index 8669b12..5787d02 100644 --- a/src/mutators/TypeAwareOpMutation.py +++ b/yinyang/src/mutators/TypeAwareOpMutation.py @@ -22,7 +22,7 @@ import random -from src.mutators.Mutator import Mutator +from yinyang.src.mutators.Mutator import Mutator class TypeAwareOpMutation(Mutator): diff --git a/yinyang/src/mutators/__init__.py b/yinyang/src/mutators/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/parsing/Ast.py b/yinyang/src/parsing/Ast.py similarity index 100% rename from src/parsing/Ast.py rename to yinyang/src/parsing/Ast.py diff --git a/src/parsing/AstVisitor.py b/yinyang/src/parsing/AstVisitor.py similarity index 98% rename from src/parsing/AstVisitor.py rename to yinyang/src/parsing/AstVisitor.py index 21349e4..1db66b0 100644 --- a/src/parsing/AstVisitor.py +++ b/yinyang/src/parsing/AstVisitor.py @@ -20,9 +20,9 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. -from src.parsing.SMTLIBv2Parser import SMTLIBv2Parser -from src.parsing.SMTLIBv2Visitor import SMTLIBv2Visitor -from src.parsing.Ast import ( +from yinyang.src.parsing.SMTLIBv2Parser import SMTLIBv2Parser +from yinyang.src.parsing.SMTLIBv2Visitor import SMTLIBv2Visitor +from yinyang.src.parsing.Ast import ( Var, Const, Expr, @@ -52,7 +52,7 @@ FunDecl, SMTLIBCommand, ) -from src.parsing.Types import ( +from yinyang.src.parsing.Types import ( BITVECTOR_TYPE, INTEGER_TYPE, REAL_TYPE, diff --git a/src/parsing/Parse.py b/yinyang/src/parsing/Parse.py similarity index 96% rename from src/parsing/Parse.py rename to yinyang/src/parsing/Parse.py index 81cf86a..d0318ec 100644 --- a/src/parsing/Parse.py +++ b/yinyang/src/parsing/Parse.py @@ -26,10 +26,10 @@ from antlr4.error.ErrorListener import ErrorListener -from src.parsing.SMTLIBv2Lexer import SMTLIBv2Lexer -from src.parsing.SMTLIBv2Parser import SMTLIBv2Parser -from src.parsing.TimeoutDecorator import exit_after -from src.parsing.AstVisitor import AstVisitor +from yinyang.src.parsing.SMTLIBv2Lexer import SMTLIBv2Lexer +from yinyang.src.parsing.SMTLIBv2Parser import SMTLIBv2Parser +from yinyang.src.parsing.TimeoutDecorator import exit_after +from yinyang.src.parsing.AstVisitor import AstVisitor from antlr4.CommonTokenStream import CommonTokenStream from antlr4.FileStream import FileStream diff --git a/src/parsing/SMTLIBv2.g4 b/yinyang/src/parsing/SMTLIBv2.g4 similarity index 100% rename from src/parsing/SMTLIBv2.g4 rename to yinyang/src/parsing/SMTLIBv2.g4 diff --git a/src/parsing/SMTLIBv2.interp b/yinyang/src/parsing/SMTLIBv2.interp similarity index 100% rename from src/parsing/SMTLIBv2.interp rename to yinyang/src/parsing/SMTLIBv2.interp diff --git a/src/parsing/SMTLIBv2.tokens b/yinyang/src/parsing/SMTLIBv2.tokens similarity index 100% rename from src/parsing/SMTLIBv2.tokens rename to yinyang/src/parsing/SMTLIBv2.tokens diff --git a/src/parsing/SMTLIBv2Lexer.interp b/yinyang/src/parsing/SMTLIBv2Lexer.interp similarity index 100% rename from src/parsing/SMTLIBv2Lexer.interp rename to yinyang/src/parsing/SMTLIBv2Lexer.interp diff --git a/src/parsing/SMTLIBv2Lexer.py b/yinyang/src/parsing/SMTLIBv2Lexer.py similarity index 100% rename from src/parsing/SMTLIBv2Lexer.py rename to yinyang/src/parsing/SMTLIBv2Lexer.py diff --git a/src/parsing/SMTLIBv2Lexer.tokens b/yinyang/src/parsing/SMTLIBv2Lexer.tokens similarity index 100% rename from src/parsing/SMTLIBv2Lexer.tokens rename to yinyang/src/parsing/SMTLIBv2Lexer.tokens diff --git a/src/parsing/SMTLIBv2Listener.py b/yinyang/src/parsing/SMTLIBv2Listener.py similarity index 100% rename from src/parsing/SMTLIBv2Listener.py rename to yinyang/src/parsing/SMTLIBv2Listener.py diff --git a/src/parsing/SMTLIBv2Parser.py b/yinyang/src/parsing/SMTLIBv2Parser.py similarity index 100% rename from src/parsing/SMTLIBv2Parser.py rename to yinyang/src/parsing/SMTLIBv2Parser.py diff --git a/src/parsing/SMTLIBv2Visitor.py b/yinyang/src/parsing/SMTLIBv2Visitor.py similarity index 99% rename from src/parsing/SMTLIBv2Visitor.py rename to yinyang/src/parsing/SMTLIBv2Visitor.py index c8df08c..4c82c3c 100644 --- a/src/parsing/SMTLIBv2Visitor.py +++ b/yinyang/src/parsing/SMTLIBv2Visitor.py @@ -22,8 +22,8 @@ # Generated from SMTLIBv2.g4 by ANTLR 4.8 from antlr4 import * -from src.parsing.Ast import * -from src.parsing.SMTLIBv2Parser import SMTLIBv2Parser +from yinyang.src.parsing.Ast import * +from yinyang.src.parsing.SMTLIBv2Parser import SMTLIBv2Parser # This class defines a complete generic visitor for a parse tree produced by SMTLIBv2Parser. class SMTLIBv2Visitor(ParseTreeVisitor): diff --git a/src/parsing/TimeoutDecorator.py b/yinyang/src/parsing/TimeoutDecorator.py similarity index 100% rename from src/parsing/TimeoutDecorator.py rename to yinyang/src/parsing/TimeoutDecorator.py diff --git a/src/parsing/Typechecker.py b/yinyang/src/parsing/Typechecker.py similarity index 99% rename from src/parsing/Typechecker.py rename to yinyang/src/parsing/Typechecker.py index 8c28be4..2710c5b 100644 --- a/src/parsing/Typechecker.py +++ b/yinyang/src/parsing/Typechecker.py @@ -24,7 +24,7 @@ sys.setrecursionlimit(100000) -from src.parsing.Types import ( +from yinyang.src.parsing.Types import ( sort2type, # Types BOOLEAN_TYPE, REAL_TYPE, INTEGER_TYPE, ROUNDINGMODE_TYPE, STRING_TYPE, @@ -49,7 +49,7 @@ FP_LT, FP_GEQ, FP_GT, FP_EQ, FP_MIN, FP_MAX, FP_FMA, TO_FP_UNSIGNED, TO_FP ) -from src.parsing.Ast import Assert +from yinyang.src.parsing.Ast import Assert class Context: diff --git a/src/parsing/Types.py b/yinyang/src/parsing/Types.py similarity index 100% rename from src/parsing/Types.py rename to yinyang/src/parsing/Types.py diff --git a/src/parsing/__init__.py b/yinyang/src/parsing/__init__.py similarity index 100% rename from src/parsing/__init__.py rename to yinyang/src/parsing/__init__.py diff --git a/src/parsing/antlr-4.9.2-complete.jar b/yinyang/src/parsing/antlr-4.9.2-complete.jar old mode 100755 new mode 100644 similarity index 100% rename from src/parsing/antlr-4.9.2-complete.jar rename to yinyang/src/parsing/antlr-4.9.2-complete.jar diff --git a/src/parsing/regenerate_grammar.sh b/yinyang/src/parsing/regenerate_grammar.sh old mode 100755 new mode 100644 similarity index 100% rename from src/parsing/regenerate_grammar.sh rename to yinyang/src/parsing/regenerate_grammar.sh From 30da58a1800f953f5c9a4ada03a2125c38b5064e Mon Sep 17 00:00:00 2001 From: Chengyu Zhang Date: Tue, 17 Aug 2021 11:08:41 +0800 Subject: [PATCH 2/8] fix config path --- docs/building_on.rst | 6 +++--- docs/fusion.rst | 4 ++-- tests/integration/detection/TestDetection.py | 6 +++--- tests/unit/TestGenTypeAwareMutation.py | 2 +- tests/unit/TestLocalVariables.py | 2 +- yinyang/config/TypefuzzHelptext.py | 2 +- yinyang/src/base/ArgumentParser.py | 6 +++--- yinyang/src/core/Fuzzer.py | 6 +++--- .../mutators/GenTypeAwareMutation/GenTypeAwareMutation.py | 2 +- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/docs/building_on.rst b/docs/building_on.rst index e9ba3ee..d8bb506 100644 --- a/docs/building_on.rst +++ b/docs/building_on.rst @@ -30,7 +30,7 @@ The following file tree shows the most important files of typefuzz and includes When TypeFuzz is called from the command line, it executes `bin/typefuzz` containing the main function. After parsing the command line and reading in the seeds, the method `Fuzzer.py:run` is called. It randomly pops an SMT-LIB file from the seed list (`Fuzzer.py:142`), then parses (`Fuzzer.py:98`) and type-checks (`Fuzzer.py:146`) the SMT-LIB file. Next, we compute the set of unique expressions (`Fuzzer.py:148`) from the seed and pass it to a newly created mutator GenTypeAwareMutation (`Fuzzer.py:149`). The mutator is then called in a for-loop realizing n consecutive mutations (`Fuzzer.py:171`). Each mutated formula is then passed to the SMT solvers under test which checks for soundness bugs, invalid model bugs, assertion violations, segfaults (`Fuzzer.py:185`) and dumps the bug triggers to the disk. For details on these checks, read the comments in the method `Fuzzer.py:test`. -Generative type-aware mutation's mutator class is realized in `GenTypeAwareMutation.py`. It takes a type-checked SMT-LIB script and the set of its unique expressions as arguments to the constructor. Then, we parse the configuration file (`config/typefuzz_config.txt`) containing the operator signatures. The method `mutate` implements a mutation step. First, we call the method `get_all_subterms` to return a list of all expressions (`av_expr`) and another list with their types (`expr_type`). Next, we repeatedly choose a term t1 from the formula to be substituted by a term t2 (returned by `get_replacee`). If we could successfully construct such a term, then we substitute and return the mutated formula. +Generative type-aware mutation's mutator class is realized in `GenTypeAwareMutation.py`. It takes a type-checked SMT-LIB script and the set of its unique expressions as arguments to the constructor. Then, we parse the configuration file (`yinyang/config/typefuzz_config.txt`) containing the operator signatures. The method `mutate` implements a mutation step. First, we call the method `get_all_subterms` to return a list of all expressions (`av_expr`) and another list with their types (`expr_type`). Next, we repeatedly choose a term t1 from the formula to be substituted by a term t2 (returned by `get_replacee`). If we could successfully construct such a term, then we substitute and return the mutated formula. The `get_replacee(term)` method randomly chooses an operator from the list of candidate operators. The list of candidate operators contains all operators with a return type matching term's type and includes the identity operator `id`. Next, we pick a type-conforming expression from the set of unique expressions for every argument for the operator at hand and return the expression. The `get_replacee`method may fail, e.g., if we would have picked an operator of a conforming type but no term with conforming types to its arguments exist. To avoid this, we repeat the `get_replacee` method several times. @@ -42,7 +42,7 @@ Run TypeFuzz with other SMT Solvers .................................... Besides Z3 and CVC4, TypeFuzz can be run with any other SMT solver such as [MathSAT](http://mathsat.fbk.eu), [Boolector](http://verify.inf.usi.ch/content/opensmt2), [Yices](http://yices.csl.sri.com/), and [SMT-Interpol](http://ultimate.informatik.uni-freiburg.de/smtinterpol/), etc. Since TypeFuzz is based on differential testing, it needs at least two solver configurations, ideally with a large overlap in the supported SMT logics. Furthermore, yinyang's type checker currently has stable support for string and arithmetic logics. Support for other logics is currently experimental but will be finalized shortly. -Solver configurations could either be specified in the command line or in the configuration file `config/Config.py` such as: +Solver configurations could either be specified in the command line or in the configuration file `yinyang/config/Config.py` such as: .. code-block:: text solvers = [ @@ -52,7 +52,7 @@ Solver configurations could either be specified in the command line or in the co "cvc4 --check-models --produce-models --incremental --strings-exp -q", ] -To run TypeFuzz with these four solver configurations in the config file, you would need to run `typefuzz "" `. Note, the `crash_list` in Config/config.py, which may need to be updated ensuring that crashes by the new solver(s) are caught. +To run TypeFuzz with these four solver configurations in the config file, you would need to run `typefuzz "" `. Note, the `crash_list` in yinyang/config/config.py, which may need to be updated ensuring that crashes by the new solver(s) are caught. Devise a custom mutator ......................... diff --git a/docs/fusion.rst b/docs/fusion.rst index cc23952..1238e4e 100644 --- a/docs/fusion.rst +++ b/docs/fusion.rst @@ -54,7 +54,7 @@ Fusion requires the seeds that are pre-categorized to be either sat or unsat. Pr Fusion functions ................................ -The configuration file ``config/fusion_functions.txt`` specifies fusion and inversion functions. The format is the following: +The configuration file ``yinyang/config/fusion_functions.txt`` specifies fusion and inversion functions. The format is the following: .. code-block:: text @@ -70,7 +70,7 @@ The configuration file ``config/fusion_functions.txt`` specifies fusion and inve **Example:** -The following code shows schematically fusion and inversion are described in ``config/fusion_functions.txt``. +The following code shows schematically fusion and inversion are described in ``yinyang/config/fusion_functions.txt``. .. code-block:: text diff --git a/tests/integration/detection/TestDetection.py b/tests/integration/detection/TestDetection.py index 2695784..a6257c4 100644 --- a/tests/integration/detection/TestDetection.py +++ b/tests/integration/detection/TestDetection.py @@ -349,8 +349,8 @@ def test_duplicate_list(): ] """ - os.system("mv config/config.py config/config.py.orig") - with open("config/Config.py", "w") as f: + os.system("mv yinyang/config/config.py yinyang/config/config.py.orig") + with open("yinyang/config/Config.py", "w") as f: f.write(config_py) create_mocksolver_msg(msg, solver) first_config = os.path.abspath(solver) @@ -364,7 +364,7 @@ def test_duplicate_list(): exit(1) else: os.system("rm -rf " + solver) - os.system("mv config/config.py.orig config/config.py") + os.system("mv yinyang/config/config.py.orig yinyang/config/config.py") if __name__ == "__main__": diff --git a/tests/unit/TestGenTypeAwareMutation.py b/tests/unit/TestGenTypeAwareMutation.py index 1a7b96c..2175ada 100644 --- a/tests/unit/TestGenTypeAwareMutation.py +++ b/tests/unit/TestGenTypeAwareMutation.py @@ -34,7 +34,7 @@ class Mockargs: modulo = 3 - config = "config/typefuzz_config.txt" + config = "yinyang/config/typefuzz_config.txt" class GenTypeAwareMutationTestCase(unittest.TestCase): diff --git a/tests/unit/TestLocalVariables.py b/tests/unit/TestLocalVariables.py index 5678fcd..dedfd90 100644 --- a/tests/unit/TestLocalVariables.py +++ b/tests/unit/TestLocalVariables.py @@ -35,7 +35,7 @@ class Mockargs: modulo = 3 - config_file = "config/generalization.txt" + config_file = "yinyang/config/generalization.txt" class LocalVariableMutationTestCase(unittest.TestCase): diff --git a/yinyang/config/TypefuzzHelptext.py b/yinyang/config/TypefuzzHelptext.py index 5b581d7..13568c1 100644 --- a/yinyang/config/TypefuzzHelptext.py +++ b/yinyang/config/TypefuzzHelptext.py @@ -119,7 +119,7 @@ -s , --scratchfolder temp folder to dump mutants (default: ./scratch) -c , --config - set custom config file. (default: config/typefuzz_config.txt) + set custom config file. (default: yinyang/config/typefuzz_config.txt) -L , --limit file size limit on seed formula in bytes (default: 100000) -n, --no-log disable logging diff --git a/yinyang/src/base/ArgumentParser.py b/yinyang/src/base/ArgumentParser.py index a80df28..ae57737 100644 --- a/yinyang/src/base/ArgumentParser.py +++ b/yinyang/src/base/ArgumentParser.py @@ -121,7 +121,7 @@ def add_opfuzz_args(parser, rootpath, current_dir): "-c", "--config", metavar="path_to_file", - default=rootpath + "/config/operator_mutations.txt", + default=rootpath + "/yinyang/config/operator_mutations.txt", ) @@ -150,7 +150,7 @@ def add_typefuzz_args(parser, rootpath, current_dir): "-c", "--config", metavar="path_to_file", - default=rootpath + "/config/typefuzz_config.txt", + default=rootpath + "/yinyang/config/typefuzz_config.txt", ) @@ -179,7 +179,7 @@ def add_yinyang_args(parser, rootpath, current_dir): "-c", "--config", metavar="path_to_file", - default=rootpath + "/config/fusion_functions.txt", + default=rootpath + "/yinyang/fusion_functions.txt", ) diff --git a/yinyang/src/core/Fuzzer.py b/yinyang/src/core/Fuzzer.py index c39d24d..999fbf9 100644 --- a/yinyang/src/core/Fuzzer.py +++ b/yinyang/src/core/Fuzzer.py @@ -249,12 +249,12 @@ def test(self, script, iteration): return False # Match stdout and stderr against the crash list - # (see config/Config.py:27) which contains various crash messages + # (see yinyang/config/Config.py:27) which contains various crash messages # such as assertion errors, check failure, invalid models, etc. if in_crash_list(stdout, stderr): # Match stdout and stderr against the duplicate list - # (see config/Config.py:51) to prevent catching duplicate bug + # (see yinyang/config/Config.py:51) to prevent catching duplicate bug # triggers. if not in_duplicate_list(stdout, stderr): self.statistic.effective_calls += 1 @@ -271,7 +271,7 @@ def test(self, script, iteration): # Check whether the solver call produced errors, e.g, related # to its parser, options, type-checker etc., by matching stdout - # and stderr against the ignore list (see config/Config.py:54). + # and stderr against the ignore list (see yinyang/config/Config.py:54). if in_ignore_list(stdout, stderr): log_ignore_list_mutant(solver_cli) self.statistic.invalid_mutants += 1 diff --git a/yinyang/src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py b/yinyang/src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py index db3a039..4a985eb 100644 --- a/yinyang/src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py +++ b/yinyang/src/mutators/GenTypeAwareMutation/GenTypeAwareMutation.py @@ -44,7 +44,7 @@ def __init__(self, formula, args, unique_expr): def parse_config_file(self): """ Read the customizable configuration file. - Customize the configuration file at config/generalization.txt. + Customize the configuration file at yinyang/config/generalization.txt. Configuration file contains all the signatures of SMT-LIB operators and the signatures are used for operator choice during the mutation. """ From 2fdc4080a602fb71b52aff942943da2e9f757d67 Mon Sep 17 00:00:00 2001 From: Chengyu Zhang Date: Tue, 17 Aug 2021 11:45:06 +0800 Subject: [PATCH 3/8] fix path error --- yinyang/src/base/ArgumentParser.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yinyang/src/base/ArgumentParser.py b/yinyang/src/base/ArgumentParser.py index ae57737..bd995fc 100644 --- a/yinyang/src/base/ArgumentParser.py +++ b/yinyang/src/base/ArgumentParser.py @@ -179,7 +179,7 @@ def add_yinyang_args(parser, rootpath, current_dir): "-c", "--config", metavar="path_to_file", - default=rootpath + "/yinyang/fusion_functions.txt", + default=rootpath + "/yinyang/config/fusion_functions.txt", ) From df3f7e192aef31983c55d8c6365db04bc20f93d0 Mon Sep 17 00:00:00 2001 From: Chengyu Zhang Date: Tue, 17 Aug 2021 13:30:41 +0800 Subject: [PATCH 4/8] fix path for checkstyle --- bin/checkstyle.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/checkstyle.sh b/bin/checkstyle.sh index c125333..8283446 100755 --- a/bin/checkstyle.sh +++ b/bin/checkstyle.sh @@ -1,2 +1,2 @@ #! /bin/bash -flake8 --exclude "*SMTLIBv2*,*runtests.py*,__init__.py" src tests config bin/opfuzz bin/yinyang bin/typefuzz --select=E --ignore=E402 --statistics +flake8 --exclude "*SMTLIBv2*,*runtests.py*,__init__.py" yinyang/src tests yinyang/config bin/opfuzz bin/yinyang bin/typefuzz --select=E --ignore=E402 --statistics From a2a51f17103905ea5fcba5b76a611f20b8575c37 Mon Sep 17 00:00:00 2001 From: Chengyu Zhang Date: Tue, 17 Aug 2021 18:49:04 +0800 Subject: [PATCH 5/8] fix flask --- bin/opfuzz | 3 ++- bin/typefuzz | 3 ++- bin/yinyang | 3 ++- yinyang/config/TypefuzzHelptext.py | 3 ++- yinyang/src/core/Fuzzer.py | 12 +++++++----- 5 files changed, 15 insertions(+), 9 deletions(-) diff --git a/bin/opfuzz b/bin/opfuzz index 6f607bc..bbc653d 100755 --- a/bin/opfuzz +++ b/bin/opfuzz @@ -37,7 +37,8 @@ current_dir = os.getcwd() from yinyang.src.base.Driver import run_checks from yinyang.src.base.Error import raise_runtime_error from yinyang.src.base.ArgumentParser import build_opfuzz_parser -from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_USAGE, ERR_INTERNAL +from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS +from yinyang.src.base.Exitcodes import ERR_USAGE, ERR_INTERNAL from yinyang.src.core.Fuzzer import Fuzzer diff --git a/bin/typefuzz b/bin/typefuzz index 8ba778b..7972b52 100755 --- a/bin/typefuzz +++ b/bin/typefuzz @@ -36,7 +36,8 @@ current_dir = os.getcwd() from yinyang.src.base.Driver import run_checks from yinyang.src.base.Error import raise_runtime_error from yinyang.src.base.ArgumentParser import build_typefuzz_parser -from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_USAGE, ERR_INTERNAL +from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS +from yinyang.src.base.Exitcodes import ERR_USAGE, ERR_INTERNAL from yinyang.src.core.Fuzzer import Fuzzer diff --git a/bin/yinyang b/bin/yinyang index c060537..28baf16 100755 --- a/bin/yinyang +++ b/bin/yinyang @@ -37,7 +37,8 @@ current_dir = os.getcwd() from yinyang.src.base.Driver import run_checks from yinyang.src.base.Error import raise_runtime_error from yinyang.src.base.ArgumentParser import build_yinyang_parser -from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS, ERR_USAGE, ERR_INTERNAL +from yinyang.src.base.Exitcodes import OK_BUGS, OK_NOBUGS +from yinyang.src.base.Exitcodes import ERR_USAGE, ERR_INTERNAL from yinyang.src.core.Fuzzer import Fuzzer diff --git a/yinyang/config/TypefuzzHelptext.py b/yinyang/config/TypefuzzHelptext.py index 13568c1..7ee4123 100644 --- a/yinyang/config/TypefuzzHelptext.py +++ b/yinyang/config/TypefuzzHelptext.py @@ -119,7 +119,8 @@ -s , --scratchfolder temp folder to dump mutants (default: ./scratch) -c , --config - set custom config file. (default: yinyang/config/typefuzz_config.txt) + set custom config file. + (default: yinyang/config/typefuzz_config.txt) -L , --limit file size limit on seed formula in bytes (default: 100000) -n, --no-log disable logging diff --git a/yinyang/src/core/Fuzzer.py b/yinyang/src/core/Fuzzer.py index 999fbf9..3a58899 100644 --- a/yinyang/src/core/Fuzzer.py +++ b/yinyang/src/core/Fuzzer.py @@ -249,13 +249,14 @@ def test(self, script, iteration): return False # Match stdout and stderr against the crash list - # (see yinyang/config/Config.py:27) which contains various crash messages - # such as assertion errors, check failure, invalid models, etc. + # (see yinyang/config/Config.py:27) which contains various + # crash messages such as assertion errors, check failure, + # invalid models, etc. if in_crash_list(stdout, stderr): # Match stdout and stderr against the duplicate list - # (see yinyang/config/Config.py:51) to prevent catching duplicate bug - # triggers. + # (see yinyang/config/Config.py:51) to prevent catching + # duplicate bug triggers. if not in_duplicate_list(stdout, stderr): self.statistic.effective_calls += 1 self.statistic.crashes += 1 @@ -271,7 +272,8 @@ def test(self, script, iteration): # Check whether the solver call produced errors, e.g, related # to its parser, options, type-checker etc., by matching stdout - # and stderr against the ignore list (see yinyang/config/Config.py:54). + # and stderr against the ignore list + # (see yinyang/config/Config.py:54). if in_ignore_list(stdout, stderr): log_ignore_list_mutant(solver_cli) self.statistic.invalid_mutants += 1 From cb40d658be2145afddd59297ae992247d469ca5c Mon Sep 17 00:00:00 2001 From: muchang Date: Wed, 18 Aug 2021 16:55:02 +0800 Subject: [PATCH 6/8] fix rootpath when installing with pypi --- bin/opfuzz | 2 +- bin/typefuzz | 2 +- bin/yinyang | 2 +- setup.cfg | 2 +- yinyang/src/base/ArgumentParser.py | 25 ++++++++++++++++--------- 5 files changed, 20 insertions(+), 13 deletions(-) diff --git a/bin/opfuzz b/bin/opfuzz index bbc653d..c691d90 100755 --- a/bin/opfuzz +++ b/bin/opfuzz @@ -52,7 +52,7 @@ from yinyang.config.OpfuzzHelptext import ( def main(): - parser = build_opfuzz_parser(rootpath, current_dir, usage) + parser = build_opfuzz_parser(current_dir, usage) if len(sys.argv) == 1: diff --git a/bin/typefuzz b/bin/typefuzz index 7972b52..3945148 100755 --- a/bin/typefuzz +++ b/bin/typefuzz @@ -51,7 +51,7 @@ from yinyang.config.TypefuzzHelptext import ( def main(): - parser = build_typefuzz_parser(rootpath, current_dir, usage) + parser = build_typefuzz_parser(current_dir, usage) if len(sys.argv) == 1: diff --git a/bin/yinyang b/bin/yinyang index 28baf16..57b1173 100755 --- a/bin/yinyang +++ b/bin/yinyang @@ -52,7 +52,7 @@ from yinyang.config.YinyangHelptext import ( def main(): - parser = build_yinyang_parser(rootpath, current_dir, usage) + parser = build_yinyang_parser(current_dir, usage) if len(sys.argv) == 1: diff --git a/setup.cfg b/setup.cfg index 005fd06..5ce6794 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = yinyang -version = 0.0.33 +version = 0.1.2 author = Dominik Winterer, Chengyu Zhang, Jiwon Park, Zhendong Su author_email = dominik.winterer@inf.ethz.ch, dale.chengyu.zhang@gmail.com, jiwon.park@polytechnique.edu, ‎zhendong.su@inf.ethz.ch description = A fuzzing framework for SMT solvers diff --git a/yinyang/src/base/ArgumentParser.py b/yinyang/src/base/ArgumentParser.py index bd995fc..cb0b520 100644 --- a/yinyang/src/base/ArgumentParser.py +++ b/yinyang/src/base/ArgumentParser.py @@ -20,11 +20,18 @@ # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE # SOFTWARE. +import sys import argparse from yinyang.src.base.Exitcodes import ERR_USAGE from yinyang.src.base.Version import VERSION, COMMIT +from pathlib import Path + +path = Path(__file__) +ROOTPATH = str(path.parent.absolute().parent.parent.parent) +sys.path.append(ROOTPATH) + class ArgumentParser(argparse.ArgumentParser): def error(self, message): @@ -183,40 +190,40 @@ def add_yinyang_args(parser, rootpath, current_dir): ) -def build_opfuzz_parser(rootpath, current_dir, usage): +def build_opfuzz_parser(current_dir, usage): parser = ArgumentParser( description="", usage=usage, formatter_class=argparse.RawDescriptionHelpFormatter, add_help=False, ) - add_common_args(parser, rootpath, current_dir) - add_opfuzz_args(parser, rootpath, current_dir) + add_common_args(parser, ROOTPATH, current_dir) + add_opfuzz_args(parser, ROOTPATH, current_dir) return parser -def build_typefuzz_parser(rootpath, current_dir, usage): +def build_typefuzz_parser(current_dir, usage): parser = ArgumentParser( description="", usage=usage, formatter_class=argparse.RawDescriptionHelpFormatter, add_help=False, ) - add_common_args(parser, current_dir, rootpath) - add_typefuzz_args(parser, current_dir, rootpath) + add_common_args(parser, ROOTPATH, current_dir) + add_typefuzz_args(parser, ROOTPATH, current_dir) return parser -def build_yinyang_parser(rootpath, current_dir, usage): +def build_yinyang_parser(current_dir, usage): parser = ArgumentParser( description="", usage=usage, formatter_class=argparse.RawDescriptionHelpFormatter, add_help=False, ) - add_common_args(parser, current_dir, rootpath) - add_yinyang_args(parser, current_dir, rootpath) + add_common_args(parser, ROOTPATH, current_dir) + add_yinyang_args(parser, ROOTPATH, current_dir) return parser From 11a134bf51a6d4a0420214dc14448e3acef70d59 Mon Sep 17 00:00:00 2001 From: muchang Date: Wed, 18 Aug 2021 17:49:05 +0800 Subject: [PATCH 7/8] add MANIFEST.in --- .gitignore | 1 + MANIFEST.in | 1 + setup.cfg | 1 + 3 files changed, 3 insertions(+) create mode 100644 MANIFEST.in diff --git a/.gitignore b/.gitignore index 6533c90..c601f9c 100644 --- a/.gitignore +++ b/.gitignore @@ -2,4 +2,5 @@ __pycache__ .DS_Store build dist +logs yinyang.egg-info \ No newline at end of file diff --git a/MANIFEST.in b/MANIFEST.in new file mode 100644 index 0000000..45a7391 --- /dev/null +++ b/MANIFEST.in @@ -0,0 +1 @@ +include yinyang/config/* \ No newline at end of file diff --git a/setup.cfg b/setup.cfg index 5ce6794..de7e037 100644 --- a/setup.cfg +++ b/setup.cfg @@ -17,6 +17,7 @@ classifiers = Operating System :: OS Independent [options] +include_package_data = True packages = find: install_requires = antlr4-python3-runtime==4.9.2 From b81f678fa7fd05b6cd9e798a92114e75236a1c50 Mon Sep 17 00:00:00 2001 From: Chengyu Zhang Date: Wed, 18 Aug 2021 23:55:52 +0800 Subject: [PATCH 8/8] ready for release --- setup.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/setup.cfg b/setup.cfg index de7e037..78efab4 100644 --- a/setup.cfg +++ b/setup.cfg @@ -1,6 +1,6 @@ [metadata] name = yinyang -version = 0.1.2 +version = 0.3.0 author = Dominik Winterer, Chengyu Zhang, Jiwon Park, Zhendong Su author_email = dominik.winterer@inf.ethz.ch, dale.chengyu.zhang@gmail.com, jiwon.park@polytechnique.edu, ‎zhendong.su@inf.ethz.ch description = A fuzzing framework for SMT solvers