diff --git a/.Rbuildignore b/.Rbuildignore
new file mode 100644
index 0000000000000000000000000000000000000000..91114bf2f2bba5e0c5252e75018da19b869776f1
--- /dev/null
+++ b/.Rbuildignore
@@ -0,0 +1,2 @@
+^.*\.Rproj$
+^\.Rproj\.user$
diff --git a/DESCRIPTION b/DESCRIPTION
index 4d2265534907fc3be8826e5893e23a012a97571f..d9a91b821f13b83cd645e990eddef9e085a159fe 100644
--- a/DESCRIPTION
+++ b/DESCRIPTION
@@ -1,11 +1,17 @@
-Package: exercise
+Package: Advanced_R_Group_Cooperation
 Type: Package
 Title: Lab 3 exercise
 Version: 1.0
 Date: 2024-09-12
-Author:Liuxi Mei
+Author: Liuxi Mei
 Maintainer: Liuxi Mei <liume102@student.liu.se>
-Description: This is a exercise for lab 3.
+Description: This is a exercise package for advanced R .
 License: GPL (>= 2)
 RoxygenNote: 7.3.2
 Encoding: UTF-8
+Depends: 
+    R (>= 2.10)
+LazyData: true
+Suggests: 
+    testthat (>= 3.0.0)
+Config/testthat/edition: 3
diff --git a/R/data.R b/R/data.R
index 6d075125761ec161464c76da5399398145bf4627..f510d303d09849090bac87bdaeb87753f33c3b79 100644
--- a/R/data.R
+++ b/R/data.R
@@ -1,11 +1,10 @@
 
-#'
-#' @format ## `who`
-#' A data frame with 7,240 rows and 60 columns:
+#' graph
+#' @format A data frame with 18 rows and 3 columns:
 #' \describe{
-#'   \item{country}{Country name}
-#'   \item{iso2, iso3}{2 & 3 letter ISO country codes}
-#'   \item{year}{Year}
+#'   \item{v1}{node name}
+#'   \item{v2}{node name}
+#'   \item{w}{the weight between node v1 and node v2}
 #'   ...
 #' }
 wiki_graph 
\ No newline at end of file
diff --git a/data/.gitkeep b/data-raw/.gitkeep
similarity index 100%
rename from data/.gitkeep
rename to data-raw/.gitkeep
diff --git a/data-raw/wiki_graph.R b/data-raw/wiki_graph.R
new file mode 100644
index 0000000000000000000000000000000000000000..bf14777b4f98387ad5a98acfd0e823013850c113
--- /dev/null
+++ b/data-raw/wiki_graph.R
@@ -0,0 +1,12 @@
+library(dplyr, warn.conflicts = FALSE)
+library(rvest)
+library(tidyr)
+library(readr)
+library(usethis)
+
+wiki_graph <-data.frame(v1=c(1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,6,6,6),
+             v2=c(2,3,6,1,3,4,1,2,4,6,2,3,5,4,6,1,3,5),
+             w=c(7,9,14,7,10,15,9,10,11,2,15,11,6,6,9,14,2,9))
+
+write_csv(wiki_graph, "data-raw/wiki_graph.csv")
+usethis::use_data(wiki_graph, overwrite = TRUE)
\ No newline at end of file
diff --git a/data-raw/wiki_graph.csv b/data-raw/wiki_graph.csv
new file mode 100644
index 0000000000000000000000000000000000000000..8a673824f7bdf1b61c863af9ee966ea1349e84bc
--- /dev/null
+++ b/data-raw/wiki_graph.csv
@@ -0,0 +1,19 @@
+v1,v2,w
+1,2,7
+1,3,9
+1,6,14
+2,1,7
+2,3,10
+2,4,15
+3,1,9
+3,2,10
+3,4,11
+3,6,2
+4,2,15
+4,3,11
+4,5,6
+5,4,6
+5,6,9
+6,1,14
+6,3,2
+6,5,9
diff --git a/data/wiki_graph.rda b/data/wiki_graph.rda
new file mode 100644
index 0000000000000000000000000000000000000000..b9513341241f425a3aece1bb3c043a2cb7efc6f4
Binary files /dev/null and b/data/wiki_graph.rda differ
diff --git a/tests/testthat.R b/tests/testthat.R
new file mode 100644
index 0000000000000000000000000000000000000000..c3aa5188bc93dfddf3114ad0901d006c2256315a
--- /dev/null
+++ b/tests/testthat.R
@@ -0,0 +1,12 @@
+# This file is part of the standard setup for testthat.
+# It is recommended that you do not modify it.
+#
+# Where should you do additional test configuration?
+# Learn more about the roles of various files in:
+# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview
+# * https://testthat.r-lib.org/articles/special-files.html
+
+library(testthat)
+library(Advanced_R_Group_Cooperation)
+
+test_check("Advanced_R_Group_Cooperation")
diff --git a/tests/testthat/test.dijkstra.R b/tests/testthat/test.dijkstra.R
new file mode 100644
index 0000000000000000000000000000000000000000..f49d110330679e06c1302dc3b1d70be5155ec0ef
--- /dev/null
+++ b/tests/testthat/test.dijkstra.R
@@ -0,0 +1,23 @@
+#  context("dijkstra")
+library(testthat)
+
+wiki_graph <-
+  data.frame(v1=c(1,1,1,2,2,2,3,3,3,3,4,4,4,5,5,6,6,6),
+             v2=c(2,3,6,1,3,4,1,2,4,6,2,3,5,4,6,1,3,5),
+             w=c(7,9,14,7,10,15,9,10,11,2,15,11,6,6,9,14,2,9))
+
+test_that("outputs are correct in the Dijkstra algorithm.", {
+  expect_equal(dijkstra(wiki_graph,1), c(0,7,9,20,20,11))
+  expect_equal(dijkstra(wiki_graph,3), c(9,10,0,11,11,2))
+})
+
+
+test_that("Error messages are returned for erronous input in the Dijkstra algorithm.", {
+  wiki_wrong_graph <- wiki_graph
+  names(wiki_wrong_graph) <- c("v1, v3, w")
+  expect_error(dijkstra(wiki_wrong_graph, 3))
+  wiki_wrong_graph <- wiki_graph[1:2]
+  expect_error(dijkstra(wiki_wrong_graph, 3))
+  expect_error(dijkstra(wiki_graph, 7))
+  expect_error(dijkstra(as.matrix(wiki_graph), 3))  
+})
diff --git a/tests/testthat/test_euclidean.R b/tests/testthat/test_euclidean.R
new file mode 100644
index 0000000000000000000000000000000000000000..98138cdf3d88b3dae8f2683bde6ca94d40d1a319
--- /dev/null
+++ b/tests/testthat/test_euclidean.R
@@ -0,0 +1,15 @@
+library(testthat)
+
+
+test_that("GDC is calculated correctly.", {
+  expect_equal(euclidean(123612, 13892347912), 4)
+  expect_equal(euclidean(100, 1000), 100)
+  expect_equal(euclidean(-100, 1000), 100)
+})
+
+
+test_that("Wrong input throws an error.", {
+  expect_error(euclidean("100", 1000))  
+  expect_error(euclidean(100, "1000"))
+  expect_error(euclidean(TRUE, "1000"))  
+})
\ No newline at end of file