Добавлены библиотеки и go.mod

Этот коммит содержится в:
Softonik 2024-06-25 18:05:52 +03:00 коммит произвёл Nobody
родитель 5ea7f5d13c
коммит 6809e376d7
13 изменённых файлов: 425 добавлений и 3 удалений

30
.vscode/tasks.json предоставленный Обычный файл
Просмотреть файл

@ -0,0 +1,30 @@
{
"version": "2.0.0",
"tasks": [
{
"type": "process",
"label": "go: test package",
"command": "/s/t",
"args": [
"${fileDirname}",
"${fileDirnameBasename}"
],
"problemMatcher": [
"$go"
],
"group": {
"kind": "test",
"isDefault": true
},
"detail": "cd /app; go test ${fileDirname}",
"presentation": {
"echo": false,
"reveal": "always",
"focus": false,
"panel": "shared",
"showReuseMessage": false,
"clear": true
}
}
]
}

24
go.mod Обычный файл
Просмотреть файл

@ -0,0 +1,24 @@
module my/schet
go 1.20
require (
github.com/agiledragon/gomonkey/v2 v2.9.0 // indirect
github.com/cucumber/gherkin-go/v19 v19.0.3 // indirect
github.com/cucumber/godog v0.12.6 // indirect
github.com/cucumber/messages-go/v16 v16.0.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/go-telegram/bot v1.2.2 // indirect
github.com/gofrs/uuid v4.2.0+incompatible // indirect
github.com/google/go-cmp v0.5.9 // indirect
github.com/hashicorp/go-immutable-radix v1.3.1 // indirect
github.com/hashicorp/go-memdb v1.3.2 // indirect
github.com/hashicorp/golang-lru v0.5.4 // indirect
github.com/onsi/gomega v1.27.4 // indirect
github.com/spf13/pflag v1.0.5 // indirect
golang.org/x/net v0.8.0 // indirect
golang.org/x/text v0.8.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
replace github.com/cucumber/godog => /gopath/src/my/godog

63
go.sum Обычный файл
Просмотреть файл

@ -0,0 +1,63 @@
github.com/agiledragon/gomonkey/v2 v2.9.0 h1:PDiKKybR596O6FHW+RVSG0Z7uGCBNbmbUXh3uCNQ7Hc=
github.com/agiledragon/gomonkey/v2 v2.9.0/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY=
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cucumber/gherkin-go/v19 v19.0.3 h1:mMSKu1077ffLbTJULUfM5HPokgeBcIGboyeNUof1MdE=
github.com/cucumber/gherkin-go/v19 v19.0.3/go.mod h1:jY/NP6jUtRSArQQJ5h1FXOUgk5fZK24qtE7vKi776Vw=
github.com/cucumber/godog v0.12.6 h1:3IToXviU45G7FgijwTk/LdB4iojn8zUFDfQLj4MMiHc=
github.com/cucumber/godog v0.12.6/go.mod h1:Y02TTpimPXDb70PnG6M3zpODXm1+bjCsuZzcW76xAww=
github.com/cucumber/messages-go/v16 v16.0.0/go.mod h1:EJcyR5Mm5ZuDsKJnT2N9KRnBK30BGjtYotDKpwQ0v6g=
github.com/cucumber/messages-go/v16 v16.0.1 h1:fvkpwsLgnIm0qugftrw2YwNlio+ABe2Iu94Ap8GMYIY=
github.com/cucumber/messages-go/v16 v16.0.1/go.mod h1:EJcyR5Mm5ZuDsKJnT2N9KRnBK30BGjtYotDKpwQ0v6g=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-telegram/bot v1.2.2 h1:LwGbSzjcSi0w4Ke8JUpgbBhJwwYTl2ITmhubeM2WvN8=
github.com/go-telegram/bot v1.2.2/go.mod h1:i2TRs7fXWIeaceF3z7KzsMt/he0TwkVC680mvdTFYeM=
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/gofrs/uuid v4.2.0+incompatible h1:yyYWMnhkhrKwwr8gAOcOCYxOOscHgDS9yZgBrnJfGa0=
github.com/gofrs/uuid v4.2.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/hashicorp/go-immutable-radix v1.3.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-immutable-radix v1.3.1 h1:DKHmCUm2hRBK510BaiZlwvpD40f8bJFeZnpfm2KLowc=
github.com/hashicorp/go-immutable-radix v1.3.1/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
github.com/hashicorp/go-memdb v1.3.2 h1:RBKHOsnSszpU6vxq80LzC2BaQjuuvoyaQbkLTf7V7g8=
github.com/hashicorp/go-memdb v1.3.2/go.mod h1:Mluclgwib3R93Hk5fxEfiRhB+6Dar64wWh71LpNSe3g=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/go-uuid v1.0.2/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/onsi/gomega v1.27.4 h1:Z2AnStgsdSayCMDiCU42qIz+HLqEPcgiOCXjAU/w+8E=
github.com/onsi/gomega v1.27.4/go.mod h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.8.0 h1:57P1ETyNKtuIjB4SRd15iJxuhj8Gc416Y78H3qgMh68=
golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

34
pkg/accuracy/accuracy.go Обычный файл
Просмотреть файл

@ -0,0 +1,34 @@
package accuracy
import (
"math"
)
const (
roundingTimeHoursDigitsCount = 1
roundingTimeHoursТочнееDigitsCount = 5
)
func RoundTimeHours(number float64) float64 {
return RoundFloat(number, roundingTimeHoursDigitsCount)
}
func RoundTimeHoursТочнее(number float64) float64 {
return RoundFloat(number, roundingTimeHoursТочнееDigitsCount)
}
func RoundFloat(number float64, roundingTempDigitsCount int) float64 {
temp := math.Pow(10, float64(roundingTempDigitsCount))
return math.Round(number*temp) / temp
}
func СекундыВМинуты(seconds int) int {
s_ostatok := seconds % 60
res := seconds / 60
if s_ostatok < 30 {
return res
}
return res + 1
}
func ОкруглитьРубли(сумма float64) int {
return int(math.Round(сумма))
}

60
pkg/accuracy/accuracy_test.go Обычный файл
Просмотреть файл

@ -0,0 +1,60 @@
package accuracy
import (
. "github.com/onsi/gomega"
)
type testData struct {
}
var (
t *testData
)
func resetTestData() {
t = &testData{}
_ = Ω
}
func beforeSuite() {
}
func afterSuite() {
}
func beforeScenario() {
resetTestData()
}
func afterScenario() {
}
// -----------------------
func roundTempВозвращаетОкруглённое() {
// res := RoundTemp(0.0000003)
// Ω(res).To(testlib.Be(0.0))
// res = RoundTemp(0.000003)
// Ω(res).To(testlib.Be(0.0))
// res = RoundTemp(0.003)
// Ω(res).To(testlib.Be(0.0))
// res = RoundTemp(0.199)
// Ω(res).To(testlib.Be(0.2))
// res = RoundTemp(0.3333)
// Ω(res).To(testlib.Be(0.3))
}
func roundDistВозвращаетОкруглённое() {
// res := RoundDist(0.0000003)
// Ω(res).To(testlib.Be(0.0))
// res = RoundDist(0.003)
// Ω(res).To(testlib.Be(0.0))
// res = RoundDist(0.03)
// Ω(res).To(testlib.Be(0.03))
// res = RoundDist(0.333)
// Ω(res).To(testlib.Be(0.33))
}

9
pkg/accuracy/features/app.feature Обычный файл
Просмотреть файл

@ -0,0 +1,9 @@
# language: ru
Функциональность: Точность
Сценарий: Округление температуры до десятых
То RoundTemp возвращает округлённое
Сценарий: Округление расстояний до сотых
То RoundDist возвращает округлённое

55
pkg/accuracy/init_test.go Обычный файл
Просмотреть файл

@ -0,0 +1,55 @@
package accuracy
import (
"context"
"os"
"testing"
"my/schet/pkg/testlib"
"github.com/cucumber/godog"
"github.com/cucumber/godog/colors"
. "github.com/onsi/gomega"
gomega_format "github.com/onsi/gomega/format"
)
func InitializeScenario(ctx *godog.ScenarioContext) {
ctx.Step(`^RoundTemp возвращает округлённое$`, roundTempВозвращаетОкруглённое)
ctx.Step(`^RoundDist возвращает округлённое$`, roundDistВозвращаетОкруглённое)
// -----------------------
ctx.Before(func(ctx context.Context, sc *godog.Scenario) (context.Context, error) {
beforeScenario()
return ctx, nil
})
ctx.After(func(ctx context.Context, sc *godog.Scenario, err error) (context.Context, error) {
afterScenario()
return ctx, nil
})
testlib.InitializeGomegaForGodog(ctx)
gomega_format.CharactersAroundMismatchToInclude = 50
_ = Ω
}
func InitializeSuite(tsc *godog.TestSuiteContext) {
tsc.BeforeSuite(beforeSuite)
tsc.AfterSuite(afterSuite)
}
func TestMain(m *testing.M) {
var opts = godog.Options{
Output: colors.Colored(os.Stdout),
Strict: true,
StopOnFailure: true,
}
godog.BindCommandLineFlags("godog.", &opts)
r := godog.TestSuite{
Name: "app",
TestSuiteInitializer: InitializeSuite,
ScenarioInitializer: InitializeScenario,
Options: &opts,
}.Run()
os.Exit(r)
}

72
pkg/lib/lib.go Обычный файл
Просмотреть файл

@ -0,0 +1,72 @@
package lib
import (
"io"
"log"
"os"
"os/exec"
)
func Bash(cmd string) error {
c := exec.Command("/bin/bash", "-c", cmd)
c.Stderr = os.Stderr
c.Stdout = os.Stdout
c.Stdin = os.Stdin
return c.Run()
}
func BashV(cmd string) error {
log.Println("cmd:", cmd)
return Bash(cmd)
}
func BashOutput(cmd string) (string, error) {
out, err := exec.Command("/bin/bash", "-c", cmd).CombinedOutput()
return string(out), err
}
func ReadFile(path string) (string, error) {
ret, err := os.ReadFile(path)
if err != nil {
return "", err
}
return string(ret), nil
}
func WriteFile(path, data string) error {
return os.WriteFile(path, []byte(data), 0644)
}
func CopyFile(src, dst string) (err error) {
in, err := os.Open(src)
if err != nil {
return
}
defer in.Close()
out, err := os.Create(dst)
if err != nil {
return
}
defer func() {
cerr := out.Close()
if err == nil {
err = cerr
}
}()
if _, err = io.Copy(out, in); err != nil {
return
}
err = out.Sync()
return
}
func Plus(in bool) string {
if in {
return "+"
}
return "-"
}

Просмотреть файл

@ -1,7 +1,7 @@
package schet
import (
"my/gnocount/pkg/accuracy"
"my/schet/pkg/accuracy"
)
func процентСуммы(сумма float64) float64 {

Просмотреть файл

@ -5,7 +5,7 @@ import (
"os"
"testing"
. "my/gnocount/pkg/testlib"
. "my/schet/pkg/testlib"
"github.com/cucumber/godog"
"github.com/cucumber/godog/colors"

Просмотреть файл

@ -2,7 +2,7 @@ package schet
import (
"fmt"
. "my/gnocount/pkg/testlib"
. "my/schet/pkg/testlib"
. "github.com/onsi/gomega"
)

15
pkg/testlib/patching.go Обычный файл
Просмотреть файл

@ -0,0 +1,15 @@
package testlib
import (
"unicode"
. "github.com/agiledragon/gomonkey/v2"
)
func Patch(target interface{}, methodName string, double interface{}) *Patches {
c := []rune(methodName)[0]
if unicode.IsUpper(c) {
return ApplyMethod(target, methodName, double)
}
return ApplyPrivateMethod(target, methodName, double)
}

60
pkg/testlib/testlib.go Обычный файл
Просмотреть файл

@ -0,0 +1,60 @@
package testlib
import (
"context"
"fmt"
"strconv"
"time"
"github.com/cucumber/godog"
. "github.com/onsi/gomega"
)
var Be = Equal
func NoErr(err error) {
ExpectWithOffset(1, err).NotTo(HaveOccurred())
}
var Ok = NoErr
func Yes(b bool) {
ExpectWithOffset(1, b).To(BeTrue())
}
func YesText(b bool, text string) {
ExpectWithOffset(1, b).To(BeTrue(), text)
}
func Atoi(in string) int {
res, err := strconv.Atoi(in)
Ok(err)
return res
}
func Atof(in string) float64 {
res, err := strconv.ParseFloat(in, 32)
Ok(err)
return res
}
var TestResult error
func InitializeGomegaForGodog(ctx *godog.ScenarioContext) {
ctx.StepContext().Before(func(ctx context.Context, st *godog.Step) (context.Context, error) {
TestResult = nil
return ctx, nil
})
ctx.StepContext().After(func(ctx context.Context, st *godog.Step, status godog.StepResultStatus, err error) (context.Context, error) {
return ctx, TestResult
})
RegisterFailHandler(func(message string, callerSkip ...int) {
// remember only the expectation failed first
// anything thereafter is not to be believed
if TestResult == nil {
TestResult = fmt.Errorf(message)
}
})
}
func Sleep(m time.Duration) {
time.Sleep(m * time.Millisecond)
}