diff --git a/golang-basic/latihan/palindrome/01-samatra_marwa_hany.go b/golang-basic/latihan/palindrome/01-samatra_marwa_hany.go new file mode 100644 index 0000000..98f8aba --- /dev/null +++ b/golang-basic/latihan/palindrome/01-samatra_marwa_hany.go @@ -0,0 +1,31 @@ +package main + +import ( + "fmt" + "strings" +) + +func palindrome(input string) string { + var reverseString string = "" + var length = len(input) + + for i := length - 1; i >= 0; i-- { + reverseString = reverseString + string(input[i]) + } + + // Case in-sensitive comparision + if strings.ToLower(input) == strings.ToLower(reverseString) { + return "palindrome" + } else { + return "not palindrome" + } +} + +func main() { + + var inputString string + fmt.Print("Masukan kata: ") + fmt.Scanln(&inputString) + palindrome(inputString) + +} diff --git a/golang-basic/latihan/palindrome/01-samatra_marwa_hany_test.go b/golang-basic/latihan/palindrome/01-samatra_marwa_hany_test.go new file mode 100644 index 0000000..c194486 --- /dev/null +++ b/golang-basic/latihan/palindrome/01-samatra_marwa_hany_test.go @@ -0,0 +1,25 @@ +package main + +import "testing" + +func Test_palindrome(t *testing.T) { + type args struct { + input string + } + tests := []struct { + name string + args args + }{ + { + name: "vokal", + args: args{ + input: "madam" + }, + want: "palindrome", + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + palindrome(tt.args.input) + }) + } +} diff --git a/golang-basic/latihan/palindrome/go.mod b/golang-basic/latihan/palindrome/go.mod new file mode 100644 index 0000000..1fb2cad --- /dev/null +++ b/golang-basic/latihan/palindrome/go.mod @@ -0,0 +1,6 @@ +module 01-samatra_marwa_hany.go + +go 1.19 +"gopls": { + "experimentalWorkspaceModule": true, +} \ No newline at end of file diff --git a/golang-basic/latihan/test.go b/golang-basic/latihan/test.go index 06ab7d0..ea13372 100644 --- a/golang-basic/latihan/test.go +++ b/golang-basic/latihan/test.go @@ -1 +1,24 @@ package main + +import ( + "fmt" + "strings" +) + +func main() { + + var originalString string = "Madam" + var reverseString string = "" + var length = len(originalString) + + for i := length - 1; i >= 0; i-- { + reverseString = reverseString + string(originalString[i]) + } + + // Case in-sensitive comparision + if strings.ToLower(originalString) == strings.ToLower(reverseString) { + fmt.Println("The given string is Palindrome") + } else { + fmt.Println("The given string is NOT a Palindrome") + } +} diff --git a/golang-basic/latihan/vokalkonsonan/02-samatra_marwa_hany.go b/golang-basic/latihan/vokalkonsonan/02-samatra_marwa_hany.go new file mode 100644 index 0000000..54c1856 --- /dev/null +++ b/golang-basic/latihan/vokalkonsonan/02-samatra_marwa_hany.go @@ -0,0 +1,22 @@ +package main + +import "fmt" + +func main() { + var inputan string + fmt.Print("Masukan huruf: ") + fmt.Scanln(&inputan) + fmt.Println(vokalkosnan(inputan)) + +} + +func vokalkosnan(input string) string { + var kembalian string = "" + if input == "a" || input == "i" || input == "u" || input == "e" || input == "o" || input == "A" || input == "I" || input == "U" || input == "E" || input == "O" { + kembalian = "vokal" + return kembalian + } else { + kembalian = "konsonan" + return kembalian + } +} diff --git a/golang-basic/latihan/vokalkonsonan/02-samatra_marwa_hany_test.go b/golang-basic/latihan/vokalkonsonan/02-samatra_marwa_hany_test.go new file mode 100644 index 0000000..2219c38 --- /dev/null +++ b/golang-basic/latihan/vokalkonsonan/02-samatra_marwa_hany_test.go @@ -0,0 +1,57 @@ +package main + +import "testing" + +func Test_vokalkosnan(t *testing.T) { + type args struct { + input string + } + tests := []struct { + name string + args args + want string + }{ + { + name: "vokal", + args: args{ + input: "a" + }, + want: "vokal", + }, + { + name: "should be consonant", + args: args{ + letter: "i", + }, + want: "consonant", + }, + { + name: "should be consonant", + args: args{ + letter: "u", + }, + want: "consonant", + }, + { + name: "should be consonant", + args: args{ + letter: "e", + }, + want: "consonant", + }, + { + name: "should be consonant", + args: args{ + letter: "o", + }, + want: "consonant", + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + if got := vokalkosnan(tt.args.input); got != tt.want { + t.Errorf("vokalkosnan() = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/golang-basic/latihan/vokalkonsonan/go.mod b/golang-basic/latihan/vokalkonsonan/go.mod new file mode 100644 index 0000000..b94cfb2 --- /dev/null +++ b/golang-basic/latihan/vokalkonsonan/go.mod @@ -0,0 +1,10 @@ +module 02-samatra_marwa_hany.go + +go 1.19 + + +"gopls": { + "experimentalWorkspaceModule": true, +} + + diff --git a/gomodule-unit-test/latihan/latihan-moq/go.mod b/gomodule-unit-test/latihan/latihan-moq/go.mod index 3aec68f..abdc303 100644 --- a/gomodule-unit-test/latihan/latihan-moq/go.mod +++ b/gomodule-unit-test/latihan/latihan-moq/go.mod @@ -1,3 +1,10 @@ -module github.com/santekno/latihanmoq +module latihan -go 1.17 +go 1.19 + +require ( + github.com/matryer/moq v0.3.0 // indirect + golang.org/x/mod v0.7.0 // indirect + golang.org/x/sys v0.2.0 // indirect + golang.org/x/tools v0.3.0 // indirect +) \ No newline at end of file diff --git a/gomodule-unit-test/latihan/latihan-moq/go.sum b/gomodule-unit-test/latihan/latihan-moq/go.sum new file mode 100644 index 0000000..976317f --- /dev/null +++ b/gomodule-unit-test/latihan/latihan-moq/go.sum @@ -0,0 +1,8 @@ +github.com/matryer/moq v0.3.0 h1:4j0goF/XK3pMTc7fJB3fveuTJoQNdavRX/78vlK3Xb4= +github.com/matryer/moq v0.3.0/go.mod h1:RJ75ZZZD71hejp39j4crZLsEDszGk6iH4v4YsWFKH4s= +golang.org/x/mod v0.7.0 h1:LapD9S96VoQRhi/GrNTqeBJFrUjs5UHCAtTlgwA5oZA= +golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/sys v0.2.0 h1:ljd4t30dBnAvMZaQCevtY0xLLD0A+bRZXbgLMLU1F/A= +golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/tools v0.3.0 h1:SrNbZl6ECOS1qFzgTdQfWXZM9XBkiA6tkFrH9YSTPHM= +golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= \ No newline at end of file diff --git a/gomodule-unit-test/latihan/latihan-moq/main.go b/gomodule-unit-test/latihan/latihan-moq/main.go index 0cbd3d4..c1dbfc1 100644 --- a/gomodule-unit-test/latihan/latihan-moq/main.go +++ b/gomodule-unit-test/latihan/latihan-moq/main.go @@ -2,6 +2,7 @@ package main import "fmt" +//go:generate moq -out myinterface_moq_test.go . StudentRepositoryInterface type Student struct { FullName string `json:"fullname"` Grade string `json:"grade"` diff --git a/gomodule-unit-test/latihan/latihan-moq/main_test.go b/gomodule-unit-test/latihan/latihan-moq/main_test.go new file mode 100644 index 0000000..ac270fd --- /dev/null +++ b/gomodule-unit-test/latihan/latihan-moq/main_test.go @@ -0,0 +1,62 @@ +package main + +import ( + "reflect" + "testing" +) + +func TestStudentService_GetStudent(t *testing.T) { + tests := []struct { + name string + s StudentService + want []Student + wantErr bool + }{ + { + name: "shoulbe success get student", + s: StudentService{ + StudentRepositoryInterface: &StudentRepositoryInterfaceMock{ + GetAllStudentsFunc: func() ([]Student, error) { + return []Student{ + { + FullName: "Irvan", + Grade: "A", + Class: 12, + }, + { + FullName: "Taufik", + Grade: "C", + Class: 11, + }, + }, nil + }, + }, + }, + wantErr: false, + want: []Student{ + { + FullName: "Irvan", + Grade: "A", + Class: 12, + }, + { + FullName: "Taufik", + Grade: "C", + Class: 11, + }, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := tt.s.GetStudent() + if (err != nil) != tt.wantErr { + t.Errorf("StudentService.GetStudent() error = %v, wantErr %v", err, tt.wantErr) + return + } + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("StudentService.GetStudent() = %v, want %v", got, tt.want) + } + }) + } +}