From 1a5ecc996cfae1786286b022a1488ca5651f0c50 Mon Sep 17 00:00:00 2001 From: Gwanho Kim Date: Mon, 2 Oct 2023 11:23:45 +0900 Subject: [PATCH 01/31] Initial commit --- README.md | 92 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 92 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..ee7f2fc --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +# homework2 + + + +## Getting started + +To make it easy for you to get started with GitLab, here's a list of recommended next steps. + +Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! + +## Add your files + +- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files +- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: + +``` +cd existing_repo +git remote add origin https://csed332.postech.ac.kr/khkim6040/homework2.git +git branch -M main +git push -uf origin main +``` + +## Integrate with your tools + +- [ ] [Set up project integrations](https://csed332.postech.ac.kr/khkim6040/homework2/-/settings/integrations) + +## Collaborate with your team + +- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) +- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) +- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) +- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) +- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) + +## Test and Deploy + +Use the built-in continuous integration in GitLab. + +- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) +- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) +- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) +- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) +- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) + +*** + +# Editing this README + +When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template. + +## Suggestions for a good README +Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. + +## Name +Choose a self-explaining name for your project. + +## Description +Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. + +## Badges +On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. + +## Visuals +Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. + +## Installation +Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. + +## Usage +Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. + +## Support +Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. + +## Roadmap +If you have ideas for releases in the future, it is a good idea to list them in the README. + +## Contributing +State if you are open to contributions and what your requirements are for accepting them. + +For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. + +You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. + +## Authors and acknowledgment +Show your appreciation to those who have contributed to the project. + +## License +For open source projects, say how it is licensed. + +## Project status +If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. From c2e0a726dfd8e38cff1a0707535bd6e627bca559 Mon Sep 17 00:00:00 2001 From: Irving Date: Mon, 2 Oct 2023 11:49:39 +0900 Subject: [PATCH 02/31] Commit test --- README.md | 93 +------------------------------------------------------ 1 file changed, 1 insertion(+), 92 deletions(-) diff --git a/README.md b/README.md index ee7f2fc..29677b1 100644 --- a/README.md +++ b/README.md @@ -1,92 +1 @@ -# homework2 - - - -## Getting started - -To make it easy for you to get started with GitLab, here's a list of recommended next steps. - -Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! - -## Add your files - -- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files -- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: - -``` -cd existing_repo -git remote add origin https://csed332.postech.ac.kr/khkim6040/homework2.git -git branch -M main -git push -uf origin main -``` - -## Integrate with your tools - -- [ ] [Set up project integrations](https://csed332.postech.ac.kr/khkim6040/homework2/-/settings/integrations) - -## Collaborate with your team - -- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) -- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) -- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) -- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) -- [ ] [Set auto-merge](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) - -## Test and Deploy - -Use the built-in continuous integration in GitLab. - -- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) -- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) -- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) -- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) -- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) - -*** - -# Editing this README - -When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template. - -## Suggestions for a good README -Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. - -## Name -Choose a self-explaining name for your project. - -## Description -Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. - -## Badges -On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. - -## Visuals -Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. - -## Installation -Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. - -## Usage -Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. - -## Support -Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. - -## Roadmap -If you have ideas for releases in the future, it is a good idea to list them in the README. - -## Contributing -State if you are open to contributions and what your requirements are for accepting them. - -For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. - -You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. - -## Authors and acknowledgment -Show your appreciation to those who have contributed to the project. - -## License -For open source projects, say how it is licensed. - -## Project status -If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. +## homework2 \ No newline at end of file From ce2aebb66a12e476982cdaed451e56d9b9dea72b Mon Sep 17 00:00:00 2001 From: Gwanho Date: Mon, 2 Oct 2023 13:29:21 +0900 Subject: [PATCH 03/31] Feat: Initial homework2 upload --- .gitignore | 0 README.md | 1 - homework2.pdf | Bin 0 -> 342342 bytes hw2-problem1/.gitignore | 42 ++++ hw2-problem1/build.gradle.kts | 37 +++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + hw2-problem1/gradlew | 234 ++++++++++++++++++ hw2-problem1/gradlew.bat | 89 +++++++ hw2-problem1/settings.gradle.kts | 2 + hw2-problem1/src/main/antlr/BooleanExp.g4 | 27 ++ .../csed332/homework2/Conjunction.java | 36 +++ .../postech/csed332/homework2/Constant.java | 33 +++ .../csed332/homework2/Disjunction.java | 36 +++ .../edu/postech/csed332/homework2/Exp.java | 49 ++++ .../postech/csed332/homework2/ExpParser.java | 76 ++++++ .../postech/csed332/homework2/Negation.java | 33 +++ .../postech/csed332/homework2/Variable.java | 42 ++++ .../postech/csed332/homework2/ExpTest.java | 29 +++ hw2-problem2.md | 222 +++++++++++++++++ hw2-problem2/.gitignore | 42 ++++ hw2-problem2/build.gradle.kts | 32 +++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 60756 bytes .../gradle/wrapper/gradle-wrapper.properties | 6 + hw2-problem2/gradlew | 234 ++++++++++++++++++ hw2-problem2/gradlew.bat | 89 +++++++ hw2-problem2/settings.gradle.kts | 2 + .../csed332/homework2/AdjacencyListGraph.java | 93 +++++++ .../csed332/homework2/DelegateTree.java | 137 ++++++++++ .../edu/postech/csed332/homework2/Edge.java | 25 ++ .../edu/postech/csed332/homework2/Graph.java | 104 ++++++++ .../csed332/homework2/MutableGraph.java | 58 +++++ .../csed332/homework2/MutableTree.java | 67 +++++ .../csed332/homework2/ParentPointerTree.java | 133 ++++++++++ .../edu/postech/csed332/homework2/Tree.java | 77 ++++++ .../homework2/AbstractMutableGraphTest.java | 58 +++++ .../homework2/AbstractMutableTreeTest.java | 40 +++ .../DoubleParentPointerMutableTreeTest.java | 27 ++ .../IntegerDelegateMutableTreeTest.java | 28 +++ .../StringAdjacencyMutableGraphTest.java | 27 ++ 40 files changed, 2272 insertions(+), 1 deletion(-) create mode 100644 .gitignore delete mode 100644 README.md create mode 100644 homework2.pdf create mode 100644 hw2-problem1/.gitignore create mode 100644 hw2-problem1/build.gradle.kts create mode 100644 hw2-problem1/gradle/wrapper/gradle-wrapper.jar create mode 100644 hw2-problem1/gradle/wrapper/gradle-wrapper.properties create mode 100644 hw2-problem1/gradlew create mode 100644 hw2-problem1/gradlew.bat create mode 100644 hw2-problem1/settings.gradle.kts create mode 100644 hw2-problem1/src/main/antlr/BooleanExp.g4 create mode 100644 hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java create mode 100644 hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java create mode 100644 hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java create mode 100644 hw2-problem1/src/main/java/edu/postech/csed332/homework2/Exp.java create mode 100644 hw2-problem1/src/main/java/edu/postech/csed332/homework2/ExpParser.java create mode 100644 hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java create mode 100644 hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java create mode 100644 hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java create mode 100644 hw2-problem2.md create mode 100644 hw2-problem2/.gitignore create mode 100644 hw2-problem2/build.gradle.kts create mode 100644 hw2-problem2/gradle/wrapper/gradle-wrapper.jar create mode 100644 hw2-problem2/gradle/wrapper/gradle-wrapper.properties create mode 100644 hw2-problem2/gradlew create mode 100644 hw2-problem2/gradlew.bat create mode 100644 hw2-problem2/settings.gradle.kts create mode 100644 hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java create mode 100644 hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java create mode 100644 hw2-problem2/src/main/java/edu/postech/csed332/homework2/Edge.java create mode 100644 hw2-problem2/src/main/java/edu/postech/csed332/homework2/Graph.java create mode 100644 hw2-problem2/src/main/java/edu/postech/csed332/homework2/MutableGraph.java create mode 100644 hw2-problem2/src/main/java/edu/postech/csed332/homework2/MutableTree.java create mode 100644 hw2-problem2/src/main/java/edu/postech/csed332/homework2/ParentPointerTree.java create mode 100644 hw2-problem2/src/main/java/edu/postech/csed332/homework2/Tree.java create mode 100644 hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java create mode 100644 hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java create mode 100644 hw2-problem2/src/test/java/edu/postech/csed332/homework2/DoubleParentPointerMutableTreeTest.java create mode 100644 hw2-problem2/src/test/java/edu/postech/csed332/homework2/IntegerDelegateMutableTreeTest.java create mode 100644 hw2-problem2/src/test/java/edu/postech/csed332/homework2/StringAdjacencyMutableGraphTest.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md deleted file mode 100644 index 29677b1..0000000 --- a/README.md +++ /dev/null @@ -1 +0,0 @@ -## homework2 \ No newline at end of file diff --git a/homework2.pdf b/homework2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..6d3be786cdc0cd9cd4fdd25491cf3317165dcf0a GIT binary patch literal 342342 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�F-!2w7l}a*MG7;C+k+Y1EeY$x3p6A^p(#mcz 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

b(VO^R`HlZ;6O#3a!f-I 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

FP||_u;#OvTw>EHDG&|6}^MG9%Ottb46FK?q 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� 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

K`Vo$MGQ^EA7j)Gov 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 I3gU481C0F*2><{9 literal 0 HcmV?d00001 diff --git a/hw2-problem1/.gitignore b/hw2-problem1/.gitignore new file mode 100644 index 0000000..b63da45 --- /dev/null +++ b/hw2-problem1/.gitignore @@ -0,0 +1,42 @@ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/hw2-problem1/build.gradle.kts b/hw2-problem1/build.gradle.kts new file mode 100644 index 0000000..6776839 --- /dev/null +++ b/hw2-problem1/build.gradle.kts @@ -0,0 +1,37 @@ +plugins { + java + jacoco + antlr +} + +group = "edu.postech.csed332" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} + +jacoco { + toolVersion = "0.8.9" +} + +dependencies { + testImplementation(platform("org.junit:junit-bom:5.9.1")) + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") + //TODO: add an extra dependency for ANTLR4 (version 4.13.1) +} + +tasks.test { + useJUnitPlatform() +} + +tasks.jacocoTestReport { + reports { + csv.required.set(true) + } +} + +tasks.generateGrammarSource { + //TODO: pass the argument -visitor to this task. +} diff --git a/hw2-problem1/gradle/wrapper/gradle-wrapper.jar b/hw2-problem1/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/hw2-problem1/gradlew.bat b/hw2-problem1/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/hw2-problem1/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/hw2-problem1/settings.gradle.kts b/hw2-problem1/settings.gradle.kts new file mode 100644 index 0000000..1cba9e5 --- /dev/null +++ b/hw2-problem1/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "hw2-problem1" + diff --git a/hw2-problem1/src/main/antlr/BooleanExp.g4 b/hw2-problem1/src/main/antlr/BooleanExp.g4 new file mode 100644 index 0000000..e08317e --- /dev/null +++ b/hw2-problem1/src/main/antlr/BooleanExp.g4 @@ -0,0 +1,27 @@ +grammar BooleanExp; + +@header { +package edu.postech.csed332.homework2.parser; +} + +NOT : '!' ; +AND : '&&' ; +OR : '||' ; + +TRUE : 'true' ; +FALSE : 'false' ; + +LPAREN : '(' ; +RPAREN : ')' ; + +ID : 'p'[1-9][0-9]* ; +WS : [ \r\t\u000C\n]+ -> skip ; + +expression + : op=NOT sub=expression # unaryExp + | left=expression op=AND right=expression # binaryExp + | left=expression op=OR right=expression # binaryExp + | LPAREN sub=expression RPAREN # parenExp + | name=ID # variable + | value=(TRUE|FALSE) # constant + ; \ No newline at end of file diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java new file mode 100644 index 0000000..02de1c7 --- /dev/null +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java @@ -0,0 +1,36 @@ +package edu.postech.csed332.homework2; + +import java.util.Arrays; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * A Boolean expression whose top-level operator is && (and). + */ +public record Conjunction(Exp... subExps) implements Exp { + + @Override + public Set getVariables() { + // TODO: implement this + return null; + } + + @Override + public Boolean evaluate(Map assignment) { + // TODO: implement this + return null; + } + + @Override + public Exp simplify() { + // TODO: implement this + return null; + } + + @Override + public String toPrettyString() { + return "(" + Arrays.stream(subExps()).map(Exp::toPrettyString) + .collect(Collectors.joining(" && ")) + ")"; + } +} \ No newline at end of file diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java new file mode 100644 index 0000000..3e3483f --- /dev/null +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java @@ -0,0 +1,33 @@ +package edu.postech.csed332.homework2; + +import java.util.Map; +import java.util.Set; + +/** + * A Boolean constant, either true or false. + */ +public record Constant(boolean value) implements Exp { + + @Override + public Set getVariables() { + // TODO: implement this + return null; + } + + @Override + public Boolean evaluate(Map assignment) { + // TODO: implement this + return null; + } + + @Override + public Exp simplify() { + // TODO: implement this + return null; + } + + @Override + public String toPrettyString() { + return Boolean.toString(value()); + } +} \ No newline at end of file diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java new file mode 100644 index 0000000..9e52bf2 --- /dev/null +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java @@ -0,0 +1,36 @@ +package edu.postech.csed332.homework2; + +import java.util.Arrays; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * A Boolean expression whose top-level operator is || (or). + */ +public record Disjunction(Exp... subExps) implements Exp { + + @Override + public Set getVariables() { + // TODO: implement this + return null; + } + + @Override + public Boolean evaluate(Map assignment) { + // TODO: implement this + return null; + } + + @Override + public Exp simplify() { + // TODO: implement this + return null; + } + + @Override + public String toPrettyString() { + return "(" + Arrays.stream(subExps()).map(Exp::toPrettyString) + .collect(Collectors.joining(" || ")) + ")"; + } +} \ No newline at end of file diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Exp.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Exp.java new file mode 100644 index 0000000..0ced233 --- /dev/null +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Exp.java @@ -0,0 +1,49 @@ +package edu.postech.csed332.homework2; + +import java.util.Map; +import java.util.Set; + +/** + * A Boolean expression. + */ +public interface Exp { + /** + * Returns the set of all variables in this Boolean expression. + * For example, if the formula is "(p1 || p2) && (p2 || ! p3)", + * this method returns the set {1, 2, 3}. + * + * @return the set of variables in this expression + */ + Set getVariables(); + + /** + * Evaluates the truth value of this Boolean expression, given + * a truth assignment. A truth assignment is a map from variable + * identifiers to Boolean values. For example, suppose that the + * formula is "(p1 || p2) && (p2 || ! p3)". This method returns + * true, given {1 |-> true, 2 |-> false, 3 |-> false}. + * + * @param assignment a truth assignment + * @return true or false + */ + Boolean evaluate(Map assignment); + + /** + * Returns a new expression that is obtained by simplifying this + * expression according to the logical equivalence laws, given + * in the homework instruction. For example, if the formula is + * "(p1 || true) && ! (p2 && ! p3)", this function returns the + * new expression "p1 && (! p2 || p3)". + * Note: the object itself should not change by this method. + * + * @return a new simplified expression + */ + Exp simplify(); + + /** + * Returns a string representation of this expression. + * + * @return a string representation + */ + String toPrettyString(); +} \ No newline at end of file diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/ExpParser.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/ExpParser.java new file mode 100644 index 0000000..e633fc6 --- /dev/null +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/ExpParser.java @@ -0,0 +1,76 @@ +package edu.postech.csed332.homework2; + +import edu.postech.csed332.homework2.parser.BooleanExpBaseVisitor; +import edu.postech.csed332.homework2.parser.BooleanExpLexer; +import edu.postech.csed332.homework2.parser.BooleanExpParser; +import org.antlr.v4.runtime.*; + +/** + * A parser for boolean expressions. The syntax is as follows: + *

+ * Exp ::= true | false | variable | ! Exp | ( Exp ) | Exp && Exp | Exp || Exp + *

+ * where variable has the form pN with positive identifier N, e.g., p1, p2, p3, ... + */ +public class ExpParser { + /** + * Parse a string and create its Exp data structure. + * + * @param str string to be parsed + * @return an Exp instance + * @throws IllegalStateException if the string cannot be parsed as Exp + */ + public static Exp parse(String str) throws IllegalStateException { + + var lexer = new BooleanExpLexer(CharStreams.fromString(str)); + var parser = getBooleanExpParser(lexer); + + return new BooleanExpBaseVisitor() { + @Override + public Exp visitParenExp(BooleanExpParser.ParenExpContext ctx) { + return visit(ctx.sub); + } + + @Override + public Exp visitUnaryExp(BooleanExpParser.UnaryExpContext ctx) { + return new Negation(visit(ctx.sub)); + } + + @Override + public Exp visitBinaryExp(BooleanExpParser.BinaryExpContext ctx) { + return switch (ctx.op.getType()) { + case BooleanExpLexer.AND -> new Conjunction(visit(ctx.left), visit(ctx.right)); + case BooleanExpLexer.OR -> new Disjunction(visit(ctx.left), visit(ctx.right)); + default -> throw new UnsupportedOperationException(); + }; + } + + @Override + public Exp visitConstant(BooleanExpParser.ConstantContext ctx) { + return new Constant(Boolean.parseBoolean(ctx.value.getText())); + } + + @Override + public Exp visitVariable(BooleanExpParser.VariableContext ctx) { + return new Variable(Integer.parseUnsignedInt(ctx.name.getText().substring(1))); + } + }.visit(parser.expression()); + } + + private static BooleanExpParser getBooleanExpParser(BooleanExpLexer lexer) { + var parser = new BooleanExpParser(new CommonTokenStream(lexer)); + + parser.addErrorListener(new BaseErrorListener() { + @Override + public void syntaxError(Recognizer recognizer, + Object offendingSymbol, + int line, + int charPositionInLine, + String msg, + RecognitionException e) { + throw new IllegalStateException("Failed to parse at line " + line + " (" + msg + ")", e); + } + }); + return parser; + } +} diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java new file mode 100644 index 0000000..2c62d8b --- /dev/null +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java @@ -0,0 +1,33 @@ +package edu.postech.csed332.homework2; + +import java.util.Map; +import java.util.Set; + +/** + * A Boolean expression whose top-level operator is ! (not). + */ +public record Negation(Exp subExp) implements Exp { + + @Override + public Set getVariables() { + // TODO: implement this + return null; + } + + @Override + public Boolean evaluate(Map assignment) { + // TODO: implement this + return null; + } + + @Override + public Exp simplify() { + // TODO: implement this + return null; + } + + @Override + public String toPrettyString() { + return "(! " + subExp().toPrettyString() + ")"; + } +} diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java new file mode 100644 index 0000000..3db964a --- /dev/null +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java @@ -0,0 +1,42 @@ +package edu.postech.csed332.homework2; + +import java.util.Map; +import java.util.Set; + +/** + * A Boolean variable, identified by positive integers + */ +public record Variable(int identifier) implements Exp { + /** + * The identifier of this variable must be a positive integer. + * + * @param identifier a positive integer + */ + public Variable { + if (identifier <= 0) + throw new IllegalArgumentException("Variable Id must be a positive integer"); + } + + @Override + public Set getVariables() { + // TODO: implement this + return null; + } + + @Override + public Boolean evaluate(Map assignment) { + // TODO: implement this + return null; + } + + @Override + public Exp simplify() { + // TODO: implement this + return null; + } + + @Override + public String toPrettyString() { + return "p" + identifier(); + } +} \ No newline at end of file diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java new file mode 100644 index 0000000..6c8d547 --- /dev/null +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -0,0 +1,29 @@ +package edu.postech.csed332.homework2; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +public class ExpTest { + + @Test + void testParserOK() { + String expStr = "((p1 || (p2 && (! p3))) || true)"; + Exp exp = ExpParser.parse(expStr); + assertEquals(expStr, exp.toPrettyString()); + } + + @Test + void testParserError() { + assertThrows(IllegalStateException.class, () -> { + Exp exp = ExpParser.parse("p1 || p2 && ! p0 || true"); + }); + } + + /* + * TODO: add test methods to achieve at least 80% branch coverage of the classes: + * Conjunction, Constant, Disjunction, Negation, Variable. + * Each test method should have appropriate JUnit assertions to test a single behavior. + * You should not add arbitrary code to test methods to just increase coverage. + */ +} diff --git a/hw2-problem2.md b/hw2-problem2.md new file mode 100644 index 0000000..64bcca9 --- /dev/null +++ b/hw2-problem2.md @@ -0,0 +1,222 @@ +# Problem 2-1 + + +Let $`\mathcal{N}`$ be the set of all elements of type $`\textsf{N}`$, and $`\mathsf{null} \notin \mathcal{N}`$ be an distinguished element to represent `null`. Write formal abstract specifications of the interfaces below with respect to following abstract values: + +- A graph is a pair $`G = (V, E)`$, where $`V \subseteq \mathcal{N}`$ and $`E \subseteq V \times V`$. +- A tree is a triple $`T = (V, E, \hat{v})`$, where $`(V, E)`$ is a graph and $`\hat{v} \in \mathcal{N}`$ denotes the root. + +Other data types, such as `boolean`, `int`, `Set`, etc. have conventional abstract values, e.g., Boolean values, integers, and subsets of $`\mathcal{N}`$, etc. + + +## `Graph` + +Let $`G_{this} = (V_{this}, E_{this})`$ be an abstract value of the current graph object. + +##### Class invariant + +```math +\forall (v, w) \in E_{this}.\ v, w \in V_{this} \land (w, v) \in E_{this} +``` + +##### containsVertex + +```java +boolean containsVertex(N vertex); +``` + +- requires: vertex is in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: + + returns true if vertex is in $`V_{this}`$; and + - returns false, otherwise. + +##### containsEdge + +```java +boolean containsEdge(N source, N target); +``` + +- requires: +- ensures: + +##### getNeighborhood + +```java +Set getNeighborhood(N vertex); +``` + +- requires: +- ensures: + + +## `Tree` + +Let $`T_{this} = (V_{this}, E_{this}, \hat{v}_{this})`$ be an abstract value of the current graph object. + +##### Class invariant + + + +##### getDepth + +```java +int getDepth(N vertex); +``` + +- requires: + + vertex is in $`\mathcal{N}`$ and not $`\mathsf{null}`$. +- ensures: + + returns 0 if vertex is getRoot(); and + + returns getDepth(getParent(vertex)) + 1, otherwise. + +##### getHeight + +```java +int getHeight(); +``` + +- requires: +- ensures: + +##### getChildren + +```java +Set getChildren(N vertex); +``` + +- requires: +- ensures: + +##### getParent + +```java +Optional getParent(N vertex); +``` + +- requires: +- ensures: + + +## `MutableGraph` + +Let $`G_{this} = (V_{this}, E_{this})`$ be an abstract value of the current graph object, +and $`G_{next} = (V_{next}, E_{next})`$ be an abstract value of the graph object _modified by_ the method call. + +##### Class invariant + +```math +\forall (v, w) \in E_{this}.\ v, w \in V_{this} \land (w, v) \in E_{this} +``` + +##### addVertex + +```java +boolean addVertex(N vertex); +``` + +- requires: vertex is in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: + + $`V_{next} = V_{this} \cup \{\texttt{vertex}\}`$; + + $`E_{next} = E_{this}`$ (the edges are not modified) + + If $`G_{this}`$ satisfies the class invariant, $`G_{next}`$ also satisfies the class invariant; and + + returns true if and only if $`\texttt{vertex} \notin V_{this}`$. + +##### removeVertex + +```java +boolean removeVertex(N vertex); +``` + +- requires: +- ensures: + +##### addEdge + +```java +boolean addEdge(N source, N target); +``` + +- requires: +- ensures: + +##### removeEdge + +```java +boolean removeEdge(N source, N target); +``` + +- requires: +- ensures: + + +## `MutableTree` + +Let $`T_{this} = (V_{this}, E_{this}, \hat{v}_{this})`$ be an abstract value of the current tree object, +and $`T_{next} = (V_{next}, E_{next}, \hat{v}_{next})`$ be an abstract value of the tree object _modified by_ the method call. + +##### Class invariant + + + +##### addVertex + +```java +boolean addVertex(N vertex); +``` + +- requires: +- ensures: + +##### removeVertex + +```java +boolean removeVertex(N vertex); +``` + +- requires: +- ensures: + +##### addEdge + +```java +boolean addEdge(N source, N target); +``` + +- requires: +- ensures: + +##### removeEdge + +```java +boolean removeEdge(N source, N target); +``` + +- requires: +- ensures: + + +# Problem 2-2 + +Identify whether the abstract interfaces satisfy the Liskov substitution principle. +For each question, explain your reasoning _using the abstract specifications that you have defined in Problem 1_. + + +##### `Tree` and `Graph` + +* Is `Tree` a subtype of `Graph`? + + +##### `MutableGraph` and `Graph` + +* Is `MutableGraph` a subtype of `Graph`? + + +##### `MutableTree` and `Tree` + +* Is `MutableTree` a subtype of `Tree`? + + +##### `MutableTree` and `MutableGraph` + +* Is `MutableTree` a subtype of `MutableGraph`? + diff --git a/hw2-problem2/.gitignore b/hw2-problem2/.gitignore new file mode 100644 index 0000000..b63da45 --- /dev/null +++ b/hw2-problem2/.gitignore @@ -0,0 +1,42 @@ +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### IntelliJ IDEA ### +.idea/modules.xml +.idea/jarRepositories.xml +.idea/compiler.xml +.idea/libraries/ +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### Eclipse ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +### Mac OS ### +.DS_Store \ No newline at end of file diff --git a/hw2-problem2/build.gradle.kts b/hw2-problem2/build.gradle.kts new file mode 100644 index 0000000..ecb9693 --- /dev/null +++ b/hw2-problem2/build.gradle.kts @@ -0,0 +1,32 @@ +plugins { + java + jacoco +} + +group = "edu.postech.csed332" +version = "1.0-SNAPSHOT" + +repositories { + mavenCentral() +} + +jacoco { + toolVersion = "0.8.9" +} + +dependencies { + implementation("org.jetbrains:annotations:24.0.0") + testImplementation(platform("org.junit:junit-bom:5.9.1")) + testImplementation("org.junit.jupiter:junit-jupiter") + testRuntimeOnly("org.junit.platform:junit-platform-launcher") +} + +tasks.test { + useJUnitPlatform() +} + +tasks.jacocoTestReport { + reports { + csv.required.set(true) + } +} diff --git a/hw2-problem2/gradle/wrapper/gradle-wrapper.jar b/hw2-problem2/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..249e5832f090a2944b7473328c07c9755baa3196 GIT binary patch literal 60756 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 '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/hw2-problem2/gradlew.bat b/hw2-problem2/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/hw2-problem2/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/hw2-problem2/settings.gradle.kts b/hw2-problem2/settings.gradle.kts new file mode 100644 index 0000000..d5e8099 --- /dev/null +++ b/hw2-problem2/settings.gradle.kts @@ -0,0 +1,2 @@ +rootProject.name = "hw2-problem2" + diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java new file mode 100644 index 0000000..ac6525a --- /dev/null +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java @@ -0,0 +1,93 @@ +package edu.postech.csed332.homework2; + +import org.jetbrains.annotations.NotNull; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * An implementation of Graph with an adjacency list representation. + * NOTE: you should NOT add more member variables to this class. + * + * @param type of vertices, which must be immutable and comparable + */ +public class AdjacencyListGraph> implements MutableGraph { + + /** + * A map from vertices to the sets of their adjacent vertices. For example, a graph + * with vertices {v1, v2, v3, v4} and edges {(v1,v2), (v1,v3), (v2,v1), (v3,v1)} is + * represented by the map {v1 |-> {v2, v3}, v2 |-> {v1}, v3 |-> {v1}, v4 |-> {}}. + */ + private final @NotNull SortedMap> adjMap; + + /** + * Creates an empty graph + */ + public AdjacencyListGraph() { + adjMap = new TreeMap<>(); + } + + @Override + public boolean containsVertex(@NotNull N vertex) { + // TODO: implement this + return false; + } + + @Override + public boolean addVertex(@NotNull N vertex) { + // TODO: implement this + return false; + } + + @Override + public boolean removeVertex(@NotNull N vertex) { + // TODO: implement this + return false; + } + + @Override + public boolean containsEdge(@NotNull N source, @NotNull N target) { + // TODO: implement this + return false; + } + + @Override + public boolean addEdge(@NotNull N source, @NotNull N target) { + // TODO: implement this + return false; + } + + @Override + public boolean removeEdge(@NotNull N source, @NotNull N target) { + // TODO: implement this + return false; + } + + @Override + public @NotNull Set getNeighborhood(@NotNull N vertex) { + // TODO: implement this + return Set.of(); + } + + @Override + public @NotNull Set getVertices() { + return Collections.unmodifiableSet(adjMap.keySet()); + } + + @Override + public @NotNull Set> getEdges() { + return adjMap.entrySet().stream() + .flatMap(entry -> entry.getValue().stream().map(n -> new Edge<>(entry.getKey(), n))) + .collect(Collectors.toUnmodifiableSet()); + } + + /** + * Checks if all class invariants hold for this object. + * + * @return true if the representation of this graph is valid + */ + boolean checkInv() { + // TODO: implement this + return false; + } +} diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java new file mode 100644 index 0000000..71cafb6 --- /dev/null +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java @@ -0,0 +1,137 @@ +package edu.postech.csed332.homework2; + +import org.jetbrains.annotations.NotNull; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * An implementation of Tree that delegates to a given instance of Graph. This class + * is a wrapper of a MutableGraph instance that enforces the Tree invariant. + * NOTE: you should NOT add more member variables to this class. + * + * @param type of vertices, which must be immutable and comparable + */ +public class DelegateTree> implements MutableTree { + + /** + * A root vertex of this tree. + */ + private final @NotNull N root; + + /** + * The underlying graph of this tree + */ + private final @NotNull MutableGraph delegate; + + /** + * A map assigning a depth to each vertex in this tree + */ + private final @NotNull Map depthMap; + + /** + * Creates a tree that delegates to a given graph. + * + * @param emptyGraph an empty graph + * @param vertex the root of the tree + * @throws IllegalArgumentException if {@code emptyGraph} is not empty + */ + public DelegateTree(@NotNull MutableGraph emptyGraph, @NotNull N vertex) { + if (!emptyGraph.getVertices().isEmpty()) + throw new IllegalArgumentException(); + + delegate = emptyGraph; + depthMap = new HashMap<>(); + root = vertex; + + delegate.addVertex(root); + depthMap.put(root, 0); + } + + @Override + public @NotNull N getRoot() { + return root; + } + + @Override + public int getDepth(@NotNull N vertex) { + // TODO: implement this + return 0; + } + + @Override + public int getHeight() { + // TODO: implement this + return 0; + } + + @Override + public @NotNull Set getChildren(@NotNull N vertex) { + // TODO: implement this + return Set.of(); + } + + @Override + public @NotNull Optional getParent(@NotNull N vertex) { + // TODO: implement this + return Optional.empty(); + } + + @Override + public boolean containsVertex(@NotNull N vertex) { + // TODO: implement this + return false; + } + + @Override + public boolean removeVertex(@NotNull N vertex) { + // TODO: implement this + return false; + } + + @Override + public boolean containsEdge(@NotNull N source, @NotNull N target) { + // TODO: implement this + return false; + } + + @Override + public boolean addEdge(@NotNull N source, @NotNull N target) { + // TODO: implement this + return false; + } + + @Override + public boolean removeEdge(@NotNull N source, @NotNull N target) { + // TODO: implement this + return false; + } + + @Override + public @NotNull Set getNeighborhood(@NotNull N vertex) { + // TODO: implement this + return Set.of(); + } + + @Override + public @NotNull Set getVertices() { + // TODO: implement this + return Set.of(); + } + + @Override + public @NotNull Set> getEdges() { + // TODO: implement this + return Set.of(); + } + + /** + * Checks if all class invariants hold for this object + * + * @return true if the representation of this tree is valid + */ + boolean checkInv() { + // TODO: implement this + return false; + } +} diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/Edge.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/Edge.java new file mode 100644 index 0000000..770adda --- /dev/null +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/Edge.java @@ -0,0 +1,25 @@ +package edu.postech.csed332.homework2; + +import org.jetbrains.annotations.NotNull; + +/** + * An edge of a graph, given by a pair of two vertices of type V. Notice that + * an instance of Edge is directed, i.e., Edge[source=v1, target=v2] is different + * from Edge[source=v2, target=v1]. To represent an undirected edge in a graph, + * one needs to create two instances of Edge. + * + * @param type of vertices, which must be immutable and comparable + */ +public record Edge>(@NotNull N source, @NotNull N target) implements Comparable> { + + @Override + public int compareTo(@NotNull Edge o) { + int c1 = this.source.compareTo(o.source); + return c1 != 0 ? c1 : this.target.compareTo(o.target); + } + + @Override + public String toString() { + return "(" + source + "," + target + ")"; + } +} \ No newline at end of file diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/Graph.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/Graph.java new file mode 100644 index 0000000..6e5037a --- /dev/null +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/Graph.java @@ -0,0 +1,104 @@ +package edu.postech.csed332.homework2; + +import org.jetbrains.annotations.NotNull; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * An undirected graph consisting of a set of vertices and edges. Vertices are given by + * any immutable type N. Edges have source and target vertices (that can be identical). + * Edges are undirected, i.e., if (v1,v2) is in E, then (v2,v1) is also in E. Self-loops + * are not allowed, i.e., if v1 = v2, then (v1,v2) is not in E. + * + * @param type of vertices, which must be immutable and comparable + */ +public interface Graph> { + + /** + * Return true if this graph contains a given vertex. For example, consider a graph + * with vertices {v1, v2, v3, v4} and edges {(v1,v2), (v1,v3), (v2,v1), (v3,v1)}. + * Then, containsVertex(v1) = true and containsVertex(v5) = false. + * + * @param vertex a vertex + * @return {@code true} if the graph contains vertex + */ + boolean containsVertex(@NotNull N vertex); + + /** + * Return true if this graph contains an edge from source to target. Consider a graph + * with vertices {v1, v2, v3, v4} and edges {(v1,v2), (v1,v3), (v2,v1), (v3,v1)}. + * Then, containsEdge(v1,v2) = true and containsEdge(v1,v4) = false. + * + * @param source a source vertex + * @param target a target vertex + * @return true if source and target is connected by an edge + */ + boolean containsEdge(@NotNull N source, @NotNull N target); + + /** + * Return the set of adjacent vertices of a given vertex. If the vertex is not in + * the graph, returns the empty set. For example, consider a graph with vertices + * {v1, v2, v3, v4} and edges {(v1,v2), (v1,v3), (v2,v1), (v3,v1)}. Then, + * getAdjacentVertices(v1) = {v2, v3}, getAdjacentVertices(v2) = {v1}, + * getAdjacentVertices(v3) = {v1}, and getAdjacentVertices(v4) = {}. + * + * @param vertex a vertex + * @return the set of adjacent vertices of vertex, immutable + */ + @NotNull Set getNeighborhood(@NotNull N vertex); + + /** + * Returns all the vertices in this graph. The set of vertices is immutable. + * + * @return the set of vertices in the graph, immutable + */ + @NotNull Set getVertices(); + + /** + * Returns all the edges in this graph. The set of edges is immutable. + * + * @return the set of edges in the graph, immutable + */ + @NotNull Set> getEdges(); + + /** + * Returns all the vertices that are reachable from a given vertex in this graph, + * based on a breadth-first search strategy. For example, consider a graph with + * vertices {v1, v2, v3, v4} and edges {(v1,v2), (v1,v3), (v2,v1), (v3,v1)}. Then, + * findReachableVertices(v1) = {v1, v2, v3}, findReachableVertices(v4) = {v4}, + * and findReachableVertices(v5) = {}. + * + * @param vertex a vertex + * @return the set of reachable vertices from {@code vertex}, immutable + */ + default @NotNull Set findReachableVertices(@NotNull N vertex) { + Set seen = new HashSet<>(); + Set frontier = new HashSet<>(); + + if (containsVertex(vertex)) + frontier.add(vertex); + + while (!seen.containsAll(frontier)) { + seen.addAll(frontier); + frontier = frontier.stream() + .flatMap(n -> getNeighborhood(n).stream()) + .filter(n -> !seen.contains(n)) + .collect(Collectors.toSet()); + } + return Collections.unmodifiableSet(seen); + } + + /** + * Provides a human-readable string representation for the abstract value of the graph + * + * @return a string representation + */ + default String toRepr() { + return String.format("[vertex: {%s}, edge: {%s}]", + getVertices().stream().map(N::toString).collect(Collectors.joining(", ")), + getEdges().stream().map(Edge::toString).collect(Collectors.joining(", "))); + } +} diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/MutableGraph.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/MutableGraph.java new file mode 100644 index 0000000..3adbb1d --- /dev/null +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/MutableGraph.java @@ -0,0 +1,58 @@ +package edu.postech.csed332.homework2; + +import org.jetbrains.annotations.NotNull; + +/** + * An undirected graph with operations for adding and removing vertices and edges. Note + * that vertices of MutableGraph are still immutable, but the graph itself is mutable + * by adding or removing vertices and edges. + * + * @param type of vertices, which must be immutable and comparable + */ +public interface MutableGraph> extends Graph { + + /** + * Add a given vertex to this graph, and returns {@code true} if the graph is + * changed. If the graph already contains the vertex, the graph is not changed and + * this method returns {@code false}. + * + * @param vertex a vertex to add + * @return {@code true} if the graph is modified, {@code false} otherwise + */ + boolean addVertex(@NotNull N vertex); + + /** + * Remove a vertex from this graph, together with all edges that involve the vertex, + * and returns {@code true} if the graph is changed. If the graph does not contain the + * vertex, the graph is not changed and this method returns {@code false}. + * + * @param vertex a vertex to remove + * @return {@code true} if the graph is modified, {@code false} otherwise + */ + boolean removeVertex(@NotNull N vertex); + + /** + * Add an (undirected) edge to this graph, and returns {@code true} if the graph is + * changed. If source and/or target vertices are not in the graph, missing vertices + * are added to the graph. Because an edge is undirected, if an edge (v1,v2) is added, + * then the graph should contain both (v1,v2) and (v2,v1). If the graph already contains + * the edge, the graph is not changed and this method returns {@code false}. + * + * @param source a source vertex + * @param target a target vertex + * @return {@code true} if the graph is modified, {@code false} otherwise + */ + boolean addEdge(@NotNull N source, @NotNull N target); + + /** + * Remove an (undirected) edge from this graph, and returns {@code true} if the graph is + * changed. Because an edge is undirected, if an edge (v1,v2) is removed, then the graph + * should not contain both (v1,v2) and (v2,v1) after the removal. If the graph does not + * contain the edge, the graph is not changed and this method returns {@code false}. + * + * @param source a source vertex + * @param target a target vertex + * @return {@code true} if the graph is modified, {@code false} otherwise + */ + boolean removeEdge(@NotNull N source, @NotNull N target); +} diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/MutableTree.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/MutableTree.java new file mode 100644 index 0000000..ac21b65 --- /dev/null +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/MutableTree.java @@ -0,0 +1,67 @@ +package edu.postech.csed332.homework2; + +import org.jetbrains.annotations.NotNull; + +/** + * A tree with operations for adding and removing vertices and edges. Note that this + * interface is exactly the same as MutableGraph, but has different contracts. + * + * @param type of vertices, which must be immutable and comparable + */ +public interface MutableTree> extends Tree, MutableGraph { + + /** + * Add a vertex to the tree, and returns {@code true} if the tree is changed. This + * method always returns {@code false}; otherwise, if a new vertex is added, the tree + * will contain an isolated vertex not reachable from the root. + * + * @param vertex a vertex to add + * @return {@code true} if the tree is modified, {@code false} otherwise + */ + @Override + default boolean addVertex(@NotNull N vertex) { + return false; + } + + /** + * Remove a given vertex, and all vertices that are descendants of the given + * vertex from this tree. This method returns {@code true} if the tree is changed. + * The root of the tree cannot be removed. For example, consider a tree with vertices + * {v1, v2, v3, v4} and edges {(v1,v2), (v1,v3), (v2,v1), (v2,v4), (v3,v1), (v4,v2)}, + * where v1 is the root. Then, if the vertex v2 is removed, then v2, v4, and all edges + * involving v2 or v4 are removed. + * + * @param vertex a vertex to remove + * @return {@code true} if the tree is modified, {@code false} otherwise + * @throws IllegalArgumentException if the vertex is the root of the tree + */ + @Override + boolean removeVertex(@NotNull N vertex); + + /** + * Add an edge from source to target to the tree, and returns {@code true} if the + * tree is changed, provided source is already in the tree and target is not in the + * tree. Otherwise, the tree is not changed. Because a tree is an undirected graph, + * if an edge (v1,v2) is added, then the tree should contain both (v1,v2) and (v2,v1). + * + * @param source a parent vertex + * @param target a child vertex + * @return {@code true} if the graph is modified, {@code false} otherwise + */ + @Override + boolean addEdge(@NotNull N source, @NotNull N target); + + /** + * Remove an (undirected) edge from this graph, causing the child vertex and all its + * descendants to be removed. This method returns {@code true} if the tree is changed. + * For example, consider a tree with vertices {v1, v2, v3, v4} and edges {(v1,v2), + * (v1,v3), (v2,v1), (v2,v4), (v3,v1), (v4,v2)}, where v1 is the root. Then, if the + * edge (v1,v2) is removed, v2, v4, and all edges involving v2 or v4 are removed. + * + * @param source a parent vertex + * @param target a child vertex + * @return {@code true} if the graph is modified, {@code false} otherwise + */ + @Override + boolean removeEdge(@NotNull N source, @NotNull N target); +} diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/ParentPointerTree.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/ParentPointerTree.java new file mode 100644 index 0000000..39e778c --- /dev/null +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/ParentPointerTree.java @@ -0,0 +1,133 @@ +package edu.postech.csed332.homework2; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.Optional; +import java.util.Set; +import java.util.SortedMap; +import java.util.TreeMap; + +/** + * An implementation of Tree, where each vertex has a reference to its parent node but + * no references to its children. + * + * @param type of vertices, which must be immutable and comparable + */ +public class ParentPointerTree> implements MutableTree { + + private record Node(@Nullable V parent, int depth) { + } + + /** + * A root vertex of this tree. + */ + private final @NotNull N root; + + /** + * A map assigning to each vertex a pair of a parent reference and a depth. The parent + * of the root is {@code null}. For example, a tree with vertices {v1, v2, v3, v4} edges + * {(v1,v2), (v1,v3), (v2,v1), (v2,v4), (v3,v1), (v4,v2)}, where v1 is the root, is + * represented by the map {v1 |-> (null,0), v2 |-> (v1,1), v3 |-> (v1,1), v4 |-> (v2,2)}. + */ + private final @NotNull SortedMap> nodeMap; + + /** + * Create a parent pointer tree with a given root vertex. + * + * @param vertex the root of the tree + */ + public ParentPointerTree(@NotNull N vertex) { + root = vertex; + nodeMap = new TreeMap<>(); + nodeMap.put(root, new Node<>(null, 0)); + } + + @Override + public @NotNull N getRoot() { + return root; + } + + @Override + public int getDepth(@NotNull N vertex) { + // TODO: implement this + return 0; + } + + @Override + public int getHeight() { + // TODO: implement this + return 0; + } + + @Override + public @NotNull Set getChildren(@NotNull N vertex) { + // TODO: implement this + return Set.of(); + } + + @Override + public @NotNull Optional getParent(@NotNull N vertex) { + // TODO: implement this + return Optional.empty(); + } + + @Override + public boolean containsVertex(@NotNull N vertex) { + // TODO: implement this + return false; + } + + @Override + public boolean removeVertex(@NotNull N vertex) { + // TODO: implement this + return false; + } + + @Override + public boolean containsEdge(@NotNull N source, @NotNull N target) { + // TODO: implement this + return false; + } + + @Override + public boolean addEdge(@NotNull N source, @NotNull N target) { + // TODO: implement this + return false; + } + + @Override + public boolean removeEdge(@NotNull N source, @NotNull N target) { + // TODO: implement this + return false; + } + + @Override + public @NotNull Set getNeighborhood(@NotNull N vertex) { + // TODO: implement this + return Set.of(); + } + + @Override + public @NotNull Set getVertices() { + // TODO: implement this + return Set.of(); + } + + @Override + public @NotNull Set> getEdges() { + // TODO: implement this + return Set.of(); + } + + /** + * Checks if all class invariants hold for this object + * + * @return true if the representation of this tree is valid + */ + boolean checkInv() { + // TODO: implement this + return false; + } + +} diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/Tree.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/Tree.java new file mode 100644 index 0000000..ed90534 --- /dev/null +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/Tree.java @@ -0,0 +1,77 @@ +package edu.postech.csed332.homework2; + +import org.jetbrains.annotations.NotNull; + +import java.util.Optional; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * A tree, specified as a subclass of Graph. A tree has a single root vertex, and there + * exists exactly one path from the root to any other vertex in the tree. This invariant + * is maintained by restricting the operations for adding and removing vertices and edges. + * + * @param type of vertices, which must be immutable and comparable + */ +public interface Tree> extends Graph { + + /** + * Returns the root of this tree. The root is the unique vertex with no parent. + * + * @return the root + */ + @NotNull N getRoot(); + + /** + * Return the distance of vertex from the root of this tree. For example, the root + * has depth 0, and a child of the root has depth 1. + * + * @param vertex a vertex + * @return the depth of vertex + * @throws IllegalArgumentException if vertex is not in the graph + */ + int getDepth(@NotNull N vertex); + + /** + * Returns the maximum depth in this tree. The maximum depth is the maximum of the + * depths of all vertices in this tree. + * + * @return the maximum depth in this tree + */ + int getHeight(); + + /** + * Returns the children of a vertex in this tree. For example, consider a tree with + * vertices {v1, v2, v3, v4} and edges {(v1,v2), (v1,v3), (v2,v1), (v2,v4), (v3,v1), + * (v4,v2)}, where v1 is the root. Then, the children of v1 are {v2, v3}, the children + * of v2 are {v4}, and the children of v3 and v4 are empty sets. + * + * @param vertex a vertex + * @return the set of children of vertex in the tree + */ + @NotNull Set getChildren(@NotNull N vertex); + + /** + * Returns the parent of a vertex in this tree. For example, consider a tree with + * vertices {v1, v2, v3, v4} and edges {(v1,v2), (v1,v3), (v2,v1), (v2,v4), (v3,v1), + * (v4,v2)}, where v1 is the root. Then, the parent of v1 is {@code Optional.empty()}, + * the parent of v2 is v1, and the parents of v3 and v4 are v1 and v2, respectively. + * + * @param vertex a vertex + * @return the parent of vertex, or {@code Optional.empty()} if vertex is the root + */ + @NotNull Optional getParent(@NotNull N vertex); + + /** + * Provides a human-readable string representation for the abstract value of the tree + * + * @return a string representation + */ + @Override + default String toRepr() { + return String.format("[root: %s, vertex: {%s}, edge: {%s}]", + getRoot(), + getVertices().stream().map(N::toString).collect(Collectors.joining(", ")), + getEdges().stream().map(Edge::toString).collect(Collectors.joining(", "))); + } +} diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java new file mode 100644 index 0000000..4d8eebe --- /dev/null +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java @@ -0,0 +1,58 @@ +package edu.postech.csed332.homework2; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import java.util.Set; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * An abstract test class for MutableGraph with blackbox test methods + * + * @param type of vertices + * @param type of Graph + */ +@Disabled +public abstract class AbstractMutableGraphTest, G extends MutableGraph> { + + G graph; + V v1, v2, v3, v4, v5, v6, v7, v8; + + abstract boolean checkInv(); // call checkInv of graph + + @Test + void testAddVertex() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.containsVertex(v1)); + assertTrue(checkInv()); + } + + @Test + void testAddDuplicateVertices() { + assertTrue(graph.addVertex(v6)); + assertTrue(graph.addVertex(v7)); + assertFalse(graph.addVertex(v6)); + assertTrue(graph.containsVertex(v6)); + assertTrue(graph.containsVertex(v7)); + assertTrue(checkInv()); + } + + @Test + void testFindReachableVertices() { + graph.addEdge(v1, v2); + graph.addEdge(v1, v3); + graph.addVertex(v4); + + assertEquals(Set.of(v1, v2, v3), graph.findReachableVertices(v1)); + assertEquals(Set.of(v1, v2, v3), graph.findReachableVertices(v2)); + assertEquals(Set.of(v1, v2, v3), graph.findReachableVertices(v3)); + assertEquals(Set.of(v4), graph.findReachableVertices(v4)); + assertTrue(graph.findReachableVertices(v5).isEmpty()); + assertTrue(checkInv()); + } + + // TODO: write black-box test cases for each method of MutableGraph with respect to + // the specification, including the methods of Graph that MutableGraph extends. + +} diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java new file mode 100644 index 0000000..32e1fda --- /dev/null +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java @@ -0,0 +1,40 @@ +package edu.postech.csed332.homework2; + +import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +/** + * An abstract test class for MutableTree with blackbox test methods + * + * @param type of vertices + * @param type of Tree + */ +@Disabled +public abstract class AbstractMutableTreeTest, T extends MutableTree> { + + T tree; + V v1, v2, v3, v4, v5, v6, v7, v8; // vertices which are not a root of tree + + abstract boolean checkInv(); // call checkInv of tree + + @Test + void testGetDepthRoot() { + assertEquals(tree.getDepth(tree.getRoot()), 0); + } + + @Test + void testGetDepthTwo() { + tree.addEdge(tree.getRoot(), v1); + assertEquals(tree.getDepth(v1), 1); + } + + @Test + void testGetDepthNoVertex() { + assertThrows(IllegalArgumentException.class, () -> tree.getDepth(v1)); + } + + // TODO: write black-box test cases for each method of MutableTree with respect to + // the specification, including the methods of Tree that MutableTree extends. +} diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/DoubleParentPointerMutableTreeTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/DoubleParentPointerMutableTreeTest.java new file mode 100644 index 0000000..f13b375 --- /dev/null +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/DoubleParentPointerMutableTreeTest.java @@ -0,0 +1,27 @@ +package edu.postech.csed332.homework2; + +import org.junit.jupiter.api.BeforeEach; + +public class DoubleParentPointerMutableTreeTest extends AbstractMutableTreeTest> { + + @BeforeEach + void setUp() { + tree = new ParentPointerTree<>(0.0); + v1 = 1.9; + v2 = 2.8; + v3 = 3.7; + v4 = 4.6; + v5 = 5.5; + v6 = 6.4; + v7 = 7.3; + v8 = 8.2; + } + + @Override + boolean checkInv() { + return tree.checkInv(); + } + + // TODO: write more white-box test cases to achieve more code coverage, if needed. + // You do not need to add more test methods, if you tests already meet the desired coverage. +} diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/IntegerDelegateMutableTreeTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/IntegerDelegateMutableTreeTest.java new file mode 100644 index 0000000..4852f82 --- /dev/null +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/IntegerDelegateMutableTreeTest.java @@ -0,0 +1,28 @@ +package edu.postech.csed332.homework2; + +import org.junit.jupiter.api.BeforeEach; + +public class IntegerDelegateMutableTreeTest extends AbstractMutableTreeTest> { + + @BeforeEach + void setUp() { + tree = new DelegateTree<>(new AdjacencyListGraph<>(), 0); + v1 = 1; + v2 = 2; + v3 = 3; + v4 = 4; + v5 = 5; + v6 = 6; + v7 = 7; + v8 = 8; + } + + @Override + boolean checkInv() { + return tree.checkInv(); + } + + // TODO: write more white-box test cases to achieve more code coverage, if needed. + // You do not need to add more test methods, if you tests already meet the desired coverage. + +} diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/StringAdjacencyMutableGraphTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/StringAdjacencyMutableGraphTest.java new file mode 100644 index 0000000..e279faf --- /dev/null +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/StringAdjacencyMutableGraphTest.java @@ -0,0 +1,27 @@ +package edu.postech.csed332.homework2; + +import org.junit.jupiter.api.BeforeEach; + +public class StringAdjacencyMutableGraphTest extends AbstractMutableGraphTest> { + + @BeforeEach + void setUp() { + graph = new AdjacencyListGraph<>(); + v1 = "1"; + v2 = "2"; + v3 = "3"; + v4 = "4"; + v5 = "5"; + v6 = "6"; + v7 = "7"; + v8 = "8"; + } + + @Override + boolean checkInv() { + return graph.checkInv(); + } + + // TODO: write more white-box test cases to achieve more code coverage, if needed. + // You do not need to add more test methods, if you tests already meet the desired coverage. +} From fc0e296b822a38bf3b20c9f61d921dc7e2652fcd Mon Sep 17 00:00:00 2001 From: Gwanho Date: Mon, 2 Oct 2023 14:29:48 +0900 Subject: [PATCH 04/31] Feat: Modify build.gradle.kts to contain antlr --- hw2-problem1/build.gradle.kts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/hw2-problem1/build.gradle.kts b/hw2-problem1/build.gradle.kts index 6776839..ffdc53b 100644 --- a/hw2-problem1/build.gradle.kts +++ b/hw2-problem1/build.gradle.kts @@ -20,6 +20,7 @@ dependencies { testImplementation("org.junit.jupiter:junit-jupiter") testRuntimeOnly("org.junit.platform:junit-platform-launcher") //TODO: add an extra dependency for ANTLR4 (version 4.13.1) + antlr("org.antlr:antlr4:4.13.1") } tasks.test { @@ -34,4 +35,6 @@ tasks.jacocoTestReport { tasks.generateGrammarSource { //TODO: pass the argument -visitor to this task. + maxHeapSize = "64m" + arguments = arguments + listOf("-visitor", "-long-messages") } From eff5c5f3210efe26cbad978afd8aa5952735f6aa Mon Sep 17 00:00:00 2001 From: Gwanho Date: Mon, 2 Oct 2023 14:36:23 +0900 Subject: [PATCH 05/31] Chore: Add .gitignore contents --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index e69de29..884d976 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,2 @@ +build/ +.idea/ \ No newline at end of file From a007e55475f70970f0545906e42209deb044354e Mon Sep 17 00:00:00 2001 From: Gwanho Date: Mon, 2 Oct 2023 16:20:41 +0900 Subject: [PATCH 06/31] Feat: Fill getVariables of Variable class and Make its method --- .../postech/csed332/homework2/Variable.java | 2 +- .../postech/csed332/homework2/ExpTest.java | 41 +++++++++++++++++++ 2 files changed, 42 insertions(+), 1 deletion(-) diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java index 3db964a..ea384e3 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java @@ -20,7 +20,7 @@ public record Variable(int identifier) implements Exp { @Override public Set getVariables() { // TODO: implement this - return null; + return Set.of(identifier); } @Override diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java index 6c8d547..84fffa3 100644 --- a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -2,6 +2,8 @@ import org.junit.jupiter.api.Test; +import java.util.Set; + import static org.junit.jupiter.api.Assertions.*; public class ExpTest { @@ -26,4 +28,43 @@ void testParserError() { * Each test method should have appropriate JUnit assertions to test a single behavior. * You should not add arbitrary code to test methods to just increase coverage. */ + @Test + void testConjunction() { + Exp exp = ExpParser.parse("(p1 && p2)"); + assertEquals("(p1 && p2)", exp.toPrettyString()); + } + + @Test + void testConstant() { + Exp exp = ExpParser.parse("true"); + assertEquals("true", exp.toPrettyString()); + } + + @Test + void testDisjunction() { + Exp exp = ExpParser.parse("(p1 || p2)"); + assertEquals("(p1 || p2)", exp.toPrettyString()); + } + + @Test + void testNegation() { + Exp exp = ExpParser.parse("(! p1)"); + assertEquals("(! p1)", exp.toPrettyString()); + } + + @Test + void testVariable() { + Exp exp = ExpParser.parse("p1"); + assertEquals("p1", exp.toPrettyString()); + } + + @Test + void testInvalidVariable() { + assertThrows(IllegalArgumentException.class, () -> + new Variable(0) + ); + } + + + } From 975b2b39f0635e07973b1cd863dbb2c46914f36e Mon Sep 17 00:00:00 2001 From: Gwanho Date: Mon, 2 Oct 2023 16:48:02 +0900 Subject: [PATCH 07/31] Feat: Fill getVariables, evaluate method and its test --- .../csed332/homework2/Conjunction.java | 12 +++- .../postech/csed332/homework2/Constant.java | 5 +- .../csed332/homework2/Disjunction.java | 11 +++- .../postech/csed332/homework2/Negation.java | 4 +- .../postech/csed332/homework2/Variable.java | 2 +- .../postech/csed332/homework2/ExpTest.java | 65 ++++++++++++++++--- 6 files changed, 81 insertions(+), 18 deletions(-) diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java index 02de1c7..9ba6955 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java @@ -9,17 +9,23 @@ * A Boolean expression whose top-level operator is && (and). */ public record Conjunction(Exp... subExps) implements Exp { - @Override public Set getVariables() { // TODO: implement this - return null; + return Arrays.stream(subExps) + .flatMap(exp -> exp.getVariables().stream()) + .collect(Collectors.toSet()); } @Override public Boolean evaluate(Map assignment) { // TODO: implement this - return null; + for(Boolean key: assignment.values()){ + if(!key){ + return false; + } + } + return true; } @Override diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java index 3e3483f..3251e2c 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java @@ -11,13 +11,14 @@ public record Constant(boolean value) implements Exp { @Override public Set getVariables() { // TODO: implement this - return null; + // it should return an empty set because a constant does not have any variables + return Set.of(); } @Override public Boolean evaluate(Map assignment) { // TODO: implement this - return null; + return value; } @Override diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java index 9e52bf2..a9e311c 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java @@ -13,13 +13,20 @@ public record Disjunction(Exp... subExps) implements Exp { @Override public Set getVariables() { // TODO: implement this - return null; + return Arrays.stream(subExps) + .flatMap(exp -> exp.getVariables().stream()) + .collect(Collectors.toSet()); } @Override public Boolean evaluate(Map assignment) { // TODO: implement this - return null; + for(Boolean key: assignment.values()){ + if(key){ + return true; + } + } + return false; } @Override diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java index 2c62d8b..a083aad 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java @@ -11,13 +11,13 @@ public record Negation(Exp subExp) implements Exp { @Override public Set getVariables() { // TODO: implement this - return null; + return subExp().getVariables(); } @Override public Boolean evaluate(Map assignment) { // TODO: implement this - return null; + return !subExp().evaluate(assignment); } @Override diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java index ea384e3..7f65152 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java @@ -26,7 +26,7 @@ public Set getVariables() { @Override public Boolean evaluate(Map assignment) { // TODO: implement this - return null; + return assignment.get(identifier); } @Override diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java index 84fffa3..281d7a5 100644 --- a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Test; +import java.util.Map; import java.util.Set; import static org.junit.jupiter.api.Assertions.*; @@ -33,38 +34,86 @@ void testConjunction() { Exp exp = ExpParser.parse("(p1 && p2)"); assertEquals("(p1 && p2)", exp.toPrettyString()); } - @Test void testConstant() { Exp exp = ExpParser.parse("true"); assertEquals("true", exp.toPrettyString()); } - @Test void testDisjunction() { Exp exp = ExpParser.parse("(p1 || p2)"); assertEquals("(p1 || p2)", exp.toPrettyString()); } - @Test void testNegation() { Exp exp = ExpParser.parse("(! p1)"); assertEquals("(! p1)", exp.toPrettyString()); } - @Test void testVariable() { Exp exp = ExpParser.parse("p1"); assertEquals("p1", exp.toPrettyString()); } - + @Test + void testConjunctionGetVariables() { + Exp exp = ExpParser.parse("(p1 && p2)"); + assertEquals(Set.of(1, 2), exp.getVariables()); + } + @Test + void testDisjunctionGetVariables() { + Exp exp = ExpParser.parse("(p1 || p2)"); + assertEquals(Set.of(1, 2), exp.getVariables()); + } + @Test + void testNegationGetVariables() { + Exp exp = ExpParser.parse("(! p1)"); + assertEquals(Set.of(1), exp.getVariables()); + } + @Test + void testConstantGetVariables() { + Exp exp = ExpParser.parse("true"); + assertEquals(Set.of(), exp.getVariables()); + } + @Test + void testVariableGetVariables() { + Exp exp = ExpParser.parse("p1"); + assertEquals(Set.of(1), exp.getVariables()); + } @Test void testInvalidVariable() { assertThrows(IllegalArgumentException.class, () -> new Variable(0) ); } - - - + @Test + void testVariableEvaluate() { + Exp exp = ExpParser.parse("p1"); + assertEquals(true, exp.evaluate(Map.of(1, true))); + assertEquals(false, exp.evaluate(Map.of(1, false))); + } + @Test + void testConstantEvaluate() { + Exp exp = ExpParser.parse("true"); + assertEquals(true, exp.evaluate(Map.of())); + } + @Test + void testConjunctionEvaluate() { + Exp exp = ExpParser.parse("(p1 && p2)"); + assertEquals(true, exp.evaluate(Map.of(1, true, 2, true))); + assertEquals(false, exp.evaluate(Map.of(1, true, 2, false))); + } + @Test + void testDisjunctionEvaluate() { + Exp exp = ExpParser.parse("(p1 || p2)"); + assertEquals(true, exp.evaluate(Map.of(1, true, 2, true))); + assertEquals(true, exp.evaluate(Map.of(1, true, 2, false))); + assertEquals(true, exp.evaluate(Map.of(1, false, 2, true))); + assertEquals(false, exp.evaluate(Map.of(1, false, 2, false))); + } + @Test + void testNegationEvaluate() { + Exp exp = ExpParser.parse("(! p1)"); + assertEquals(true, exp.evaluate(Map.of(1, false))); + assertEquals(false, exp.evaluate(Map.of(1, true))); + } } From 4d6e62c71c9650db306807d60e6bb8a2a7297b15 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Tue, 3 Oct 2023 10:55:02 +0900 Subject: [PATCH 08/31] Feat: Implement simplify method of conjunction --- .../csed332/homework2/Conjunction.java | 67 ++++++++++++++++++- .../postech/csed332/homework2/ExpTest.java | 20 ++++++ 2 files changed, 86 insertions(+), 1 deletion(-) diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java index 9ba6955..7a4e5bb 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java @@ -31,7 +31,72 @@ public Boolean evaluate(Map assignment) { @Override public Exp simplify() { // TODO: implement this - return null; + // exp && true == exp + // exp && exp == exp + // exp && false == false + boolean true_flag = false; + boolean false_flag = false; + boolean same_flag = false; + Exp result = null; + for(Exp exp: subExps){ + if(exp instanceof Constant){ + if(((Constant) exp).value()){ + true_flag = true; + } + else{ + false_flag = true; + } + } + else { + // how to check if two expressions are the same? + if(result != null && result.toPrettyString().equals(exp.toPrettyString())) { + same_flag = true; + } + result = exp; + } + } + if(true_flag || same_flag) { + return result; + } + else if(false_flag){ + return new Constant(false); + } + // exp && ! exp == false + boolean negation_flag = false; + same_flag = false; + for(Exp exp: subExps){ + if(exp instanceof Negation) { + negation_flag = !negation_flag; + } + if(result != null && + result.getVariables().equals(exp.getVariables()) && + exp.toPrettyString().contains(result.toPrettyString())) { + same_flag = true; + } + result = exp; + } + if(negation_flag && same_flag){ + return new Constant(false); + } + // exp1 && (exp1 || exp2) == exp1 + boolean disjunction_flag = false; + same_flag = false; + for(Exp exp: subExps){ + if(exp instanceof Disjunction){ + disjunction_flag = !disjunction_flag; + if(result != null && exp.toPrettyString().contains(result.toPrettyString())){ + same_flag = true; + } + } + else { + result = exp; + } + } + if(disjunction_flag && same_flag){ + return result; + } + + return this; } @Override diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java index 281d7a5..8fcff23 100644 --- a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -116,4 +116,24 @@ void testNegationEvaluate() { assertEquals(true, exp.evaluate(Map.of(1, false))); assertEquals(false, exp.evaluate(Map.of(1, true))); } + @Test + void testConjunctionSimplify() { + Exp exp1 = ExpParser.parse("(p1 && true)"); + Exp exp2 = ExpParser.parse("(p1 && p1)"); + Exp exp3 = ExpParser.parse("(p1 && false)"); + Exp exp4 = ExpParser.parse("(p1 && ! p1)"); + Exp exp5 = ExpParser.parse("(p1 && (p1 || p2))"); + Exp exp6 = ExpParser.parse("(p1 && p2)"); + assertEquals("p1", exp1.simplify().toPrettyString()); + assertEquals("p1", exp2.simplify().toPrettyString()); + assertEquals("false", exp3.simplify().toPrettyString()); + assertEquals("false", exp4.simplify().toPrettyString()); + assertEquals("p1", exp5.simplify().toPrettyString()); + assertEquals("(p1 && p2)", exp6.simplify().toPrettyString()); + } +// @Test +// void testDominationAndDoubleNegationLaws() { +// +// } + } From 90705cf7b149bef94df8d0ec4e3bda603ba60343 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Tue, 3 Oct 2023 14:17:34 +0900 Subject: [PATCH 09/31] Feat: Uncompleted conjunction, disjunction simplify method --- .../csed332/homework2/Conjunction.java | 48 +++++++----- .../csed332/homework2/Disjunction.java | 73 ++++++++++++++++++- .../postech/csed332/homework2/ExpTest.java | 22 +++++- 3 files changed, 118 insertions(+), 25 deletions(-) diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java index 7a4e5bb..9f482f3 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java @@ -32,13 +32,17 @@ public Boolean evaluate(Map assignment) { public Exp simplify() { // TODO: implement this // exp && true == exp - // exp && exp == exp // exp && false == false + // exp && exp == exp boolean true_flag = false; boolean false_flag = false; boolean same_flag = false; Exp result = null; for(Exp exp: subExps){ + if (result == null) { + result = exp; + continue; + } if(exp instanceof Constant){ if(((Constant) exp).value()){ true_flag = true; @@ -47,12 +51,8 @@ public Exp simplify() { false_flag = true; } } - else { - // how to check if two expressions are the same? - if(result != null && result.toPrettyString().equals(exp.toPrettyString())) { + else if(result.toPrettyString().equals(exp.toPrettyString())) { same_flag = true; - } - result = exp; } } if(true_flag || same_flag) { @@ -64,16 +64,19 @@ else if(false_flag){ // exp && ! exp == false boolean negation_flag = false; same_flag = false; + result = null; for(Exp exp: subExps){ - if(exp instanceof Negation) { - negation_flag = !negation_flag; + if (result == null) { + result = exp; + continue; } - if(result != null && - result.getVariables().equals(exp.getVariables()) && - exp.toPrettyString().contains(result.toPrettyString())) { - same_flag = true; + if(exp instanceof Negation) { + negation_flag = true; + String exp_str = exp.toPrettyString().substring(3, exp.toPrettyString().length() - 1); + if(result.toPrettyString().equals(exp_str)) { + same_flag = true; + } } - result = exp; } if(negation_flag && same_flag){ return new Constant(false); @@ -81,21 +84,26 @@ else if(false_flag){ // exp1 && (exp1 || exp2) == exp1 boolean disjunction_flag = false; same_flag = false; + result = null; for(Exp exp: subExps){ + if (result == null) { + result = exp; + continue; + } if(exp instanceof Disjunction){ - disjunction_flag = !disjunction_flag; - if(result != null && exp.toPrettyString().contains(result.toPrettyString())){ - same_flag = true; + disjunction_flag = true; + // how to get each subexpression of exp? + for(Exp disjunction_exp: ((Disjunction) exp).subExps()) { + if (result.toPrettyString().equals(disjunction_exp.toPrettyString())) { + same_flag = true; + } } } - else { - result = exp; - } } if(disjunction_flag && same_flag){ return result; } - + // When there is no simplification return this; } diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java index a9e311c..6bd6eee 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java @@ -32,7 +32,78 @@ public Boolean evaluate(Map assignment) { @Override public Exp simplify() { // TODO: implement this - return null; + // exp || false == exp + // exp || true == true + // exp || exp == exp + boolean false_flag = false; + boolean true_flag = false; + boolean same_flag = false; + Exp result = null; + for(Exp exp: subExps) { + if(result == null) { + result = exp; + continue; + } + if(exp instanceof Constant) { + if(((Constant) exp).value()) { + true_flag = true; + } + else { + false_flag = true; + } + } + else if(result.toPrettyString().equals(exp.toPrettyString())) { + same_flag = true; + } + } + if(false_flag || same_flag) { + return result; + } + else if(true_flag) { + return new Constant(true); + } + // exp || ! exp == true + boolean negation_flag = false; + same_flag = false; + for(Exp exp: subExps){ + if(result == null) { + result = exp; + continue; + } + if(exp instanceof Negation) { + negation_flag = true; + String exp_str = exp.toPrettyString().substring(3, exp.toPrettyString().length() - 1); + if(result.toPrettyString().equals(exp_str)) { + same_flag = true; + } + } + } + if(negation_flag && same_flag){ + return new Constant(true); + } + // exp1 || (exp1 && exp2) == exp1 + boolean conjunction_flag = false; + same_flag = false; + for(Exp exp: subExps){ + if(result == null) { + result = exp; + continue; + } + if(exp instanceof Conjunction){ + conjunction_flag = true; + // how to get each subexpression of exp? + for(Exp conjunction_exp: ((Conjunction) exp).subExps()) { + if (result.toPrettyString().equals(conjunction_exp.toPrettyString())) { + same_flag = true; + } + } + } + } + if(conjunction_flag && same_flag){ + return result; + } + // When there is no simplification + return this; } @Override diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java index 8fcff23..e15463d 100644 --- a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -131,9 +131,23 @@ void testConjunctionSimplify() { assertEquals("p1", exp5.simplify().toPrettyString()); assertEquals("(p1 && p2)", exp6.simplify().toPrettyString()); } -// @Test -// void testDominationAndDoubleNegationLaws() { -// -// } + @Test + void testDisjunctionSimplify() { + Exp exp1 = ExpParser.parse("(p1 || false)"); + Exp exp2 = ExpParser.parse("(p1 || p1)"); + Exp exp3 = ExpParser.parse("(p1 || true)"); + Exp exp4 = ExpParser.parse("(p1 || ! p1)"); + Exp exp5 = ExpParser.parse("(p1 || (p1 && p2))"); // p1 == a || b, p2 == a || b && a case? + Exp exp6 = ExpParser.parse("(p1 || p2)"); + Exp exp7 = ExpParser.parse("(p1 || (p2 || (p2 && p3)))"); + assertEquals("p1", exp1.simplify().toPrettyString()); + assertEquals("p1", exp2.simplify().toPrettyString()); + assertEquals("true", exp3.simplify().toPrettyString()); + assertEquals("true", exp4.simplify().toPrettyString()); + assertEquals("p1", exp5.simplify().toPrettyString()); + assertEquals("(p1 || p2)", exp6.simplify().toPrettyString()); + assertEquals("(p1 || p2)", exp7.simplify().toPrettyString()); + } + } From b4ecc95ad9d7f7115d350967a65f94dbbf860fd7 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Thu, 5 Oct 2023 01:26:44 +0900 Subject: [PATCH 10/31] Feat: Modify Disjunction simplify method's algorithm thoroughly --- .../csed332/homework2/Conjunction.java | 4 +- .../postech/csed332/homework2/Constant.java | 2 +- .../csed332/homework2/Disjunction.java | 87 ++++++------------- .../postech/csed332/homework2/Negation.java | 10 ++- .../postech/csed332/homework2/Variable.java | 2 +- .../postech/csed332/homework2/ExpTest.java | 28 +++--- 6 files changed, 50 insertions(+), 83 deletions(-) diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java index 9f482f3..0a90beb 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java @@ -56,7 +56,7 @@ else if(result.toPrettyString().equals(exp.toPrettyString())) { } } if(true_flag || same_flag) { - return result; + return result.simplify(); } else if(false_flag){ return new Constant(false); @@ -101,7 +101,7 @@ else if(false_flag){ } } if(disjunction_flag && same_flag){ - return result; + return result.simplify(); } // When there is no simplification return this; diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java index 3251e2c..8846c5e 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Constant.java @@ -24,7 +24,7 @@ public Boolean evaluate(Map assignment) { @Override public Exp simplify() { // TODO: implement this - return null; + return this; } @Override diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java index 6bd6eee..71774a9 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java @@ -32,76 +32,39 @@ public Boolean evaluate(Map assignment) { @Override public Exp simplify() { // TODO: implement this - // exp || false == exp - // exp || true == true - // exp || exp == exp - boolean false_flag = false; - boolean true_flag = false; - boolean same_flag = false; - Exp result = null; - for(Exp exp: subExps) { - if(result == null) { - result = exp; - continue; - } - if(exp instanceof Constant) { - if(((Constant) exp).value()) { - true_flag = true; - } - else { - false_flag = true; - } - } - else if(result.toPrettyString().equals(exp.toPrettyString())) { - same_flag = true; - } - } - if(false_flag || same_flag) { - return result; + this.subExps[0] = this.subExps[0].simplify(); + this.subExps[1] = this.subExps[1].simplify(); + Exp firstExp = this.subExps[0]; + Exp secondExp = this.subExps[1]; + // Identity and idempotent laws + // exp || exp => exp + if (firstExp.toPrettyString().equals(secondExp.toPrettyString())) { + return firstExp.simplify(); } - else if(true_flag) { - return new Constant(true); - } - // exp || ! exp == true - boolean negation_flag = false; - same_flag = false; - for(Exp exp: subExps){ - if(result == null) { - result = exp; - continue; + if (secondExp instanceof Constant) { + // exp || false => exp + if (!((Constant) secondExp).value()) { + return firstExp.simplify(); } - if(exp instanceof Negation) { - negation_flag = true; - String exp_str = exp.toPrettyString().substring(3, exp.toPrettyString().length() - 1); - if(result.toPrettyString().equals(exp_str)) { - same_flag = true; - } + // exp || true => true + else { + return secondExp.simplify(); } } - if(negation_flag && same_flag){ - return new Constant(true); - } - // exp1 || (exp1 && exp2) == exp1 - boolean conjunction_flag = false; - same_flag = false; - for(Exp exp: subExps){ - if(result == null) { - result = exp; - continue; + // exp || ! exp => true + if (secondExp instanceof Negation) { + if (firstExp.toPrettyString().equals(((Negation) secondExp).subExp().toPrettyString())) { + return new Constant(true); } - if(exp instanceof Conjunction){ - conjunction_flag = true; - // how to get each subexpression of exp? - for(Exp conjunction_exp: ((Conjunction) exp).subExps()) { - if (result.toPrettyString().equals(conjunction_exp.toPrettyString())) { - same_flag = true; - } + } + // exp1 || (exp1 && exp2) => exp1 + if (secondExp instanceof Conjunction) { + for(Exp exp: ((Conjunction) secondExp).subExps()){ + if(firstExp.toPrettyString().equals(exp.toPrettyString())){ + return firstExp.simplify(); } } } - if(conjunction_flag && same_flag){ - return result; - } // When there is no simplification return this; } diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java index a083aad..0b08725 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java @@ -23,7 +23,15 @@ public Boolean evaluate(Map assignment) { @Override public Exp simplify() { // TODO: implement this - return null; + Exp exp = subExp(); + // ! (! exp) == exp + if (exp instanceof Negation) { + return ((Negation) exp).subExp().simplify(); + } + // ! (true) == false, ! (false) == true + // ! (exp1 && exp2) == ! exp1 || ! exp2, ! (exp1 || exp2) == ! exp1 && ! exp2 + + return this; } @Override diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java index 7f65152..abb1b29 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Variable.java @@ -32,7 +32,7 @@ public Boolean evaluate(Map assignment) { @Override public Exp simplify() { // TODO: implement this - return null; + return this; } @Override diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java index e15463d..3c75532 100644 --- a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -1,6 +1,8 @@ package edu.postech.csed332.homework2; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import java.util.Map; import java.util.Set; @@ -131,22 +133,16 @@ void testConjunctionSimplify() { assertEquals("p1", exp5.simplify().toPrettyString()); assertEquals("(p1 && p2)", exp6.simplify().toPrettyString()); } - @Test - void testDisjunctionSimplify() { - Exp exp1 = ExpParser.parse("(p1 || false)"); - Exp exp2 = ExpParser.parse("(p1 || p1)"); - Exp exp3 = ExpParser.parse("(p1 || true)"); - Exp exp4 = ExpParser.parse("(p1 || ! p1)"); - Exp exp5 = ExpParser.parse("(p1 || (p1 && p2))"); // p1 == a || b, p2 == a || b && a case? - Exp exp6 = ExpParser.parse("(p1 || p2)"); - Exp exp7 = ExpParser.parse("(p1 || (p2 || (p2 && p3)))"); - assertEquals("p1", exp1.simplify().toPrettyString()); - assertEquals("p1", exp2.simplify().toPrettyString()); - assertEquals("true", exp3.simplify().toPrettyString()); - assertEquals("true", exp4.simplify().toPrettyString()); - assertEquals("p1", exp5.simplify().toPrettyString()); - assertEquals("(p1 || p2)", exp6.simplify().toPrettyString()); - assertEquals("(p1 || p2)", exp7.simplify().toPrettyString()); + + @ParameterizedTest + @CsvSource({"(p1 || false), p1", "(p1 || p1), p1", "(p1 || true), true", + "(p1 || ! p1), true", "(p1 || (p1 && p2)), p1", + "(p1 || p2), (p1 || p2)", "(p1 || (p2 || (p2 && p3))), (p1 || p2)", + "((p1 || false) || p2), (p1 || p2)", "((p1 || p1) || p2), (p1 || p2)" + }) + void testDisjunctionSimplify(String input, String expected) { + Exp exp = ExpParser.parse(input); + assertEquals(expected, exp.simplify().toPrettyString()); } From 72ffe7f700df1fe1f724cdd23b9f41f8623dc082 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Thu, 5 Oct 2023 01:51:06 +0900 Subject: [PATCH 11/31] Feat: Modify Conjunction simplify method's algorithm --- .../csed332/homework2/Conjunction.java | 88 +++++-------------- .../postech/csed332/homework2/ExpTest.java | 25 ++---- 2 files changed, 33 insertions(+), 80 deletions(-) diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java index 0a90beb..ca88bca 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java @@ -31,78 +31,38 @@ public Boolean evaluate(Map assignment) { @Override public Exp simplify() { // TODO: implement this - // exp && true == exp - // exp && false == false - // exp && exp == exp - boolean true_flag = false; - boolean false_flag = false; - boolean same_flag = false; - Exp result = null; - for(Exp exp: subExps){ - if (result == null) { - result = exp; - continue; - } - if(exp instanceof Constant){ - if(((Constant) exp).value()){ - true_flag = true; - } - else{ - false_flag = true; - } - } - else if(result.toPrettyString().equals(exp.toPrettyString())) { - same_flag = true; - } - } - if(true_flag || same_flag) { - return result.simplify(); + this.subExps[0] = this.subExps[0].simplify(); + this.subExps[1] = this.subExps[1].simplify(); + Exp firstExp = this.subExps[0]; + Exp secondExp = this.subExps[1]; + // exp && exp => exp + if (firstExp.toPrettyString().equals(secondExp.toPrettyString())) { + return firstExp.simplify(); } - else if(false_flag){ - return new Constant(false); - } - // exp && ! exp == false - boolean negation_flag = false; - same_flag = false; - result = null; - for(Exp exp: subExps){ - if (result == null) { - result = exp; - continue; + if (secondExp instanceof Constant) { + // exp && false => false + if (!((Constant) secondExp).value()) { + return new Constant(false); } - if(exp instanceof Negation) { - negation_flag = true; - String exp_str = exp.toPrettyString().substring(3, exp.toPrettyString().length() - 1); - if(result.toPrettyString().equals(exp_str)) { - same_flag = true; - } + // exp && true => exp + else { + return firstExp.simplify(); } } - if(negation_flag && same_flag){ - return new Constant(false); - } - // exp1 && (exp1 || exp2) == exp1 - boolean disjunction_flag = false; - same_flag = false; - result = null; - for(Exp exp: subExps){ - if (result == null) { - result = exp; - continue; + // exp && ! exp => false + if (secondExp instanceof Negation) { + if (firstExp.toPrettyString().equals(((Negation) secondExp).subExp().toPrettyString())) { + return new Constant(false); } - if(exp instanceof Disjunction){ - disjunction_flag = true; - // how to get each subexpression of exp? - for(Exp disjunction_exp: ((Disjunction) exp).subExps()) { - if (result.toPrettyString().equals(disjunction_exp.toPrettyString())) { - same_flag = true; - } + } + // exp1 && (exp1 || exp2) => exp1 + if (secondExp instanceof Disjunction) { + for(Exp exp: ((Disjunction) secondExp).subExps()){ + if(firstExp.toPrettyString().equals(exp.toPrettyString())){ + return firstExp.simplify(); } } } - if(disjunction_flag && same_flag){ - return result.simplify(); - } // When there is no simplification return this; } diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java index 3c75532..fc8178f 100644 --- a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -118,22 +118,16 @@ void testNegationEvaluate() { assertEquals(true, exp.evaluate(Map.of(1, false))); assertEquals(false, exp.evaluate(Map.of(1, true))); } - @Test - void testConjunctionSimplify() { - Exp exp1 = ExpParser.parse("(p1 && true)"); - Exp exp2 = ExpParser.parse("(p1 && p1)"); - Exp exp3 = ExpParser.parse("(p1 && false)"); - Exp exp4 = ExpParser.parse("(p1 && ! p1)"); - Exp exp5 = ExpParser.parse("(p1 && (p1 || p2))"); - Exp exp6 = ExpParser.parse("(p1 && p2)"); - assertEquals("p1", exp1.simplify().toPrettyString()); - assertEquals("p1", exp2.simplify().toPrettyString()); - assertEquals("false", exp3.simplify().toPrettyString()); - assertEquals("false", exp4.simplify().toPrettyString()); - assertEquals("p1", exp5.simplify().toPrettyString()); - assertEquals("(p1 && p2)", exp6.simplify().toPrettyString()); + @ParameterizedTest + @CsvSource({"(p1 && true), p1", "(p1 && p1), p1", "(p1 && false), false", + "(p1 && ! p1), false", "(p1 && (p1 || p2)), p1", + "(p1 && p2), (p1 && p2)", "(p1 && (p2 && (p2 || p3))), (p1 && p2)", + "((p1 && true) && p2), (p1 && p2)", "((p1 && p1) && p2), (p1 && p2)" + }) + void testConjunctionSimplify(String input, String expected) { + Exp exp = ExpParser.parse(input); + assertEquals(expected, exp.simplify().toPrettyString()); } - @ParameterizedTest @CsvSource({"(p1 || false), p1", "(p1 || p1), p1", "(p1 || true), true", "(p1 || ! p1), true", "(p1 || (p1 && p2)), p1", @@ -145,5 +139,4 @@ void testDisjunctionSimplify(String input, String expected) { assertEquals(expected, exp.simplify().toPrettyString()); } - } From acf46b09d0b12b8808abc01d36f28f5850c73e6e Mon Sep 17 00:00:00 2001 From: Gwanho Date: Thu, 5 Oct 2023 01:52:27 +0900 Subject: [PATCH 12/31] Feat: Fill Negation's simplify method and its test --- .../edu/postech/csed332/homework2/Negation.java | 17 +++++++++++++++-- .../edu/postech/csed332/homework2/ExpTest.java | 12 +++++++++++- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java index 0b08725..4541bdb 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Negation.java @@ -29,8 +29,21 @@ public Exp simplify() { return ((Negation) exp).subExp().simplify(); } // ! (true) == false, ! (false) == true - // ! (exp1 && exp2) == ! exp1 || ! exp2, ! (exp1 || exp2) == ! exp1 && ! exp2 - + if (exp instanceof Constant) { + return new Constant(!((Constant) exp).value()); + } + // ! (exp1 && exp2) == ! exp1 || ! exp2 + if (exp instanceof Conjunction) { + Exp firstExp = ((Conjunction) exp).subExps()[0]; + Exp secondExp = ((Conjunction) exp).subExps()[1]; + return new Disjunction(new Negation(firstExp).simplify(), new Negation(secondExp).simplify()).simplify(); + } + // ! (exp1 || exp2) == ! exp1 && ! exp2 + if (exp instanceof Disjunction) { + Exp firstExp = ((Disjunction) exp).subExps()[0]; + Exp secondExp = ((Disjunction) exp).subExps()[1]; + return new Conjunction(new Negation(firstExp).simplify(), new Negation(secondExp).simplify()).simplify(); + } return this; } diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java index fc8178f..3d6f937 100644 --- a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -138,5 +138,15 @@ void testDisjunctionSimplify(String input, String expected) { Exp exp = ExpParser.parse(input); assertEquals(expected, exp.simplify().toPrettyString()); } - + @ParameterizedTest + @CsvSource({"(! true), false", "(! false), true", "(! p1), (! p1)", + "(! (! p1)), p1", "(! (p1 && p2)), ((! p1) || (! p2))", + "(! (p1 || p2)), ((! p1) && (! p2))", "(! (p1 && (p1 || p2))), (! p1)", + "(! (p1 || (p1 && p2))), (! p1)", "(! (p1 && (p2 || p1))), (! p1)", + "(! (p1 || (p2 && p1))), (! p1)" + }) + void testNegationSimplify(String input, String expected) { + Exp exp = ExpParser.parse(input); + assertEquals(expected, exp.simplify().toPrettyString()); + } } From fc8f7174698110b2fc26fb12e6ac546fa3ae3af8 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Thu, 5 Oct 2023 02:29:34 +0900 Subject: [PATCH 13/31] Test: Add simplify test of Constant and Variable classes --- .../java/edu/postech/csed332/homework2/ExpTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java index 3d6f937..13deb75 100644 --- a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -149,4 +149,14 @@ void testNegationSimplify(String input, String expected) { Exp exp = ExpParser.parse(input); assertEquals(expected, exp.simplify().toPrettyString()); } + @Test + void testConstantSimplify() { + Exp exp = ExpParser.parse("true"); + assertEquals("true", exp.simplify().toPrettyString()); + } + @Test + void testVariableSimplify() { + Exp exp = ExpParser.parse("p1"); + assertEquals("p1", exp.simplify().toPrettyString()); + } } From af07bb08b63164728c9c5e59bb726e1abd37c661 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Thu, 5 Oct 2023 02:50:43 +0900 Subject: [PATCH 14/31] Chore: Add jacoco report of problem1 --- jacoco1.csv | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 jacoco1.csv diff --git a/jacoco1.csv b/jacoco1.csv new file mode 100644 index 0000000..fc3fc27 --- /dev/null +++ b/jacoco1.csv @@ -0,0 +1,19 @@ +GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.ParenExpContext,36,14,5,1,8,2,8,2,5,2 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpLexer,16,233,0,8,8,27,8,9,8,5 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser,81,523,16,23,17,108,19,18,6,9 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.UnaryExpContext,31,14,5,1,7,2,7,2,4,2 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpBaseListener,17,0,0,0,15,0,15,0,15,0 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.VariableContext,25,14,5,1,6,2,6,2,3,2 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.ExpressionContext,2,12,0,0,1,5,1,3,1,3 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.BinaryExpContext,40,14,5,1,9,2,9,2,6,2 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpBaseVisitor,20,3,0,0,5,1,5,1,5,1 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.ConstantContext,30,14,5,1,7,2,7,2,4,2 +hw2-problem1,edu.postech.csed332.homework2,Constant,6,10,0,0,3,2,3,2,3,2 +hw2-problem1,edu.postech.csed332.homework2,Negation,6,11,0,0,3,2,3,2,3,2 +hw2-problem1,edu.postech.csed332.homework2,Variable,9,17,1,1,3,5,3,3,2,3 +hw2-problem1,edu.postech.csed332.homework2,Disjunction,6,17,0,0,3,3,3,2,3,2 +hw2-problem1,edu.postech.csed332.homework2,ExpParser.new BaseErrorListener() {...},0,11,0,0,0,2,0,2,0,2 +hw2-problem1,edu.postech.csed332.homework2,ExpParser.new BooleanExpBaseVisitor() {...},4,85,1,2,1,8,1,7,0,6 +hw2-problem1,edu.postech.csed332.homework2,ExpParser,3,32,0,0,1,7,1,2,1,2 +hw2-problem1,edu.postech.csed332.homework2,Conjunction,4,30,0,0,2,6,2,4,2,4 From 249c3f847470ac8b27870450135eb8e9063a1c55 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 13:01:30 +0900 Subject: [PATCH 15/31] Feat: Write hw2-problem.md --- hw2-problem2.md | 132 ++++++++++++++++++++++++++++++++++++------------ 1 file changed, 100 insertions(+), 32 deletions(-) diff --git a/hw2-problem2.md b/hw2-problem2.md index 64bcca9..114eee8 100644 --- a/hw2-problem2.md +++ b/hw2-problem2.md @@ -36,8 +36,8 @@ boolean containsVertex(N vertex); boolean containsEdge(N source, N target); ``` -- requires: -- ensures: +- requires: source and target vertices are in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: true if source and target is connected by an edge ##### getNeighborhood @@ -45,8 +45,8 @@ boolean containsEdge(N source, N target); Set getNeighborhood(N vertex); ``` -- requires: -- ensures: +- requires: vertex is in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: returns the set of vertices that are connected to the vertex by an edge, immutable ## `Tree` @@ -55,7 +55,12 @@ Let $`T_{this} = (V_{this}, E_{this}, \hat{v}_{this})`$ be an abstract value of ##### Class invariant - +```math +\forall (v, w) \in E_{this}.\ v, w \in V_{this} \land (w, v) \in E_{this} +for all pairs of vertices (v, w) in V_{this}, there exists a sequence of edges in E_{this} that connects vertex v to vertex w. +There must be a single root node in the tree +The tree should not contain self-loops +``` ##### getDepth @@ -75,8 +80,11 @@ int getDepth(N vertex); int getHeight(); ``` -- requires: -- ensures: +- requires: vertex is in $`\mathcal{N}`$ and not $`\mathsf{null}`$. +- ensures: + + returns __IllegalArgumentException__ if vertex is not in the tree + + returns 0 if vertex is getRoot() and + + returns max(getHeight(getChildren(vertex))) + 1, otherwise. ##### getChildren @@ -84,8 +92,10 @@ int getHeight(); Set getChildren(N vertex); ``` -- requires: -- ensures: +- requires: vertex is in the tree +- ensures: + + returns __IllegalArgumentException__ if vertex is not in the tree + + returns the set of vertices that are connected to the vertex by an edge, immutable ##### getParent @@ -93,8 +103,10 @@ Set getChildren(N vertex); Optional getParent(N vertex); ``` -- requires: -- ensures: +- requires: vertex is in the tree +- ensures: + + returns the parent of the vertex, if it exists + + returns Optional.empty() if the vertex is the root ## `MutableGraph` @@ -127,8 +139,12 @@ boolean addVertex(N vertex); boolean removeVertex(N vertex); ``` -- requires: -- ensures: +- requires: vertex is in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: + + $`V_{next} = V_{this} \setminus \{\texttt{vertex}\}`$; + + $`E_{next} = \{(v, w) \in E_{this} \mid v \neq \texttt{vertex} \land w \neq \texttt{vertex}\}`$; + + If $`G_{this}`$ satisfies the class invariant, $`G_{next}`$ also satisfies the class invariant; and + + returns true if and only if $`\texttt{vertex} \in V_{this}`$. ##### addEdge @@ -136,8 +152,12 @@ boolean removeVertex(N vertex); boolean addEdge(N source, N target); ``` -- requires: -- ensures: +- requires: source and target vertices are in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: + + $`V_{next} = V_{this} \cup \{\texttt{source}, \texttt{target}\}`$ if source and target are not in the graph, put them in the graph + + $`E_{next} = E_{this} \cup \{(\texttt{source}, \texttt{target})\}`$ if the edge does not already exist, add it to the graph + + If $`G_{this}`$ satisfies the class invariant, $`G_{next}`$ also satisfies the class invariant; and + + returns true if and only if $`E_{next} \neq E_{this}`$. ##### removeEdge @@ -145,8 +165,11 @@ boolean addEdge(N source, N target); boolean removeEdge(N source, N target); ``` -- requires: -- ensures: +- requires: source and target vertices are in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: + + $`E_{next} = E_{this} \setminus \{(\texttt{source}, \texttt{target})\}`$ if the edge exists, remove it from the graph + + If $`G_{this}`$ satisfies the class invariant, $`G_{next}`$ also satisfies the class invariant; and + + returns true if and only if $`E_{next} \neq E_{this}`$. ## `MutableTree` @@ -156,7 +179,12 @@ and $`T_{next} = (V_{next}, E_{next}, \hat{v}_{next})`$ be an abstract value of ##### Class invariant - +```math +\forall (v, w) \in E_{this}.\ v, w \in V_{this} \land (w, v) \in E_{this} +for all pairs of vertices (v, w) in V_{this}, there exists a sequence of edges in E_{this} that connects vertex v to vertex w. +There must be a single root node in the tree +The tree should not contain self-loops +``` ##### addVertex @@ -164,8 +192,12 @@ and $`T_{next} = (V_{next}, E_{next}, \hat{v}_{next})`$ be an abstract value of boolean addVertex(N vertex); ``` -- requires: -- ensures: +- requires: vertex is in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: + + $`V_{next} = V_{this} \cup \{\texttt{vertex}\}`$; + + $`E_{next} = E_{this}`$ (the edges are not modified) + + If $`T_{this}`$ satisfies the class invariant, $`T_{next}`$ also satisfies the class invariant; and + + returns true if and only if $`\texttt{vertex} \notin V_{this}`$. ##### removeVertex @@ -173,8 +205,13 @@ boolean addVertex(N vertex); boolean removeVertex(N vertex); ``` -- requires: -- ensures: +- requires: vertex is in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: + + $`V_{next} = V_{this} \setminus \{\texttt{vertex}\}`$; + + $`E_{next} = \{(v, w) \in E_{this} \mid v \neq \texttt{vertex} \land w \neq \texttt{vertex}\}`$ for vertices that are descendants of given vertex, remove them from the tree + + If $`T_{this}`$ satisfies the class invariant, $`T_{next}`$ also satisfies the class invariant; and + + returns true if and only if $`\texttt{vertex} \in V_{this}`$. + + If the vertex is the root, throw __llegalArgumentException__ ##### addEdge @@ -182,8 +219,12 @@ boolean removeVertex(N vertex); boolean addEdge(N source, N target); ``` -- requires: -- ensures: +- requires: source and target vertices are in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: + + $`V_{next} = V_{this} \cup \texttt{target}`$ source is already in the tree and target is not in the tree, so create target node and add it to the tree + + $`E_{next} = E_{this} \cup \{(\texttt{source}, \texttt{target}), (\texttt{target}, \texttt{source})\}`$ + + If $`T_{this}`$ satisfies the class invariant, $`T_{next}`$ also satisfies the class invariant; and + + returns true if and only if $`E_{next} \neq E_{this}`$. ##### removeEdge @@ -191,8 +232,14 @@ boolean addEdge(N source, N target); boolean removeEdge(N source, N target); ``` -- requires: -- ensures: +- requires: source and target vertices are in $`\mathcal{N}`$ and not $`\mathsf{null}`$ +- ensures: + + $`E_{next} = E_{this} \setminus E_{related}`$ where + + if the edge exists, remove it from the graph and remove all edges related to it + + if $`(\texttt{source}, \texttt{target})`$ is in $`E_{this}`$, then remove $`(\texttt{source}, \texttt{target})`$ and $`(\texttt{target}, \texttt{source})`$ from $`E_{this}`$ + + Also remove all edges that are related to $`\texttt{source}`$ and $`\texttt{target}`$ from $`E_{this}`$ + + If $`T_{this}`$ satisfies the class invariant, $`T_{next}`$ also satisfies the class invariant; and + + returns true if and only if $`E_{next} \neq E_{this}`$. # Problem 2-2 @@ -203,20 +250,41 @@ For each question, explain your reasoning _using the abstract specifications tha ##### `Tree` and `Graph` -* Is `Tree` a subtype of `Graph`? - +* Is `Tree` a subtype of `Graph`? +> __Yes__, because Tree has strong specification than Graph. Tree has to satisfy the class invariant of Graph and Tree's class invariant like root node, no self-loop, and connected graph. +> Also, there is no method overriding in Tree except toRepr(). +> Therefore, Tree is a subtype of Graph. + ##### `MutableGraph` and `Graph` * Is `MutableGraph` a subtype of `Graph`? - +> __Yes__, because MutableGraph has strong specification than Graph. MutableGraph satisfies the class invariant of Graph +> Also, there is no method overriding in MutableGraph except toRepr(). +> Therefore, MutableGraph is a subtype of Graph. ##### `MutableTree` and `Tree` * Is `MutableTree` a subtype of `Tree`? - +> __Yes__, because MutableTree has strong specification than Tree. MutableTree satisfies the class invariant of Tree +> Also, there are only methods overriding of MutableGraph in MutableTree such as addVertex, removeVertex, addEdge, removeEdge. +> Therefore, MutableTree is a subtype of Tree. ##### `MutableTree` and `MutableGraph` -* Is `MutableTree` a subtype of `MutableGraph`? - +* Is `MutableTree` a subtype of `MutableGraph`? +> __No__, addVertex method for MutableTree has different result rather MutableGraph does. +> For example, if we add a vertex which is not in MutableGraph, the vertex will be added to the tree. And return value is true. +> However, we cannot add a vertex by using addVertex method in MutableGraph because of tree's invariant property. And its return value is always false by MutableTree's interface code. +> Therefore, MutableTree is not a subtype of MutableGraph. +```java +// Example code +T = MutableGraph +S = MutableTree +// for a vertex v that is not null, and not in both T and S +// T.addVertex(v) will returns true +// S.addVertex(v) will returns false +assert T.addVertex(v) == S.addVertex(v) +``` + + From f1255ff43c6125075a20f69d61a9438f54275e61 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 14:53:28 +0900 Subject: [PATCH 16/31] Test: Write black box tests --- .../homework2/AbstractMutableGraphTest.java | 135 +++++++++++ .../homework2/AbstractMutableTreeTest.java | 228 ++++++++++++++++++ 2 files changed, 363 insertions(+) diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java index 4d8eebe..668aa81 100644 --- a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java @@ -1,7 +1,10 @@ package edu.postech.csed332.homework2; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; import java.util.Set; @@ -54,5 +57,137 @@ void testFindReachableVertices() { // TODO: write black-box test cases for each method of MutableGraph with respect to // the specification, including the methods of Graph that MutableGraph extends. + @AfterEach + void tearDown() { + assertTrue(checkInv()); + } + @Test + void testAddEdge() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.containsEdge(v1, v2)); + } + @Test + void testAddDuplicateEdges() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addEdge(v1, v2)); + assertFalse(graph.addEdge(v1, v2)); + assertTrue(graph.containsEdge(v1, v2)); + } + @Test + void testRemoveEdge() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.removeEdge(v1, v2)); + assertFalse(graph.containsEdge(v1, v2)); + } + @Test + void testRemoveNonExistingEdge() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertFalse(graph.removeEdge(v1, v2)); + assertFalse(graph.containsEdge(v1, v2)); + } + @Test + void testRemoveVertex() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.removeVertex(v1)); + assertFalse(graph.containsVertex(v1)); + assertFalse(graph.containsEdge(v1, v2)); + } + @Test + void testRemoveVertexShouldRemoveRelatedEdges() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addVertex(v3)); + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.addEdge(v1, v3)); + assertTrue(graph.removeVertex(v1)); + assertFalse(graph.containsVertex(v1)); + assertFalse(graph.containsEdge(v1, v2)); + } + @Test + void testRemoveNonExistingVertex() { + assertFalse(graph.removeVertex(v3)); + assertFalse(graph.containsVertex(v3)); + } + @Test + void testContainsVertex() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.containsVertex(v1)); + } + @Test + void testContainsNonExistingVertex() { + assertFalse(graph.containsVertex(v1)); + } + @Test + void testContainsEdge() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.containsEdge(v1, v2)); + } + @Test + void testContainsNonExistingEdge() { + assertTrue(graph.addVertex(v1)); + assertFalse(graph.containsEdge(v1, v2)); + assertFalse(graph.containsEdge(v2, v3)); + } + @Test + void testGetNeighborhood() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addVertex(v3)); + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.addEdge(v1, v3)); + assertEquals(Set.of(v2, v3), graph.getNeighborhood(v1)); + } + @Test + void testGetNeighborhoodOfNonExistingVertex() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addVertex(v3)); + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.addEdge(v1, v3)); + assertEquals(Set.of(), graph.getNeighborhood(v4)); + } + @Test + void testGetVertices() { + assertEquals(Set.of(), graph.getVertices()); + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addVertex(v3)); + assertEquals(Set.of(v1, v2, v3), graph.getVertices()); + } + @Test + void testGetEdges() { + assertEquals(Set.of(), graph.getEdges()); + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addVertex(v3)); + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.addEdge(v1, v3)); + assertEquals(Set.of(new Edge<>(v1, v2), new Edge<>(v1, v3)), graph.getEdges()); + } + @Test + void testToRepr() { + assertTrue(graph.addVertex(v1)); + assertTrue(graph.addVertex(v2)); + assertTrue(graph.addVertex(v3)); + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.addEdge(v1, v3)); + assertEquals("v1 -> [v2, v3]\nv2 -> []\nv3 -> []\n", graph.toRepr()); // TODO: fix this + } + @Test + void testToReprEmpty() { + assertEquals("", graph.toRepr()); // TODO: fix this + } + + } diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java index 32e1fda..9dc044c 100644 --- a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java @@ -1,8 +1,12 @@ package edu.postech.csed332.homework2; +import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import java.util.Optional; +import java.util.Set; + import static org.junit.jupiter.api.Assertions.*; /** @@ -37,4 +41,228 @@ void testGetDepthNoVertex() { // TODO: write black-box test cases for each method of MutableTree with respect to // the specification, including the methods of Tree that MutableTree extends. + @AfterEach + void tearDown() { + assertTrue(checkInv()); + } + // Test for Graph + @Test + void testContainsVertex() { + assertFalse(tree.containsVertex(v1)); + tree.addEdge(tree.getRoot(), v1); + assertTrue(tree.containsVertex(v1)); + } + @Test + void testContainsEdge() { + assertFalse(tree.containsEdge(tree.getRoot(), v1)); + tree.addEdge(tree.getRoot(), v1); + assertTrue(tree.containsEdge(tree.getRoot(), v1)); + } + @Test + void testGetNeighborhood() { + tree.addEdge(tree.getRoot(), v1); + tree.addEdge(v1, v2); + tree.addEdge(v1, v3); + tree.addEdge(v2, v4); + assertEquals(tree.getNeighborhood(tree.getRoot()), Set.of(v1)); + assertEquals(tree.getNeighborhood(v1), Set.of(tree.getRoot(), v2, v3)); + assertEquals(tree.getNeighborhood(v2), Set.of(v1, v4)); + assertEquals(tree.getNeighborhood(v3), Set.of(v1)); + assertEquals(tree.getNeighborhood(v4), Set.of(v2)); + } + @Test + void testGetVertices() { + assertEquals(tree.getVertices(), Set.of(tree.getRoot())); + tree.addEdge(tree.getRoot(), v1); + assertEquals(tree.getVertices(), Set.of(tree.getRoot(), v1)); + tree.addEdge(v1, v2); + assertEquals(tree.getVertices(), Set.of(tree.getRoot(), v1, v2)); + tree.addEdge(v1, v3); + assertEquals(tree.getVertices(), Set.of(tree.getRoot(), v1, v2, v3)); + tree.addEdge(v2, v4); + assertEquals(tree.getVertices(), Set.of(tree.getRoot(), v1, v2, v3, v4)); + } + @Test + void testGetEdges() { + assertEquals(tree.getEdges(), Set.of()); + tree.addEdge(tree.getRoot(), v1); + assertEquals(tree.getEdges(), Set.of(new Edge<>(tree.getRoot(), v1))); + tree.addEdge(v1, v2); + assertEquals(tree.getEdges(), Set.of(new Edge<>(tree.getRoot(), v1), new Edge<>(v1, v2))); + tree.addEdge(v1, v3); + assertEquals(tree.getEdges(), Set.of(new Edge<>(tree.getRoot(), v1), new Edge<>(v1, v2), new Edge<>(v1, v3))); + tree.addEdge(v2, v4); + assertEquals(tree.getEdges(), Set.of(new Edge<>(tree.getRoot(), v1), new Edge<>(v1, v2), new Edge<>(v1, v3), new Edge<>(v2, v4))); + } + @Test + void testFindReachableVertices() { + tree.addEdge(tree.getRoot(), v1); + tree.addEdge(v1, v2); + tree.addEdge(v1, v3); + tree.addEdge(v2, v4); + assertEquals(tree.findReachableVertices(tree.getRoot()), Set.of(tree.getRoot(), v1, v2, v3, v4)); + assertEquals(tree.findReachableVertices(v1), Set.of(tree.getRoot(), v1, v2, v3, v4)); + assertEquals(tree.findReachableVertices(v2), Set.of(tree.getRoot(), v1, v2, v3, v4)); + assertEquals(tree.findReachableVertices(v3), Set.of(tree.getRoot(), v1, v2, v3, v4)); + assertEquals(tree.findReachableVertices(v4), Set.of(tree.getRoot(), v1, v2, v3, v4)); + } + @Test + void testToRepr() { + assertEquals(tree.toRepr(), "()"); + tree.addEdge(tree.getRoot(), v1); + assertEquals(tree.toRepr(), "(v1)"); // TODO: check if this is correct + } + @Test + void testGetHeight() { + assertEquals(tree.getHeight(), 0); + tree.addEdge(tree.getRoot(), v1); + assertEquals(tree.getHeight(), 1); + tree.addEdge(v1, v2); + assertEquals(tree.getHeight(), 2); + tree.addEdge(v1, v3); + assertEquals(tree.getHeight(), 2); + tree.addEdge(v2, v4); + assertEquals(tree.getHeight(), 3); + } + @Test + void testGetChildren() { + tree.addEdge(tree.getRoot(), v1); + tree.addEdge(v1, v2); + tree.addEdge(v1, v3); + tree.addEdge(v2, v4); + assertEquals(tree.getChildren(tree.getRoot()), Set.of(v1)); + assertEquals(tree.getChildren(v1), Set.of(v2, v3)); + assertEquals(tree.getChildren(v2), Set.of(v4)); + assertEquals(tree.getChildren(v3), Set.of()); + assertEquals(tree.getChildren(v4), Set.of()); + } + @Test + void testGetParent() { + tree.addEdge(tree.getRoot(), v1); + tree.addEdge(v1, v2); + tree.addEdge(v1, v3); + tree.addEdge(v2, v4); + assertEquals(tree.getParent(tree.getRoot()), Optional.empty()); + assertEquals(tree.getParent(v1), Optional.of(tree.getRoot())); + assertEquals(tree.getParent(v2), Optional.of(v1)); + assertEquals(tree.getParent(v3), Optional.of(v1)); + assertEquals(tree.getParent(v4), Optional.of(v2)); + } + @Test + void testAddVertex() { + assertTrue(tree.addVertex(v1)); + assertTrue(tree.containsVertex(v1)); + assertFalse(tree.addVertex(v1)); + assertTrue(tree.containsVertex(v1)); + } + @Test + void removeVertexShouldRemoveVertexAndItsEdge() { + tree.addEdge(tree.getRoot(), v1); + assertTrue(tree.removeVertex(v1)); + assertFalse(tree.containsVertex(v1)); + assertFalse(tree.containsEdge(tree.getRoot(), v1)); + assertFalse(tree.containsEdge(v1, tree.getRoot())); + } + @Test + void removeVertexShouldRemoveRelatedVerticesAndRelatedEdges() { + tree.addEdge(tree.getRoot(), v1); + tree.addEdge(v1, v2); + tree.addEdge(v1, v3); + tree.addEdge(v2, v4); + assertTrue(tree.removeVertex(v1)); + assertFalse(tree.containsVertex(v1)); + assertFalse(tree.containsEdge(tree.getRoot(), v1)); + assertFalse(tree.containsEdge(v1, tree.getRoot())); + assertFalse(tree.containsEdge(v1, v2)); + assertFalse(tree.containsEdge(v2, v1)); + assertFalse(tree.containsEdge(v1, v3)); + assertFalse(tree.containsEdge(v3, v1)); + assertFalse(tree.containsEdge(v2, v4)); + assertFalse(tree.containsEdge(v4, v2)); + } + @Test + void removeNonExistingVertex() { + assertFalse(tree.removeVertex(v1)); + assertFalse(tree.containsVertex(v1)); + } + @Test + void removeAlreadyRemovedVertex() { + tree.addEdge(tree.getRoot(), v1); + assertTrue(tree.removeVertex(v1)); + assertFalse(tree.removeVertex(v1)); + assertFalse(tree.containsVertex(v1)); + } + @Test + void testAddEdge() { + assertTrue(tree.addEdge(tree.getRoot(), v2)); + assertTrue(tree.containsEdge(tree.getRoot(), v2)); + } + @Test + void testAddEdgeShouldNotAddEdgeIfSourceIsNotInTree() { + assertFalse(tree.addEdge(v1, v2)); + assertFalse(tree.containsEdge(v1, v2)); + } + @Test + void testAddEdgeShouldNotAddEdgeIfTargetIsAlreadyInTree() { + tree.addEdge(tree.getRoot(), v1); + assertFalse(tree.addEdge(tree.getRoot(), v1)); + assertFalse(tree.containsEdge(tree.getRoot(), v1)); + } + @Test + void testAddEdgeShouldNotAddEdgeIfBothSourceAndTargetAreAlreadyInTree() { + tree.addEdge(tree.getRoot(), v1); + assertTrue(tree.containsEdge(tree.getRoot(), v1)); + assertFalse(tree.addEdge(tree.getRoot(), v1)); + } + @Test + void testAddEdgeShouldNotAddEdgeIfSourceIsTarget() { + assertFalse(tree.addEdge(tree.getRoot(), tree.getRoot())); + assertFalse(tree.containsEdge(tree.getRoot(), tree.getRoot())); + } + @Test + void testRemoveEdgeShouldRemoveEdgeAndChildVertex() { + tree.addEdge(tree.getRoot(), v1); + assertTrue(tree.removeEdge(tree.getRoot(), v1)); + assertFalse(tree.containsEdge(tree.getRoot(), v1)); + assertFalse(tree.containsEdge(v1, tree.getRoot())); + assertTrue(tree.containsVertex(tree.getRoot())); + assertFalse(tree.containsVertex(v1)); + } + @Test + void testRemoveEdgeShouldRemoveDescendants() { + tree.addEdge(tree.getRoot(), v1); + tree.addEdge(v1, v2); + tree.addEdge(v1, v3); + tree.addEdge(v2, v4); + assertTrue(tree.removeEdge(tree.getRoot(), v1)); + assertFalse(tree.containsEdge(tree.getRoot(), v1)); + assertFalse(tree.containsEdge(v1, tree.getRoot())); + assertFalse(tree.containsEdge(v1, v2)); + assertFalse(tree.containsEdge(v2, v1)); + assertFalse(tree.containsEdge(v1, v3)); + assertFalse(tree.containsEdge(v3, v1)); + assertFalse(tree.containsEdge(v2, v4)); + assertFalse(tree.containsEdge(v4, v2)); + assertTrue(tree.containsVertex(tree.getRoot())); + assertFalse(tree.containsVertex(v1)); + assertFalse(tree.containsVertex(v2)); + assertFalse(tree.containsVertex(v3)); + assertFalse(tree.containsVertex(v4)); + } + @Test + void testRemoveEdgeShouldNotRemoveEdgeIfSourceOrTargetIsNotInTree() { + tree.addEdge(tree.getRoot(), v1); + assertFalse(tree.removeEdge(v1, v2)); + assertFalse(tree.removeEdge(v2, v1)); + assertFalse(tree.removeEdge(v2, v3)); + } + @Test + void testRemoveEdgeShouldNotRemoveEdgeIfSourceIsNotParentOfTarget() { + tree.addEdge(tree.getRoot(), v1); + assertFalse(tree.removeEdge(v1, tree.getRoot())); + } + @Test + void testRemoveEdgeShouldNotRemoveEdgeIfSourceIsTarget() { + assertFalse(tree.removeEdge(tree.getRoot(), tree.getRoot())); + } } From 0956bb78da66566a3b6273ef4b9f56bc763c494e Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 14:59:07 +0900 Subject: [PATCH 17/31] Test: Add a test case for containsVertex for graph --- .../edu/postech/csed332/homework2/AbstractMutableGraphTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java index 668aa81..bd664af 100644 --- a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java @@ -120,6 +120,7 @@ void testRemoveNonExistingVertex() { void testContainsVertex() { assertTrue(graph.addVertex(v1)); assertTrue(graph.containsVertex(v1)); + assertFalse(graph.containsVertex(v2)); } @Test void testContainsNonExistingVertex() { From 54430162994f8b3a5cb62ae32401155612638c8f Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 16:08:36 +0900 Subject: [PATCH 18/31] Test: Modify AbstractMutableGraphTest --- .../homework2/AbstractMutableGraphTest.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java index bd664af..b0c5c18 100644 --- a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java @@ -62,11 +62,18 @@ void tearDown() { assertTrue(checkInv()); } @Test - void testAddEdge() { + void testAddEdgeShouldCreateUndirectedEdge() { assertTrue(graph.addVertex(v1)); assertTrue(graph.addVertex(v2)); assertTrue(graph.addEdge(v1, v2)); assertTrue(graph.containsEdge(v1, v2)); + assertTrue(graph.containsEdge(v2, v1)); + } + @Test + void testAddEdgeWithoutVertices() { + assertTrue(graph.addEdge(v1, v2)); + assertTrue(graph.containsEdge(v2, v1)); + assertTrue(graph.containsEdge(v1, v2)); } @Test void testAddDuplicateEdges() { @@ -99,6 +106,7 @@ void testRemoveVertex() { assertTrue(graph.removeVertex(v1)); assertFalse(graph.containsVertex(v1)); assertFalse(graph.containsEdge(v1, v2)); + assertFalse(graph.containsEdge(v2, v1)); } @Test void testRemoveVertexShouldRemoveRelatedEdges() { @@ -110,6 +118,9 @@ void testRemoveVertexShouldRemoveRelatedEdges() { assertTrue(graph.removeVertex(v1)); assertFalse(graph.containsVertex(v1)); assertFalse(graph.containsEdge(v1, v2)); + assertFalse(graph.containsEdge(v2, v1)); + assertFalse(graph.containsEdge(v1, v3)); + assertFalse(graph.containsEdge(v3, v1)); } @Test void testRemoveNonExistingVertex() { @@ -173,22 +184,10 @@ void testGetEdges() { assertTrue(graph.addVertex(v3)); assertTrue(graph.addEdge(v1, v2)); assertTrue(graph.addEdge(v1, v3)); - assertEquals(Set.of(new Edge<>(v1, v2), new Edge<>(v1, v3)), graph.getEdges()); - } - @Test - void testToRepr() { - assertTrue(graph.addVertex(v1)); - assertTrue(graph.addVertex(v2)); - assertTrue(graph.addVertex(v3)); - assertTrue(graph.addEdge(v1, v2)); - assertTrue(graph.addEdge(v1, v3)); - assertEquals("v1 -> [v2, v3]\nv2 -> []\nv3 -> []\n", graph.toRepr()); // TODO: fix this + assertEquals(Set.of(new Edge<>(v1, v2), new Edge<>(v1, v3), new Edge<>(v2, v1), new Edge<>(v3, v1)), graph.getEdges()); } @Test void testToReprEmpty() { - assertEquals("", graph.toRepr()); // TODO: fix this + assertEquals("[vertex: {}, edge: {}]", graph.toRepr()); // TODO: fix this } - - - } From db76ea5c7a72483eddda66a95bbb8b014d81bb21 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 16:09:13 +0900 Subject: [PATCH 19/31] Feat: Implement AdjacencyListGraph satisfying its tests --- .../csed332/homework2/AdjacencyListGraph.java | 59 ++++++++++++++++--- 1 file changed, 51 insertions(+), 8 deletions(-) diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java index ac6525a..5e9e606 100644 --- a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java @@ -30,43 +30,72 @@ public AdjacencyListGraph() { @Override public boolean containsVertex(@NotNull N vertex) { // TODO: implement this - return false; + return getVertices().contains(vertex); } @Override public boolean addVertex(@NotNull N vertex) { // TODO: implement this - return false; + if (containsVertex(vertex)) { + return false; + } + adjMap.put(vertex, new TreeSet<>()); + return true; } @Override public boolean removeVertex(@NotNull N vertex) { // TODO: implement this - return false; + if (!containsVertex(vertex)) { + return false; + } + adjMap.remove(vertex); + adjMap.values().forEach(set -> set.remove(vertex)); + return true; } @Override public boolean containsEdge(@NotNull N source, @NotNull N target) { // TODO: implement this - return false; + return getEdges().contains(new Edge<>(source, target)); } @Override public boolean addEdge(@NotNull N source, @NotNull N target) { // TODO: implement this - return false; + if(getEdges().contains(new Edge<>(source, target))) { + return false; + } + // Add source and target if they are not in the graph + if (!containsVertex(source)) { + addVertex(source); + } + if (!containsVertex(target)) { + addVertex(target); + } + adjMap.get(source).add(target); + adjMap.get(target).add(source); + return true; } @Override public boolean removeEdge(@NotNull N source, @NotNull N target) { // TODO: implement this - return false; + if (!containsEdge(source, target)) { + return false; + } + adjMap.get(source).remove(target); + adjMap.get(target).remove(source); + return true; } @Override public @NotNull Set getNeighborhood(@NotNull N vertex) { // TODO: implement this - return Set.of(); + if (!containsVertex(vertex)) { + return Collections.emptySet(); + } + return Collections.unmodifiableSet(adjMap.get(vertex)); } @Override @@ -88,6 +117,20 @@ public boolean removeEdge(@NotNull N source, @NotNull N target) { */ boolean checkInv() { // TODO: implement this - return false; + for(Edge edge : getEdges()) { + N source = edge.source(); + N target = edge.target(); + Set vertices = getVertices(); + if(!vertices.contains(source) || !vertices.contains(target)) { + return false; + } + if (!getNeighborhood(source).contains(target)) { + return false; + } + if (!getNeighborhood(target).contains(source)) { + return false; + } + } + return true; } } From 72f56ded3d7c0ecb18f3da4c503630bfa9f44e5e Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 16:17:15 +0900 Subject: [PATCH 20/31] Comment: Leave comment whether self-loop check is needed or not --- .../java/edu/postech/csed332/homework2/AdjacencyListGraph.java | 1 + 1 file changed, 1 insertion(+) diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java index 5e9e606..f4103b0 100644 --- a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java @@ -130,6 +130,7 @@ boolean checkInv() { if (!getNeighborhood(target).contains(source)) { return false; } + // TODO: self-loop check? } return true; } From 754eb897ba5e474213aea5ce33a6e877c090dfca Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 17:47:04 +0900 Subject: [PATCH 21/31] Feat: Add self-loop check in checkInv of AdjacencyListGraph --- .../postech/csed332/homework2/AdjacencyListGraph.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java index f4103b0..1604f0b 100644 --- a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/AdjacencyListGraph.java @@ -117,10 +117,11 @@ public boolean removeEdge(@NotNull N source, @NotNull N target) { */ boolean checkInv() { // TODO: implement this + Set vertices = getVertices(); for(Edge edge : getEdges()) { N source = edge.source(); N target = edge.target(); - Set vertices = getVertices(); + // for each edge, source and target should be in both V_this, E_this if(!vertices.contains(source) || !vertices.contains(target)) { return false; } @@ -130,7 +131,12 @@ boolean checkInv() { if (!getNeighborhood(target).contains(source)) { return false; } - // TODO: self-loop check? + } + // self-loop check + for(N vertex : vertices) { + if(getNeighborhood(vertex).contains(vertex)) { + return false; + } } return true; } From 1b828de7ae66a7fd3cc8f0dd60066802136610e6 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 17:47:52 +0900 Subject: [PATCH 22/31] Feat: Implement DelegateTree and its test --- .../csed332/homework2/DelegateTree.java | 116 ++++++++++++++++-- .../homework2/AbstractMutableTreeTest.java | 82 ++++++------- 2 files changed, 142 insertions(+), 56 deletions(-) diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java index 71cafb6..bece41f 100644 --- a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java @@ -56,75 +56,132 @@ public DelegateTree(@NotNull MutableGraph emptyGraph, @NotNull N vertex) { @Override public int getDepth(@NotNull N vertex) { // TODO: implement this - return 0; + if(!containsVertex(vertex)) { + throw new IllegalArgumentException(); + } + return depthMap.get(vertex); } @Override public int getHeight() { // TODO: implement this - return 0; + return Collections.max(depthMap.values()); } @Override public @NotNull Set getChildren(@NotNull N vertex) { // TODO: implement this - return Set.of(); + Set neighbors = getNeighborhood(vertex); + Set children = new HashSet<>(); + for(N neighbor : neighbors) { + if(depthMap.get(neighbor) == depthMap.get(vertex) + 1) { + children.add(neighbor); + } + } + return children; } @Override public @NotNull Optional getParent(@NotNull N vertex) { // TODO: implement this - return Optional.empty(); + Set neighbors = getNeighborhood(vertex); + N parent = null; + for(N neighbor : neighbors) { + if(depthMap.get(neighbor) == depthMap.get(vertex) - 1) { + parent = neighbor; + } + } + if(parent == null) { + return Optional.empty(); + } + return Optional.of(parent); } @Override public boolean containsVertex(@NotNull N vertex) { // TODO: implement this - return false; + return delegate.containsVertex(vertex); } @Override public boolean removeVertex(@NotNull N vertex) { // TODO: implement this - return false; + if(!containsVertex(vertex)) { + return false; + } + if(vertex.equals(root)) { + throw new IllegalArgumentException(); + } + Set children = getChildren(vertex); + delegate.removeVertex(vertex); + for(N child : children) { + removeVertex(child); + } + return true; } @Override public boolean containsEdge(@NotNull N source, @NotNull N target) { // TODO: implement this - return false; + return delegate.containsEdge(source, target); } @Override public boolean addEdge(@NotNull N source, @NotNull N target) { // TODO: implement this - return false; + if(!containsVertex(source) || containsVertex(target)) { + return false; + } + delegate.addEdge(source, target); + depthMap.put(target, depthMap.get(source) + 1); + return true; } @Override public boolean removeEdge(@NotNull N source, @NotNull N target) { // TODO: implement this - return false; + if(!containsVertex(source) || !containsVertex(target)) { + return false; + } + if(!containsEdge(source, target)) { + return false; + } + if(!getChildren(source).contains(target)) { + return false; + } + Set children = getChildren(target); + removeVertex(target); + for(N child : children) { + removeVertex(child); + } + return true; } @Override public @NotNull Set getNeighborhood(@NotNull N vertex) { // TODO: implement this - return Set.of(); + return delegate.getNeighborhood(vertex); } @Override public @NotNull Set getVertices() { // TODO: implement this - return Set.of(); + return delegate.getVertices(); } @Override public @NotNull Set> getEdges() { // TODO: implement this - return Set.of(); + return delegate.getEdges(); } + public int DFS(N vertex, int count) { + Set children = getChildren(vertex); + for(N child : children) { + count = DFS(child, count + 1); + } + return count; + } /** * Checks if all class invariants hold for this object * @@ -132,6 +189,39 @@ public boolean removeEdge(@NotNull N source, @NotNull N target) { */ boolean checkInv() { // TODO: implement this - return false; + // mutableGraph Invariant + Set vertices = getVertices(); + for(Edge edge : getEdges()) { + N source = edge.source(); + N target = edge.target(); + // for each edge, source and target should be in both V_this, E_this + if(!vertices.contains(source) || !vertices.contains(target)) { + return false; + } + if (!getNeighborhood(source).contains(target)) { + return false; + } + if (!getNeighborhood(target).contains(source)) { + return false; + } + } + // self-loop check + for(N vertex : vertices) { + if(getNeighborhood(vertex).contains(vertex)) { + return false; + } + } + // mutabletree Invariant + // Single root + for(N vertex : vertices) { + if(getParent(vertex).isEmpty() && !vertex.equals(root)) { + return false; + } + } + // Only one path from the root to any other vertex + if(DFS(root, 1) < vertices.size()) { + return false; + } + return true; } } diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java index 9dc044c..3c0c018 100644 --- a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java @@ -64,35 +64,31 @@ void testGetNeighborhood() { tree.addEdge(v1, v2); tree.addEdge(v1, v3); tree.addEdge(v2, v4); - assertEquals(tree.getNeighborhood(tree.getRoot()), Set.of(v1)); - assertEquals(tree.getNeighborhood(v1), Set.of(tree.getRoot(), v2, v3)); - assertEquals(tree.getNeighborhood(v2), Set.of(v1, v4)); - assertEquals(tree.getNeighborhood(v3), Set.of(v1)); - assertEquals(tree.getNeighborhood(v4), Set.of(v2)); + assertEquals(Set.of(v1), tree.getNeighborhood(tree.getRoot())); + assertEquals(Set.of(tree.getRoot(), v2, v3), tree.getNeighborhood(v1)); + assertEquals(Set.of(v1, v4), tree.getNeighborhood(v2)); + assertEquals(Set.of(v1), tree.getNeighborhood(v3)); + assertEquals(Set.of(v2), tree.getNeighborhood(v4)); } @Test void testGetVertices() { - assertEquals(tree.getVertices(), Set.of(tree.getRoot())); + assertEquals(Set.of(tree.getRoot()), tree.getVertices()); tree.addEdge(tree.getRoot(), v1); - assertEquals(tree.getVertices(), Set.of(tree.getRoot(), v1)); + assertEquals(Set.of(tree.getRoot(), v1), tree.getVertices()); tree.addEdge(v1, v2); - assertEquals(tree.getVertices(), Set.of(tree.getRoot(), v1, v2)); + assertEquals(Set.of(tree.getRoot(), v1, v2), tree.getVertices()); tree.addEdge(v1, v3); - assertEquals(tree.getVertices(), Set.of(tree.getRoot(), v1, v2, v3)); + assertEquals(Set.of(tree.getRoot(), v1, v2, v3), tree.getVertices()); tree.addEdge(v2, v4); - assertEquals(tree.getVertices(), Set.of(tree.getRoot(), v1, v2, v3, v4)); + assertEquals(Set.of(tree.getRoot(), v1, v2, v3, v4), tree.getVertices()); } @Test void testGetEdges() { - assertEquals(tree.getEdges(), Set.of()); + assertEquals(Set.of(), tree.getEdges()); tree.addEdge(tree.getRoot(), v1); - assertEquals(tree.getEdges(), Set.of(new Edge<>(tree.getRoot(), v1))); + assertEquals(Set.of(new Edge<>(tree.getRoot(), v1), new Edge<>(v1, tree.getRoot())), tree.getEdges()); tree.addEdge(v1, v2); - assertEquals(tree.getEdges(), Set.of(new Edge<>(tree.getRoot(), v1), new Edge<>(v1, v2))); - tree.addEdge(v1, v3); - assertEquals(tree.getEdges(), Set.of(new Edge<>(tree.getRoot(), v1), new Edge<>(v1, v2), new Edge<>(v1, v3))); - tree.addEdge(v2, v4); - assertEquals(tree.getEdges(), Set.of(new Edge<>(tree.getRoot(), v1), new Edge<>(v1, v2), new Edge<>(v1, v3), new Edge<>(v2, v4))); + assertEquals(Set.of(new Edge<>(tree.getRoot(), v1), new Edge<>(v1, v2), new Edge<>(v2, v1), new Edge<>(v1, tree.getRoot())), tree.getEdges()); } @Test void testFindReachableVertices() { @@ -100,29 +96,28 @@ void testFindReachableVertices() { tree.addEdge(v1, v2); tree.addEdge(v1, v3); tree.addEdge(v2, v4); - assertEquals(tree.findReachableVertices(tree.getRoot()), Set.of(tree.getRoot(), v1, v2, v3, v4)); - assertEquals(tree.findReachableVertices(v1), Set.of(tree.getRoot(), v1, v2, v3, v4)); - assertEquals(tree.findReachableVertices(v2), Set.of(tree.getRoot(), v1, v2, v3, v4)); - assertEquals(tree.findReachableVertices(v3), Set.of(tree.getRoot(), v1, v2, v3, v4)); - assertEquals(tree.findReachableVertices(v4), Set.of(tree.getRoot(), v1, v2, v3, v4)); + assertEquals(Set.of(tree.getRoot(), v1, v2, v3, v4), tree.findReachableVertices(tree.getRoot())); + assertEquals(Set.of(tree.getRoot(), v1, v2, v3, v4), tree.findReachableVertices(v1)); + assertEquals(Set.of(tree.getRoot(), v1, v2, v3, v4), tree.findReachableVertices(v2)); + assertEquals(Set.of(tree.getRoot(), v1, v2, v3, v4), tree.findReachableVertices(v3)); + assertEquals(Set.of(tree.getRoot(), v1, v2, v3, v4), tree.findReachableVertices(v4)); } @Test void testToRepr() { - assertEquals(tree.toRepr(), "()"); + assertEquals("[root: 0, vertex: {0}, edge: {}]", tree.toRepr()); tree.addEdge(tree.getRoot(), v1); - assertEquals(tree.toRepr(), "(v1)"); // TODO: check if this is correct } @Test void testGetHeight() { - assertEquals(tree.getHeight(), 0); + assertEquals(0, tree.getHeight()); tree.addEdge(tree.getRoot(), v1); - assertEquals(tree.getHeight(), 1); + assertEquals(1, tree.getHeight()); tree.addEdge(v1, v2); - assertEquals(tree.getHeight(), 2); + assertEquals(2, tree.getHeight()); tree.addEdge(v1, v3); - assertEquals(tree.getHeight(), 2); + assertEquals(2, tree.getHeight()); tree.addEdge(v2, v4); - assertEquals(tree.getHeight(), 3); + assertEquals(3, tree.getHeight()); } @Test void testGetChildren() { @@ -130,11 +125,11 @@ void testGetChildren() { tree.addEdge(v1, v2); tree.addEdge(v1, v3); tree.addEdge(v2, v4); - assertEquals(tree.getChildren(tree.getRoot()), Set.of(v1)); - assertEquals(tree.getChildren(v1), Set.of(v2, v3)); - assertEquals(tree.getChildren(v2), Set.of(v4)); - assertEquals(tree.getChildren(v3), Set.of()); - assertEquals(tree.getChildren(v4), Set.of()); + assertEquals(Set.of(v1), tree.getChildren(tree.getRoot())); + assertEquals(Set.of(v2, v3), tree.getChildren(v1)); + assertEquals(Set.of(v4), tree.getChildren(v2)); + assertEquals(Set.of(), tree.getChildren(v3)); + assertEquals(Set.of(), tree.getChildren(v4)); } @Test void testGetParent() { @@ -142,18 +137,15 @@ void testGetParent() { tree.addEdge(v1, v2); tree.addEdge(v1, v3); tree.addEdge(v2, v4); - assertEquals(tree.getParent(tree.getRoot()), Optional.empty()); - assertEquals(tree.getParent(v1), Optional.of(tree.getRoot())); - assertEquals(tree.getParent(v2), Optional.of(v1)); - assertEquals(tree.getParent(v3), Optional.of(v1)); - assertEquals(tree.getParent(v4), Optional.of(v2)); + assertEquals(Optional.empty(), tree.getParent(tree.getRoot())); + assertEquals(Optional.of(tree.getRoot()), tree.getParent(v1)); + assertEquals(Optional.of(v1), tree.getParent(v2)); + assertEquals(Optional.of(v1), tree.getParent(v3)); + assertEquals(Optional.of(v2), tree.getParent(v4)); } @Test void testAddVertex() { - assertTrue(tree.addVertex(v1)); - assertTrue(tree.containsVertex(v1)); assertFalse(tree.addVertex(v1)); - assertTrue(tree.containsVertex(v1)); } @Test void removeVertexShouldRemoveVertexAndItsEdge() { @@ -193,6 +185,10 @@ void removeAlreadyRemovedVertex() { assertFalse(tree.containsVertex(v1)); } @Test + void removeRoot() { + assertThrows(IllegalArgumentException.class, () -> tree.removeVertex(tree.getRoot())); + } + @Test void testAddEdge() { assertTrue(tree.addEdge(tree.getRoot(), v2)); assertTrue(tree.containsEdge(tree.getRoot(), v2)); @@ -206,7 +202,7 @@ void testAddEdgeShouldNotAddEdgeIfSourceIsNotInTree() { void testAddEdgeShouldNotAddEdgeIfTargetIsAlreadyInTree() { tree.addEdge(tree.getRoot(), v1); assertFalse(tree.addEdge(tree.getRoot(), v1)); - assertFalse(tree.containsEdge(tree.getRoot(), v1)); + assertTrue(tree.containsEdge(tree.getRoot(), v1)); } @Test void testAddEdgeShouldNotAddEdgeIfBothSourceAndTargetAreAlreadyInTree() { From 3ed2a45e3e302bd1d38dabaed16ab982f9bdd138 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 17:52:09 +0900 Subject: [PATCH 23/31] Feat: Change if statement of DFS --- .../main/java/edu/postech/csed332/homework2/DelegateTree.java | 2 +- .../edu/postech/csed332/homework2/AbstractMutableTreeTest.java | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java index bece41f..6518769 100644 --- a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java @@ -219,7 +219,7 @@ boolean checkInv() { } } // Only one path from the root to any other vertex - if(DFS(root, 1) < vertices.size()) { + if(DFS(root, 1) != vertices.size()) { return false; } return true; diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java index 3c0c018..a102fcc 100644 --- a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java @@ -102,6 +102,7 @@ void testFindReachableVertices() { assertEquals(Set.of(tree.getRoot(), v1, v2, v3, v4), tree.findReachableVertices(v3)); assertEquals(Set.of(tree.getRoot(), v1, v2, v3, v4), tree.findReachableVertices(v4)); } + // Test for Tree @Test void testToRepr() { assertEquals("[root: 0, vertex: {0}, edge: {}]", tree.toRepr()); @@ -143,6 +144,7 @@ void testGetParent() { assertEquals(Optional.of(v1), tree.getParent(v3)); assertEquals(Optional.of(v2), tree.getParent(v4)); } + // Test for mutableTree @Test void testAddVertex() { assertFalse(tree.addVertex(v1)); From bcc002bb9e6883d957041b49b3d840e15551e6b3 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 18:57:53 +0900 Subject: [PATCH 24/31] Feat: Change checkInv method to reachableVertices from using DFS --- .../postech/csed332/homework2/DelegateTree.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java index 6518769..0f81b02 100644 --- a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/DelegateTree.java @@ -175,13 +175,6 @@ public boolean removeEdge(@NotNull N source, @NotNull N target) { return delegate.getEdges(); } - public int DFS(N vertex, int count) { - Set children = getChildren(vertex); - for(N child : children) { - count = DFS(child, count + 1); - } - return count; - } /** * Checks if all class invariants hold for this object * @@ -219,8 +212,11 @@ boolean checkInv() { } } // Only one path from the root to any other vertex - if(DFS(root, 1) != vertices.size()) { - return false; + Set reachableVertices = findReachableVertices(root); + for(N vertex : vertices) { + if(!reachableVertices.contains(vertex)) { + return false; + } } return true; } From 1572a1ab8969e9016ae217fe82635aadc53eeb7c Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 18:58:37 +0900 Subject: [PATCH 25/31] Feat: Implement ParentPointerTree satisfying its tests --- .../csed332/homework2/ParentPointerTree.java | 130 +++++++++++++++--- .../homework2/AbstractMutableTreeTest.java | 5 - 2 files changed, 113 insertions(+), 22 deletions(-) diff --git a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/ParentPointerTree.java b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/ParentPointerTree.java index 39e778c..d58962a 100644 --- a/hw2-problem2/src/main/java/edu/postech/csed332/homework2/ParentPointerTree.java +++ b/hw2-problem2/src/main/java/edu/postech/csed332/homework2/ParentPointerTree.java @@ -3,10 +3,7 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import java.util.Optional; -import java.util.Set; -import java.util.SortedMap; -import java.util.TreeMap; +import java.util.*; /** * An implementation of Tree, where each vertex has a reference to its parent node but @@ -51,73 +48,136 @@ public ParentPointerTree(@NotNull N vertex) { @Override public int getDepth(@NotNull N vertex) { // TODO: implement this - return 0; + if(!containsVertex(vertex)) { + throw new IllegalArgumentException(); + } + return nodeMap.get(vertex).depth; } @Override public int getHeight() { // TODO: implement this - return 0; + int height = 0; + for(N vertex: getVertices()) { + height = Math.max(height, getDepth(vertex)); + } + return height; } @Override public @NotNull Set getChildren(@NotNull N vertex) { // TODO: implement this - return Set.of(); + Set children = new HashSet<>(); + for(N child: getVertices()) { + if(getParent(child).isPresent() && getParent(child).get().equals(vertex)) { + children.add(child); + } + } + return children; } @Override public @NotNull Optional getParent(@NotNull N vertex) { // TODO: implement this - return Optional.empty(); + if(nodeMap.get(vertex).parent == null) { + return Optional.empty(); + } + return Optional.of(nodeMap.get(vertex).parent); } @Override public boolean containsVertex(@NotNull N vertex) { // TODO: implement this - return false; + return nodeMap.containsKey(vertex); } @Override public boolean removeVertex(@NotNull N vertex) { // TODO: implement this - return false; + if(!containsVertex(vertex)) { + return false; + } + if(vertex.equals(root)) { + throw new IllegalArgumentException(); + } + Set children = getChildren(vertex); + nodeMap.remove(vertex); + for(N child: children) { + removeVertex(child); + } + return true; } @Override public boolean containsEdge(@NotNull N source, @NotNull N target) { // TODO: implement this - return false; + return getEdges().contains(new Edge<>(source, target)); } @Override public boolean addEdge(@NotNull N source, @NotNull N target) { // TODO: implement this - return false; + if(!containsVertex(source) || containsVertex(target)) { + return false; + } + nodeMap.put(target, new Node<>(source, nodeMap.get(source).depth + 1)); + return true; } @Override public boolean removeEdge(@NotNull N source, @NotNull N target) { // TODO: implement this - return false; + if(!containsVertex(source) || !containsVertex(target)) { + return false; + } + if(!containsEdge(source, target)) { + return false; + } + if(nodeMap.get(target).parent != source) { + return false; + } + Set children = getChildren(target); + nodeMap.remove(target); + for(N child: children) { + removeVertex(child); + } + return true; } @Override public @NotNull Set getNeighborhood(@NotNull N vertex) { // TODO: implement this - return Set.of(); + Set neighbors = new HashSet<>(); + // Include parent + if (getParent(vertex).isPresent()) { + neighbors.add(getParent(vertex).get()); + } + // Include children + Set children = getChildren(vertex); + if(!children.isEmpty()) { + neighbors.addAll(children); + } + return neighbors; } @Override public @NotNull Set getVertices() { // TODO: implement this - return Set.of(); + return nodeMap.keySet(); } @Override public @NotNull Set> getEdges() { // TODO: implement this - return Set.of(); + Set> edges = new HashSet<>(); + for(N vertex: getVertices()) { + if(getParent(vertex).isPresent()) { + N parent = getParent(vertex).get(); + edges.add(new Edge<>(parent, vertex)); + edges.add(new Edge<>(vertex, parent)); + } + } + return edges; } /** @@ -127,7 +187,43 @@ public boolean removeEdge(@NotNull N source, @NotNull N target) { */ boolean checkInv() { // TODO: implement this - return false; + // mutableGraph Invariant + Set vertices = getVertices(); + for(Edge edge : getEdges()) { + N source = edge.source(); + N target = edge.target(); + // for each edge, source and target should be in both V_this, E_this + if(!vertices.contains(source) || !vertices.contains(target)) { + return false; + } + if (!getNeighborhood(source).contains(target)) { + return false; + } + if (!getNeighborhood(target).contains(source)) { + return false; + } + } + // self-loop check + for(N vertex : vertices) { + if(getNeighborhood(vertex).contains(vertex)) { + return false; + } + } + // mutabletree Invariant + // Single root + for(N vertex : vertices) { + if(getParent(vertex).isEmpty() && !vertex.equals(root)) { + return false; + } + } + // Only one path from the root to any other vertex + Set reachableVertices = findReachableVertices(root); + for(N vertex : vertices) { + if(!reachableVertices.contains(vertex)) { + return false; + } + } + return true; } } diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java index a102fcc..b4575ca 100644 --- a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableTreeTest.java @@ -104,11 +104,6 @@ void testFindReachableVertices() { } // Test for Tree @Test - void testToRepr() { - assertEquals("[root: 0, vertex: {0}, edge: {}]", tree.toRepr()); - tree.addEdge(tree.getRoot(), v1); - } - @Test void testGetHeight() { assertEquals(0, tree.getHeight()); tree.addEdge(tree.getRoot(), v1); From 165ba6c026592cca2c3f46c51589b7ae5be1b4c6 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 19:10:44 +0900 Subject: [PATCH 26/31] Docs: Modify hw2-problem.md --- hw2-problem2.md | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/hw2-problem2.md b/hw2-problem2.md index 114eee8..eeb9bc2 100644 --- a/hw2-problem2.md +++ b/hw2-problem2.md @@ -18,6 +18,7 @@ Let $`G_{this} = (V_{this}, E_{this})`$ be an abstract value of the current grap ```math \forall (v, w) \in E_{this}.\ v, w \in V_{this} \land (w, v) \in E_{this} ``` +The graph should not contain self-loops ##### containsVertex @@ -56,11 +57,11 @@ Let $`T_{this} = (V_{this}, E_{this}, \hat{v}_{this})`$ be an abstract value of ##### Class invariant ```math -\forall (v, w) \in E_{this}.\ v, w \in V_{this} \land (w, v) \in E_{this} -for all pairs of vertices (v, w) in V_{this}, there exists a sequence of edges in E_{this} that connects vertex v to vertex w. -There must be a single root node in the tree -The tree should not contain self-loops +\forall (v, w) \in E_{this}.\ v, w \in V_{this} \land (w, v) \in E_{this} ``` +For all vertices v in V_this, there exists only one path from root to v. +There must be a single root node in the tree. +The tree should not contain self-loops. ##### getDepth @@ -68,7 +69,7 @@ The tree should not contain self-loops int getDepth(N vertex); ``` -- requires: +- requires: + vertex is in $`\mathcal{N}`$ and not $`\mathsf{null}`$. - ensures: + returns 0 if vertex is getRoot(); and @@ -155,7 +156,7 @@ boolean addEdge(N source, N target); - requires: source and target vertices are in $`\mathcal{N}`$ and not $`\mathsf{null}`$ - ensures: + $`V_{next} = V_{this} \cup \{\texttt{source}, \texttt{target}\}`$ if source and target are not in the graph, put them in the graph - + $`E_{next} = E_{this} \cup \{(\texttt{source}, \texttt{target})\}`$ if the edge does not already exist, add it to the graph + + $`E_{next} = E_{this} \cup \{(\texttt{source}, \texttt{target}), (\texttt{target}, \texttt{source})\}`$ if the edge does not already exist, add it to the graph + If $`G_{this}`$ satisfies the class invariant, $`G_{next}`$ also satisfies the class invariant; and + returns true if and only if $`E_{next} \neq E_{this}`$. @@ -181,10 +182,10 @@ and $`T_{next} = (V_{next}, E_{next}, \hat{v}_{next})`$ be an abstract value of ```math \forall (v, w) \in E_{this}.\ v, w \in V_{this} \land (w, v) \in E_{this} -for all pairs of vertices (v, w) in V_{this}, there exists a sequence of edges in E_{this} that connects vertex v to vertex w. -There must be a single root node in the tree -The tree should not contain self-loops ``` +For all pairs of vertices (v, w) in V_{this}, there exists a sequence of edges in E_{this} that connects vertex v to vertex w. +There must be a single root node in the tree. +The tree should not contain self-loops. ##### addVertex From 1ba4d06e27610b9140750f8876d24e4ce6f83174 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 22:25:43 +0900 Subject: [PATCH 27/31] Feat: Modify test case --- .../postech/csed332/homework2/Conjunction.java | 15 +++++++++++++++ .../postech/csed332/homework2/Disjunction.java | 10 ++++++++++ .../edu/postech/csed332/homework2/ExpTest.java | 3 ++- 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java index ca88bca..8fa97f4 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java @@ -49,12 +49,27 @@ public Exp simplify() { return firstExp.simplify(); } } + if (firstExp instanceof Constant) { + // false && exp => false + if (!((Constant) firstExp).value()) { + return new Constant(false); + } + // true && exp => exp + else { + return secondExp; + } + } // exp && ! exp => false if (secondExp instanceof Negation) { if (firstExp.toPrettyString().equals(((Negation) secondExp).subExp().toPrettyString())) { return new Constant(false); } } + if (firstExp instanceof Negation) { + if (secondExp.toPrettyString().equals(((Negation) firstExp).subExp().toPrettyString())) { + return new Constant(false); + } + } // exp1 && (exp1 || exp2) => exp1 if (secondExp instanceof Disjunction) { for(Exp exp: ((Disjunction) secondExp).subExps()){ diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java index 71774a9..30ff2b7 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Disjunction.java @@ -51,6 +51,16 @@ public Exp simplify() { return secondExp.simplify(); } } + if (firstExp instanceof Constant) { + // false || exp => exp + if (!((Constant) firstExp).value()) { + return secondExp.simplify(); + } + // true || exp => true + else { + return firstExp.simplify(); + } + } // exp || ! exp => true if (secondExp instanceof Negation) { if (firstExp.toPrettyString().equals(((Negation) secondExp).subExp().toPrettyString())) { diff --git a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java index 13deb75..73747d3 100644 --- a/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java +++ b/hw2-problem1/src/test/java/edu/postech/csed332/homework2/ExpTest.java @@ -122,7 +122,8 @@ void testNegationEvaluate() { @CsvSource({"(p1 && true), p1", "(p1 && p1), p1", "(p1 && false), false", "(p1 && ! p1), false", "(p1 && (p1 || p2)), p1", "(p1 && p2), (p1 && p2)", "(p1 && (p2 && (p2 || p3))), (p1 && p2)", - "((p1 && true) && p2), (p1 && p2)", "((p1 && p1) && p2), (p1 && p2)" + "((p1 && true) && p2), (p1 && p2)", "((p1 && p1) && p2), (p1 && p2)", + "(p1 || true) && ! (p2 && ! p3), ((! p2) || p3)" }) void testConjunctionSimplify(String input, String expected) { Exp exp = ExpParser.parse(input); From 433b7e18ab131eef29af1eecf2cf00f6d0bcbffe Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 23:20:44 +0900 Subject: [PATCH 28/31] Docs: Update hw2-problem2.md, jacoco.csv files --- hw2-problem2.md | 29 +++++++++++++++++++++-------- jacoco1.csv | 12 ++++++------ jacoco2.csv | 9 +++++++++ 3 files changed, 36 insertions(+), 14 deletions(-) create mode 100644 jacoco2.csv diff --git a/hw2-problem2.md b/hw2-problem2.md index eeb9bc2..68b4153 100644 --- a/hw2-problem2.md +++ b/hw2-problem2.md @@ -260,17 +260,29 @@ For each question, explain your reasoning _using the abstract specifications tha ##### `MutableGraph` and `Graph` * Is `MutableGraph` a subtype of `Graph`? -> __Yes__, because MutableGraph has strong specification than Graph. MutableGraph satisfies the class invariant of Graph -> Also, there is no method overriding in MutableGraph except toRepr(). -> Therefore, MutableGraph is a subtype of Graph. - +> __No__, Although MutableGraph has strong specification than Graph, and MutableGraph satisfies the class invariant of Graph, mutableGraph has methods such as addVertex, removeVertex, addEdge, removeEdge which can change member variable of Graph. +> Therefore, MutableTree tris to change a member variable of Graph. MutableGraph is not a subtype of Graph. +```java +Graph graph = new mutableGraph(args); +doSomething(graph); // such as addVertex, removeVertex, addEdge, removeEdge +if (graph.equals(new Graph(args))) + System.out.println("MutableGraph is a subtype of Graph"); +else + System.out.println("MutableGraph is not a subtype of Graph"); +``` ##### `MutableTree` and `Tree` * Is `MutableTree` a subtype of `Tree`? -> __Yes__, because MutableTree has strong specification than Tree. MutableTree satisfies the class invariant of Tree -> Also, there are only methods overriding of MutableGraph in MutableTree such as addVertex, removeVertex, addEdge, removeEdge. -> Therefore, MutableTree is a subtype of Tree. - +> __No__, Although MutableTree has strong specification than Tree, and satisfies the class invariant of Tree, there are also methods such as addVertex, removeVertex, addEdge, removeEdge which can change member variable of Tree. +> Therefore, MutableTree tris to change a member variable of Tree. MutableTree is not a subtype of Tree. +```java +Tree tree = new mutableTree(args); +doSomething(tree); // such as addVertex, removeVertex, addEdge, removeEdge +if (tree.equals(new Tree(args))) + System.out.println("MutableTree is a subtype of Tree"); +else + System.out.println("MutableTree is not a subtype of Tree"); +``` ##### `MutableTree` and `MutableGraph` * Is `MutableTree` a subtype of `MutableGraph`? @@ -285,6 +297,7 @@ S = MutableTree // for a vertex v that is not null, and not in both T and S // T.addVertex(v) will returns true // S.addVertex(v) will returns false +// Postcondition is different assert T.addVertex(v) == S.addVertex(v) ``` diff --git a/jacoco1.csv b/jacoco1.csv index fc3fc27..7e5fa45 100644 --- a/jacoco1.csv +++ b/jacoco1.csv @@ -1,7 +1,7 @@ GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.ParenExpContext,36,14,5,1,8,2,8,2,5,2 hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpLexer,16,233,0,8,8,27,8,9,8,5 -hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser,81,523,16,23,17,108,19,18,6,9 +hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser,78,526,14,25,17,108,18,19,6,9 hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.UnaryExpContext,31,14,5,1,7,2,7,2,4,2 hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpBaseListener,17,0,0,0,15,0,15,0,15,0 hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.VariableContext,25,14,5,1,6,2,6,2,3,2 @@ -9,11 +9,11 @@ hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.ExpressionCon hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.BinaryExpContext,40,14,5,1,9,2,9,2,6,2 hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpBaseVisitor,20,3,0,0,5,1,5,1,5,1 hw2-problem1,edu.postech.csed332.homework2.parser,BooleanExpParser.ConstantContext,30,14,5,1,7,2,7,2,4,2 -hw2-problem1,edu.postech.csed332.homework2,Constant,6,10,0,0,3,2,3,2,3,2 -hw2-problem1,edu.postech.csed332.homework2,Negation,6,11,0,0,3,2,3,2,3,2 -hw2-problem1,edu.postech.csed332.homework2,Variable,9,17,1,1,3,5,3,3,2,3 -hw2-problem1,edu.postech.csed332.homework2,Disjunction,6,17,0,0,3,3,3,2,3,2 +hw2-problem1,edu.postech.csed332.homework2,Constant,0,18,0,0,0,5,0,5,0,5 +hw2-problem1,edu.postech.csed332.homework2,Negation,0,129,0,12,0,18,0,11,0,5 +hw2-problem1,edu.postech.csed332.homework2,Variable,0,31,0,2,0,8,0,6,0,5 +hw2-problem1,edu.postech.csed332.homework2,Disjunction,10,152,4,20,3,30,3,15,0,6 hw2-problem1,edu.postech.csed332.homework2,ExpParser.new BaseErrorListener() {...},0,11,0,0,0,2,0,2,0,2 hw2-problem1,edu.postech.csed332.homework2,ExpParser.new BooleanExpBaseVisitor() {...},4,85,1,2,1,8,1,7,0,6 hw2-problem1,edu.postech.csed332.homework2,ExpParser,3,32,0,0,1,7,1,2,1,2 -hw2-problem1,edu.postech.csed332.homework2,Conjunction,4,30,0,0,2,6,2,4,2,4 +hw2-problem1,edu.postech.csed332.homework2,Conjunction,10,171,3,25,2,34,3,17,0,6 diff --git a/jacoco2.csv b/jacoco2.csv new file mode 100644 index 0000000..7fac865 --- /dev/null +++ b/jacoco2.csv @@ -0,0 +1,9 @@ +GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED +hw2-problem2,edu.postech.csed332.homework2,DelegateTree,16,386,8,50,7,80,8,36,0,15 +hw2-problem2,edu.postech.csed332.homework2,Edge,24,9,2,0,3,1,3,1,2,1 +hw2-problem2,edu.postech.csed332.homework2,MutableTree,0,2,0,0,0,1,0,1,0,1 +hw2-problem2,edu.postech.csed332.homework2,Graph,0,80,0,6,0,14,0,7,0,4 +hw2-problem2,edu.postech.csed332.homework2,ParentPointerTree.Node,0,9,0,0,0,1,0,1,0,1 +hw2-problem2,edu.postech.csed332.homework2,Tree,32,0,0,0,4,0,1,0,1,0 +hw2-problem2,edu.postech.csed332.homework2,AdjacencyListGraph,8,236,5,23,4,47,5,23,0,14 +hw2-problem2,edu.postech.csed332.homework2,ParentPointerTree,12,432,7,57,6,86,7,40,0,15 From e7eda18352a834f663cfe91c5282244855d6a30c Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 23:31:55 +0900 Subject: [PATCH 29/31] Feat: Modify Conjunction simplify --- .../main/java/edu/postech/csed332/homework2/Conjunction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java index 8fa97f4..c16058a 100644 --- a/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java +++ b/hw2-problem1/src/main/java/edu/postech/csed332/homework2/Conjunction.java @@ -56,7 +56,7 @@ public Exp simplify() { } // true && exp => exp else { - return secondExp; + return secondExp.simplify(); } } // exp && ! exp => false From e5df6237c67783cd1ada2cc687f406b8cbc1dec1 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 23:39:52 +0900 Subject: [PATCH 30/31] Test: Modify test --- .../postech/csed332/homework2/AbstractMutableGraphTest.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java index b0c5c18..7f68062 100644 --- a/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java +++ b/hw2-problem2/src/test/java/edu/postech/csed332/homework2/AbstractMutableGraphTest.java @@ -186,8 +186,4 @@ void testGetEdges() { assertTrue(graph.addEdge(v1, v3)); assertEquals(Set.of(new Edge<>(v1, v2), new Edge<>(v1, v3), new Edge<>(v2, v1), new Edge<>(v3, v1)), graph.getEdges()); } - @Test - void testToReprEmpty() { - assertEquals("[vertex: {}, edge: {}]", graph.toRepr()); // TODO: fix this - } } From 755089c0a675b07d9ef3b01c06c688a05c4d5cf8 Mon Sep 17 00:00:00 2001 From: Gwanho Date: Fri, 6 Oct 2023 23:41:16 +0900 Subject: [PATCH 31/31] Docs: Reupload jacoco2.csv --- jacoco2.csv | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/jacoco2.csv b/jacoco2.csv index 7fac865..4c6e90b 100644 --- a/jacoco2.csv +++ b/jacoco2.csv @@ -2,7 +2,7 @@ GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_ hw2-problem2,edu.postech.csed332.homework2,DelegateTree,16,386,8,50,7,80,8,36,0,15 hw2-problem2,edu.postech.csed332.homework2,Edge,24,9,2,0,3,1,3,1,2,1 hw2-problem2,edu.postech.csed332.homework2,MutableTree,0,2,0,0,0,1,0,1,0,1 -hw2-problem2,edu.postech.csed332.homework2,Graph,0,80,0,6,0,14,0,7,0,4 +hw2-problem2,edu.postech.csed332.homework2,Graph,27,53,0,6,3,11,1,6,1,3 hw2-problem2,edu.postech.csed332.homework2,ParentPointerTree.Node,0,9,0,0,0,1,0,1,0,1 hw2-problem2,edu.postech.csed332.homework2,Tree,32,0,0,0,4,0,1,0,1,0 hw2-problem2,edu.postech.csed332.homework2,AdjacencyListGraph,8,236,5,23,4,47,5,23,0,14