From 3718f6677492e9a0f53c0b57eadf117efa6f6b4b Mon Sep 17 00:00:00 2001 From: Haruaki Tamada Date: Tue, 14 Sep 2021 11:53:20 +0900 Subject: [PATCH 1/2] fix #117 --- README.md | 4 +- bin/update_version.sh | 2 +- .../birthmarks/comparators/Threshold.java | 4 +- .../comparators/ComparisonTest.java | 104 +++++++++++++----- .../comparators/SimilarityTest.java | 22 ++-- 5 files changed, 97 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index 150ed88b..ebd964dc 100644 --- a/README.md +++ b/README.md @@ -84,8 +84,8 @@ Container images of **pochi** for Docker are: * [`ghcr.io/tamada/pochi`](https://github.com/users/tamada/packages/container/package/pochi) * `2.5.1`, `latest` - * `2.5.0` - * `2.4.6` + * `2.5.0` + * `2.4.6` * `2.4.0` * `2.3.24` * `2.3.23` diff --git a/bin/update_version.sh b/bin/update_version.sh index 5db3e575..93d7ec19 100755 --- a/bin/update_version.sh +++ b/bin/update_version.sh @@ -24,7 +24,7 @@ for i in README.md site/content/_index.md site/content/description.md ; do done for i in README.md site/content/description.md ; do - sed "s/ \* \`\([0-9.]*\)\`, \`latest\`/ * \`${VERSION}\`, \`latest\`\n * \`\1\`/g" $i > a ; mv a "$i" + sed "s/ \* \`\([0-9.]*\)\`, \`latest\`/ * \`${VERSION}\`, \`latest\`\n * \`\1\`/g" $i > a ; mv a "$i" done for i in README.md site/content/install.md ; do diff --git a/pochi-api/src/main/java/jp/cafebabe/birthmarks/comparators/Threshold.java b/pochi-api/src/main/java/jp/cafebabe/birthmarks/comparators/Threshold.java index e28baa67..76d0b1aa 100644 --- a/pochi-api/src/main/java/jp/cafebabe/birthmarks/comparators/Threshold.java +++ b/pochi-api/src/main/java/jp/cafebabe/birthmarks/comparators/Threshold.java @@ -14,7 +14,7 @@ public Threshold(double threshold){ } public boolean isStolen(Similarity similarity){ - return similarity.value >= (1 - value); + return similarity.value >= value; } public boolean isInconclusive(Similarity similarity){ @@ -23,7 +23,7 @@ public boolean isInconclusive(Similarity similarity){ } public boolean isInnocent(Similarity similarity){ - return similarity.value <= value; + return similarity.value <= (1 - value); } @Override diff --git a/pochi-api/src/test/java/jp/cafebabe/birthmarks/comparators/ComparisonTest.java b/pochi-api/src/test/java/jp/cafebabe/birthmarks/comparators/ComparisonTest.java index e9718b12..b1d8b850 100644 --- a/pochi-api/src/test/java/jp/cafebabe/birthmarks/comparators/ComparisonTest.java +++ b/pochi-api/src/test/java/jp/cafebabe/birthmarks/comparators/ComparisonTest.java @@ -48,50 +48,104 @@ public void testToString() { assertThat(comparison.toString(), is("className1,className2,0.75")); } - + @Test - public void testThreshold() { - Comparison comparison1 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.75)); - Comparison comparison2 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.5)); - Comparison comparison3 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.15)); + public void testThresholdCase0() { + Comparison comparison = new Comparison<>(birthmark1, birthmark2, new Similarity(0.6)); + Threshold threshold = new Threshold(0.75); + assertThat(comparison.isStolen(threshold), is(false)); + assertThat(comparison.isInconclusive(threshold), is(true)); + assertThat(comparison.isInnocent(threshold), is(false)); + } + + @Test + public void testThresholdCase1() { + Comparison comparison1 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.75)); Threshold threshold1 = new Threshold(0.3); + assertThat(comparison1.isStolen(threshold1), is(true)); assertThat(comparison1.isInconclusive(threshold1), is(false)); assertThat(comparison1.isInnocent(threshold1), is(false)); + } - assertThat(comparison2.isStolen(threshold1), is(false)); - assertThat(comparison2.isInconclusive(threshold1), is(true)); - assertThat(comparison2.isInnocent(threshold1), is(false)); + @Test + public void testThresholdCase2() { + Comparison comparison2 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.5)); + Threshold threshold1 = new Threshold(0.3); + + assertThat(comparison2.isStolen(threshold1), is(true)); + assertThat(comparison2.isInconclusive(threshold1), is(false)); + assertThat(comparison2.isInnocent(threshold1), is(true)); + } + + @Test + public void testThresholdCase3() { + Comparison comparison3 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.15)); + Threshold threshold1 = new Threshold(0.3); assertThat(comparison3.isStolen(threshold1), is(false)); assertThat(comparison3.isInconclusive(threshold1), is(false)); assertThat(comparison3.isInnocent(threshold1), is(true)); + } + @Test + public void testThresholdCase4() { + Comparison comparison1 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.75)); Threshold threshold2 = new Threshold(0.2); - assertThat(comparison1.isStolen(threshold2), is(false)); - assertThat(comparison1.isInconclusive(threshold2), is(true)); - assertThat(comparison1.isInnocent(threshold2), is(false)); - assertThat(comparison2.isStolen(threshold2), is(false)); - assertThat(comparison2.isInconclusive(threshold2), is(true)); - assertThat(comparison2.isInnocent(threshold2), is(false)); + assertThat(comparison1.isStolen(threshold2), is(true)); + assertThat(comparison1.isInconclusive(threshold2), is(false)); + assertThat(comparison1.isInnocent(threshold2), is(true)); + } + + @Test + public void testThresholdCase5() { + Comparison comparison2 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.5)); + Threshold threshold2 = new Threshold(0.2); + + assertThat(comparison2.isStolen(threshold2), is(true)); + assertThat(comparison2.isInconclusive(threshold2), is(false)); + assertThat(comparison2.isInnocent(threshold2), is(true)); + } + + @Test + public void testThresholdCase6() { + Comparison comparison3 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.15)); + Threshold threshold2 = new Threshold(0.2); assertThat(comparison3.isStolen(threshold2), is(false)); assertThat(comparison3.isInconclusive(threshold2), is(false)); assertThat(comparison3.isInnocent(threshold2), is(true)); + } + + @Test + public void testThresholdCase7() { + Comparison comparison1 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.75)); + Threshold threshold3 = new Threshold(0.1); + + assertThat(comparison1.isStolen(threshold3), is(true)); + assertThat(comparison1.isInconclusive(threshold3), is(false)); + assertThat(comparison1.isInnocent(threshold3), is(true)); + } + + @Test + public void testThresholdCase8() { + Comparison comparison2 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.5)); + Threshold threshold3 = new Threshold(0.1); + + assertThat(comparison2.isStolen(threshold3), is(true)); + assertThat(comparison2.isInconclusive(threshold3), is(false)); + assertThat(comparison2.isInnocent(threshold3), is(true)); + } + @Test + public void testThresholdCase9() { + Comparison comparison3 = new Comparison<>(birthmark1, birthmark2, new Similarity(0.15)); Threshold threshold3 = new Threshold(0.1); - assertThat(comparison1.isStolen(threshold3), is(false)); - assertThat(comparison1.isInconclusive(threshold3), is(true)); - assertThat(comparison1.isInnocent(threshold3), is(false)); - - assertThat(comparison2.isStolen(threshold3), is(false)); - assertThat(comparison2.isInconclusive(threshold3), is(true)); - assertThat(comparison2.isInnocent(threshold3), is(false)); - - assertThat(comparison3.isStolen(threshold3), is(false)); - assertThat(comparison3.isInconclusive(threshold3), is(true)); - assertThat(comparison3.isInnocent(threshold3), is(false)); + + assertThat(comparison3.isStolen(threshold3), is(true)); + assertThat(comparison3.isInconclusive(threshold3), is(false)); + assertThat(comparison3.isInnocent(threshold3), is(true)); } } diff --git a/pochi-api/src/test/java/jp/cafebabe/birthmarks/comparators/SimilarityTest.java b/pochi-api/src/test/java/jp/cafebabe/birthmarks/comparators/SimilarityTest.java index 319dfd51..1801816d 100644 --- a/pochi-api/src/test/java/jp/cafebabe/birthmarks/comparators/SimilarityTest.java +++ b/pochi-api/src/test/java/jp/cafebabe/birthmarks/comparators/SimilarityTest.java @@ -34,7 +34,7 @@ public void testSimilarityValue(){ Similarity similarity = new Similarity(0.75); Threshold threshold1 = new Threshold(0.3); - Threshold threshold2 = new Threshold(0.2); + Threshold threshold2 = new Threshold(0.8); assertThat(similarity.isCloseTo(new Similarity(0.7501), 1E-2), is(true)); assertThat(similarity.isCloseTo(new Similarity(0.8), 1E-2), is(false)); @@ -45,15 +45,19 @@ public void testSimilarityValue(){ } @Test - public void testStolen(){ - Similarity similarity = new Similarity(0.25); + public void testStolenCase1(){ + Similarity similarity = new Similarity(0.75); + Threshold threshold = new Threshold(0.8); - Threshold threshold1 = new Threshold(0.3); - Threshold threshold2 = new Threshold(0.2); + assertThat(similarity.isStolen(threshold), is(false)); + } - assertThat(similarity.isStolen(threshold1), is(false)); - assertThat(similarity.isInnocent(threshold1), is(true)); - assertThat(similarity.isInconclusive(threshold2), is(true)); + @Test + public void testStolenCase2(){ + Similarity similarity = new Similarity(0.9); + Threshold threshold = new Threshold(0.8); + + assertThat(similarity.isStolen(threshold), is(true)); } @Test @@ -62,7 +66,7 @@ public void testInconclusive(){ Similarity similarity2 = new Similarity(0.2); Similarity similarity3 = new Similarity(0.8); - Threshold threshold = new Threshold(0.25); + Threshold threshold = new Threshold(0.75); assertThat(similarity1.isInconclusive(threshold), is(true)); assertThat(similarity2.isInconclusive(threshold), is(false)); From c59f0eb3e08b6903cc78b75aa0c5c023219b2e27 Mon Sep 17 00:00:00 2001 From: GitHub Actions Date: Tue, 14 Sep 2021 02:54:18 +0000 Subject: [PATCH 2/2] version up to 2.5.2, ready to publish v2.5.2 --- README.md | 19 ++++++++++--------- bin/build_site.sh | 2 +- bin/make_dist.sh | 2 +- dockers/pochi-groovysh/Dockerfile | 2 +- dockers/pochi/Dockerfile | 2 +- kunai2/pom.xml | 2 +- pochi-api/pom.xml | 4 ++-- pochi-cmd/pom.xml | 4 ++-- pochi-core/pom.xml | 6 +++--- .../main/java/jp/cafebabe/pochi/Pochi.java | 2 +- pom.xml | 2 +- site/content/_index.md | 6 +++--- site/content/description.md | 5 +++-- site/content/install.md | 8 ++++---- site/pom.xml | 8 ++++---- 15 files changed, 38 insertions(+), 36 deletions(-) diff --git a/README.md b/README.md index ebd964dc..52948b49 100644 --- a/README.md +++ b/README.md @@ -5,11 +5,11 @@ [![codebeat badge](https://codebeat.co/badges/8e8c5e70-cb07-4f58-941c-3ddb64f3c059)](https://codebeat.co/projects/github-com-tamada-pochi-main) [![License](https://img.shields.io/badge/License-Apache%202.0-green.svg)](https://github.com/tamada/pochi/blob/master/LICENSE) -[![Version](https://img.shields.io/badge/Version-2.5.1-green.svg)](https://github.com/tamada/pochi/releases/tag/v2.5.1) +[![Version](https://img.shields.io/badge/Version-2.5.2-green.svg)](https://github.com/tamada/pochi/releases/tag/v2.5.2) [![DOI](https://img.shields.io/badge/DOI-10.5281/zenodo.4271132-green.svg)](https://zenodo.org/badge/latestdoi/82773287) -[![Javadoc](https://img.shields.io/badge/Javadoc-v2.5.1-blue?logo=java)](https://tamada.github.io/pochi/apidocs) -[![Docker](https://img.shields.io/badge/Docker-ghcr.io%2Ftamada%2Fpochi%3A2.5.1-blue?logo=docker)](https://github.com/users/tamada/packages/container/package/pochi) +[![Javadoc](https://img.shields.io/badge/Javadoc-v2.5.2-blue?logo=java)](https://tamada.github.io/pochi/apidocs) +[![Docker](https://img.shields.io/badge/Docker-ghcr.io%2Ftamada%2Fpochi%3A2.5.2-blue?logo=docker)](https://github.com/users/tamada/packages/container/package/pochi) [![GitHub Discussion](https://img.shields.io/badge/GitHub-Discussions-blue?logo=github)](https://github.com/tamada/pochi/discussions) Detecting the software theft, the birthmark toolkit for the JVM platform. @@ -83,7 +83,8 @@ For more detail, see [:ant: Examples](https://tamada.github.io/pochi/examples). Container images of **pochi** for Docker are: * [`ghcr.io/tamada/pochi`](https://github.com/users/tamada/packages/container/package/pochi) - * `2.5.1`, `latest` + * `2.5.2`, `latest` + * `2.5.1` * `2.5.0` * `2.4.6` * `2.4.0` @@ -105,7 +106,7 @@ Container images of **pochi** for Docker are: * `1.0.0` * accept only `.js` script files. -[![Docker](https://img.shields.io/badge/Docker-ghcir.io%2Ftamada%2Fpochi%3A2.5.1-blue?logo=docker)](https://github.com/users/tamada/packages/container/package/pochi) +[![Docker](https://img.shields.io/badge/Docker-ghcir.io%2Ftamada%2Fpochi%3A2.5.2-blue?logo=docker)](https://github.com/users/tamada/packages/container/package/pochi) To run **pochi** on Docker container OS, type the following commands. @@ -157,10 +158,10 @@ Then, add the dependencies of your `pom.xml`. | groupId | artifactId | version | |--------------------|--------------|---------| -|`jp.cafebabe.pochi` | `kunai2` | `2.5.1` | -|`jp.cafebabe.pochi` | `pochi-core` | `2.5.1` | -|`jp.cafebabe.pochi` | `pochi-api` | `2.5.1` | -|`jp.cafebabe.pochi` | `pochi-cmd` | `2.5.1` | +|`jp.cafebabe.pochi` | `kunai2` | `2.5.2` | +|`jp.cafebabe.pochi` | `pochi-core` | `2.5.2` | +|`jp.cafebabe.pochi` | `pochi-api` | `2.5.2` | +|`jp.cafebabe.pochi` | `pochi-cmd` | `2.5.2` | ## Modules diff --git a/bin/build_site.sh b/bin/build_site.sh index b9e8f083..da1f9aa4 100755 --- a/bin/build_site.sh +++ b/bin/build_site.sh @@ -1,6 +1,6 @@ #! /bin/sh -VERSION="2.5.1" +VERSION="2.5.2" function build_apidocs() { mkdir -p site/msp diff --git a/bin/make_dist.sh b/bin/make_dist.sh index f760d83a..26a72da6 100755 --- a/bin/make_dist.sh +++ b/bin/make_dist.sh @@ -1,6 +1,6 @@ #! /bin/sh -VERSION="2.5.1" +VERSION="2.5.2" function mkdirIfNeeded () { if [ ! -d $1 ] ; then diff --git a/dockers/pochi-groovysh/Dockerfile b/dockers/pochi-groovysh/Dockerfile index 0a79670a..6417627d 100644 --- a/dockers/pochi-groovysh/Dockerfile +++ b/dockers/pochi-groovysh/Dockerfile @@ -15,7 +15,7 @@ RUN apk --no-cache add openjdk11=11.0.4_p4-r1 \ # building pochi FROM alpine:3.10.1 -ARG PochiVersion="2.5.1" +ARG PochiVersion="2.5.2" ARG GroovyVersion="3.0.9" LABEL maintainer="Haruaki Tamada" \ diff --git a/dockers/pochi/Dockerfile b/dockers/pochi/Dockerfile index 39d49c38..1c83c791 100644 --- a/dockers/pochi/Dockerfile +++ b/dockers/pochi/Dockerfile @@ -15,7 +15,7 @@ RUN apk --no-cache add openjdk11=11.0.4_p4-r1 \ # building pochi FROM alpine:3.10.1 -ARG PochiVersion="2.5.1" +ARG PochiVersion="2.5.2" LABEL maintainer="Haruaki Tamada" \ pochi-version="${PochiVersion}" \ diff --git a/kunai2/pom.xml b/kunai2/pom.xml index bfe5bca9..f52e00d4 100644 --- a/kunai2/pom.xml +++ b/kunai2/pom.xml @@ -4,7 +4,7 @@ jp.cafebabe pochi - 2.5.1 + 2.5.2 4.0.0 diff --git a/pochi-api/pom.xml b/pochi-api/pom.xml index 73db249d..241aec80 100644 --- a/pochi-api/pom.xml +++ b/pochi-api/pom.xml @@ -6,7 +6,7 @@ jp.cafebabe pochi - 2.5.1 + 2.5.2 jp.cafebabe.pochi @@ -33,7 +33,7 @@ jp.cafebabe.pochi kunai2 - 2.5.1 + 2.5.2 compile diff --git a/pochi-cmd/pom.xml b/pochi-cmd/pom.xml index 461abc74..4222f702 100644 --- a/pochi-cmd/pom.xml +++ b/pochi-cmd/pom.xml @@ -6,7 +6,7 @@ jp.cafebabe pochi - 2.5.1 + 2.5.2 jp.cafebabe.pochi @@ -38,7 +38,7 @@ jp.cafebabe.pochi pochi-core - 2.5.1 + 2.5.2 compile diff --git a/pochi-core/pom.xml b/pochi-core/pom.xml index 2ddf9bc5..59cca0bf 100644 --- a/pochi-core/pom.xml +++ b/pochi-core/pom.xml @@ -4,7 +4,7 @@ jp.cafebabe pochi - 2.5.1 + 2.5.2 4.0.0 @@ -20,13 +20,13 @@ jp.cafebabe.pochi kunai2 - 2.5.1 + 2.5.2 compile jp.cafebabe.pochi pochi-api - 2.5.1 + 2.5.2 compile diff --git a/pochi-core/src/main/java/jp/cafebabe/pochi/Pochi.java b/pochi-core/src/main/java/jp/cafebabe/pochi/Pochi.java index af23fd47..15d3fa90 100644 --- a/pochi-core/src/main/java/jp/cafebabe/pochi/Pochi.java +++ b/pochi-core/src/main/java/jp/cafebabe/pochi/Pochi.java @@ -8,7 +8,7 @@ import java.util.Optional; public class Pochi { - public static final String VERSION = "2.5.1"; + public static final String VERSION = "2.5.2"; private static final Pochi INSTANCE = new Pochi(); private final Path home; diff --git a/pom.xml b/pom.xml index bc79903e..86f35a5f 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ jp.cafebabe pochi - 2.5.1 + 2.5.2 pom diff --git a/site/content/_index.md b/site/content/_index.md index db6c15d5..b7738796 100644 --- a/site/content/_index.md +++ b/site/content/_index.md @@ -9,11 +9,11 @@ draft: false [![codebeat badge](https://codebeat.co/badges/8e8c5e70-cb07-4f58-941c-3ddb64f3c059)](https://codebeat.co/projects/github-com-tamada-pochi-main) [![License](https://img.shields.io/badge/License-Apache%202.0-green.svg?style=flat)](https://github.com/tamada/pochi/blob/master/LICENSE) -[![Version](https://img.shields.io/badge/Version-2.5.1-green.svg)](https://github.com/tamada/pochi/releases/tag/v2.5.1) +[![Version](https://img.shields.io/badge/Version-2.5.2-green.svg)](https://github.com/tamada/pochi/releases/tag/v2.5.2) [![DOI](https://img.shields.io/badge/DOI-10.5281/zenodo.4271132-green.svg)](https://zenodo.org/badge/latestdoi/82773287) -[![Javadoc](https://img.shields.io/badge/Javadoc-v2.5.1-blue?logo=java)](https://tamada.github.io/pochi/apidocs) -[![Docker](https://img.shields.io/badge/Docker-ghcr.io%2Ftamada%2Fpochi%3A2.5.1-blue?logo=docker)](https://github.com/users/tamada/packages/container/package/pochi) +[![Javadoc](https://img.shields.io/badge/Javadoc-v2.5.2-blue?logo=java)](https://tamada.github.io/pochi/apidocs) +[![Docker](https://img.shields.io/badge/Docker-ghcr.io%2Ftamada%2Fpochi%3A2.5.2-blue?logo=docker)](https://github.com/users/tamada/packages/container/package/pochi) [![GitHub Discussion](https://img.shields.io/badge/GitHub-Discussions-blue?logo=github)](https://github.com/tamada/pochi/discussions) Detecting the software theft, the birthmark toolkit for the JVM platform. diff --git a/site/content/description.md b/site/content/description.md index 90b3517d..f4333397 100644 --- a/site/content/description.md +++ b/site/content/description.md @@ -49,7 +49,8 @@ For more detail, see [:ant: Examples](../examples). Container images of **pochi** for Docker are: * [`ghcr.io/tamada/pochi`](https://github.com/users/tamada/packages/container/package/pochi) - * `2.5.1`, `latest` + * `2.5.2`, `latest` + * `2.5.1` * `2.5.0` * `2.4.6` * `2.4.0` @@ -71,7 +72,7 @@ Container images of **pochi** for Docker are: * `1.0.0` * accept only `.js` script files. -[![Docker](https://img.shields.io/badge/Docker-ghcir.io%2Ftamada%2Fpochi%3A2.5.1-blue?logo=docker)](https://github.com/users/tamada/packages/container/package/pochi) +[![Docker](https://img.shields.io/badge/Docker-ghcir.io%2Ftamada%2Fpochi%3A2.5.2-blue?logo=docker)](https://github.com/users/tamada/packages/container/package/pochi) To run **pochi** on Docker container OS, type the following commands. diff --git a/site/content/install.md b/site/content/install.md index 3e54b2a2..993567a8 100644 --- a/site/content/install.md +++ b/site/content/install.md @@ -47,10 +47,10 @@ Then, add the dependencies of your `pom.xml`. | groupId | artifactId | version | |--------------------|--------------|---------| -|`jp.cafebabe.pochi` | `kunai2` | `2.5.1` | -|`jp.cafebabe.pochi` | `pochi-core` | `2.5.1` | -|`jp.cafebabe.pochi` | `pochi-api` | `2.5.1` | -|`jp.cafebabe.pochi` | `pochi-cmd` | `2.5.1` | +|`jp.cafebabe.pochi` | `kunai2` | `2.5.2` | +|`jp.cafebabe.pochi` | `pochi-core` | `2.5.2` | +|`jp.cafebabe.pochi` | `pochi-api` | `2.5.2` | +|`jp.cafebabe.pochi` | `pochi-cmd` | `2.5.2` | ## :briefcase: Requirements diff --git a/site/pom.xml b/site/pom.xml index 43ab7093..2a78d53a 100644 --- a/site/pom.xml +++ b/site/pom.xml @@ -4,7 +4,7 @@ jp.cafebabe pochi - 2.5.1 + 2.5.2 4.0.0 @@ -20,19 +20,19 @@ jp.cafebabe.pochi kunai2 - 2.5.1 + 2.5.2 provided jp.cafebabe.pochi pochi-api - 2.5.1 + 2.5.2 provided jp.cafebabe.pochi pochi-core - 2.5.1 + 2.5.2 provided