Skip to content

Commit

Permalink
Add tests for network simplification using both algorithms
Browse files Browse the repository at this point in the history
Signed-off-by: Maximilian Löffler <s8maloef@stud.uni-saarland.de>
  • Loading branch information
MaLoefUDS committed Mar 7, 2024
1 parent 78f4351 commit 338b069
Showing 1 changed file with 147 additions and 0 deletions.
147 changes: 147 additions & 0 deletions tests/test-networks.R
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,153 @@ test_that("Simplify network with more than one relation", {

})

test_that("Simplify basic multi-relational network", {

##
## Simplify networks with vertices connected by multi-relational edges
##

## create network configuration
net.conf = NetworkConf$new()

## create artifact network with vertices connected by "cochange" and "mail edges"
network =
igraph::make_empty_graph(n = 0, directed = FALSE) +
igraph::vertices("A", "B", type = TYPE.ARTIFACT, kind = "feature")
for (i in 1:3) {
network = igraph::add.edges(network, c("A", "B"), type = TYPE.EDGES.INTRA, relation = "mail")
network = igraph::add.edges(network, c("A", "B"), type = TYPE.EDGES.INTRA, relation = "cochange")
}

network.expected = igraph::make_empty_graph(n = 0, directed = FALSE) +
igraph::vertices("A", "B", type = TYPE.ARTIFACT, kind = "feature") +
igraph::edges("A", "B", type = TYPE.EDGES.INTRA, relation = "mail") +
igraph::edges("A", "B", type = TYPE.EDGES.INTRA, relation = "cochange")

## simplify network without simplifying multiple relations into single edges
network.simplified = simplify.network(network, simplify.multiple.relations = FALSE)
assert.networks.equal(network.simplified, network.expected)

## simplify network with simplifying multiple relations into single edges
network.simplified = simplify.network(network, simplify.multiple.relations = TRUE)
network.simplified = simplify.network(network, simplify.multiple.relations = TRUE)
expect_identical(igraph::ecount(simplify.network(network.simplified)), 1)
expect_identical(igraph::E(network.simplified)$type[[1]], "Unipartite")
expect_identical(igraph::E(network.simplified)$relation[[1]], c("cochange", "mail"))
})

test_that("Simplify author-network with relation = c('cochange', 'mail') using both algorithms", {

## configurations
proj.conf = ProjectConf$new(CF.DATA, CF.SELECTION.PROCESS, CASESTUDY, ARTIFACT)
proj.conf$update.value("commits.filter.base.artifact", FALSE)
net.conf = NetworkConf$new()
net.conf$update.values(updated.values = list(author.relation = c("cochange", "mail")))

## construct objects
proj.data = ProjectData$new(project.conf = proj.conf)
network.builder = NetworkBuilder$new(project.data = proj.data, network.conf = net.conf)

## vertex attributes
authors = data.frame(name = c("Björn", "Olaf", "Karl", "Thomas", "udo", "Fritz fritz@example.org", "georg", "Hans"),
kind = TYPE.AUTHOR,
type = TYPE.AUTHOR)


## ---------------------- simplify.multiple.relations == FALSE -------------------------- ##

## edge attributes
data = data.frame(comb.1. = c("Björn", "Olaf", "Olaf", "Karl", # cochange
"Björn", "Olaf"), # mail
comb.2. = c("Olaf", "Karl", "Thomas", "Thomas", # cochange
"Olaf", "Thomas")) # mail
data$date = list(get.date.from.string(c("2016-07-12 15:58:59", "2016-07-12 16:00:45")),
get.date.from.string(c("2016-07-12 16:05:41", "2016-07-12 16:06:10")),
get.date.from.string(c("2016-07-12 16:05:41", "2016-07-12 16:06:32")),
get.date.from.string(c("2016-07-12 16:06:10", "2016-07-12 16:06:32")), # cochange
get.date.from.string(c("2016-07-12 15:58:40", "2016-07-12 15:58:50")),
get.date.from.string(c("2016-07-12 16:04:40", "2016-07-12 16:05:37"))) # mail
data$artifact.type = list(c("Feature", "Feature"), c("Feature", "Feature"),
c("Feature", "Feature"), c("Feature", "Feature"), # cochange
c("Mail", "Mail"), c("Mail", "Mail")) # mail
data$hash = list(c("72c8dd25d3dd6d18f46e2b26a5f5b1e2e8dc28d0", "5a5ec9675e98187e1e92561e1888aa6f04faa338"),
c("3a0ed78458b3976243db6829f63eba3eead26774", "1143db502761379c2bfcecc2007fc34282e7ee61"),
c("3a0ed78458b3976243db6829f63eba3eead26774", "0a1a5c523d835459c42f33e863623138555e2526"),
c("1143db502761379c2bfcecc2007fc34282e7ee61", "0a1a5c523d835459c42f33e863623138555e2526"),
as.character(c(NA, NA)), as.character(c(NA, NA)))
data$file = list(c("test.c", "test.c"), c("test2.c", "test3.c"), c("test2.c", "test2.c"), c("test3.c", "test2.c"),
as.character(c(NA, NA)), as.character(c(NA, NA)))
data$artifact = list(c("A", "A"), c("Base_Feature", "Base_Feature"), c("Base_Feature", "Base_Feature"),
c("Base_Feature", "Base_Feature"), as.character(c(NA, NA)), as.character(c(NA, NA)))
data$weight = rep(2, 6)
data$type = rep(TYPE.EDGES.INTRA, 6)
data$relation = c(rep("cochange", 4), rep("mail", 2))
data$message.id = list(as.character(c(NA, NA)), as.character(c(NA, NA)), as.character(c(NA, NA)), as.character(c(NA, NA)),
c("<4cbaa9ef0802201124v37f1eec8g89a412dfbfc8383a@mail.gmail.com>",
"<6784529b0802032245r5164f984l342f0f0dc94aa420@mail.gmail.com>"),
c("<65a1sf31sagd684dfv31@mail.gmail.com>",
"<9b06e8d20801220234h659c18a3g95c12ac38248c7e0@mail.gmail.com>"))
data$thread = list(as.character(c(NA, NA)), as.character(c(NA, NA)), as.character(c(NA, NA)), as.character(c(NA, NA)),
c("<thread-13#8>", "<thread-13#8>"), c("<thread-13#9>", "<thread-13#9>"))

## build expected network
network.expected = igraph::graph.data.frame(data, vertices = authors,
directed = net.conf$get.value("author.directed"))

## build network and simplify it
network.built = simplify.network(network.builder$get.author.network())

assert.networks.equal(network.built, network.expected)


## ---------------------- simplify.multiple.relations == TRUE --------------------------- ##

data = data.frame(comb.1. = c("Björn", "Olaf", "Olaf", "Karl"),
comb.2. = c("Olaf", "Karl", "Thomas", "Thomas"))

data$date = list(get.date.from.string(c("2016-07-12 15:58:59", "2016-07-12 16:00:45", # cochange
"2016-07-12 15:58:40", "2016-07-12 15:58:50")), # mail
get.date.from.string(c("2016-07-12 16:05:41", "2016-07-12 16:06:10")), # cochange
get.date.from.string(c("2016-07-12 16:05:41", "2016-07-12 16:06:32", # cochange
"2016-07-12 16:04:40", "2016-07-12 16:05:37")), # mail
get.date.from.string(c("2016-07-12 16:06:10", "2016-07-12 16:06:32"))) # cochange
data$artifact.type = list(c("Feature", "Feature", "Mail", "Mail"),
c("Feature", "Feature"),
c("Feature", "Feature", "Mail", "Mail"),
c("Feature", "Feature"))
data$hash = list(as.character(c("72c8dd25d3dd6d18f46e2b26a5f5b1e2e8dc28d0", "5a5ec9675e98187e1e92561e1888aa6f04faa338", NA, NA)),
c("3a0ed78458b3976243db6829f63eba3eead26774", "1143db502761379c2bfcecc2007fc34282e7ee61"),
as.character(c("3a0ed78458b3976243db6829f63eba3eead26774", "0a1a5c523d835459c42f33e863623138555e2526", NA, NA)),
c("1143db502761379c2bfcecc2007fc34282e7ee61", "0a1a5c523d835459c42f33e863623138555e2526"))
data$file = list(as.character(c("test.c", "test.c", NA, NA)), c("test2.c", "test3.c"),
as.character(c("test2.c", "test2.c", NA, NA)), c("test3.c", "test2.c"))
data$artifact = list(as.character(c("A", "A", NA, NA)), c("Base_Feature", "Base_Feature"),
as.character(c("Base_Feature", "Base_Feature", NA, NA)), c("Base_Feature", "Base_Feature"))
data$weight = c(4, 2, 4, 2)
data$type = rep(TYPE.EDGES.INTRA, 4)
data$relation = list(c("cochange", "mail"), c("cochange"), c("cochange", "mail"), c("cochange"))
data$message.id = list(as.character(c(NA, NA, "<4cbaa9ef0802201124v37f1eec8g89a412dfbfc8383a@mail.gmail.com>",
"<6784529b0802032245r5164f984l342f0f0dc94aa420@mail.gmail.com>")),
as.character(c(NA, NA)),
as.character(c(NA, NA, "<65a1sf31sagd684dfv31@mail.gmail.com>",
"<9b06e8d20801220234h659c18a3g95c12ac38248c7e0@mail.gmail.com>")),
as.character(c(NA, NA)))
data$thread = list(as.character(c(NA, NA, "<thread-13#8>", "<thread-13#8>")),
as.character(c(NA, NA)),
as.character(c(NA, NA, "<thread-13#9>", "<thread-13#9>")),
as.character(c(NA, NA)))

## build expected network
network.expected = igraph::graph.data.frame(data, vertices = authors,
directed = net.conf$get.value("author.directed"))

## build network and simplify it
network.built = simplify.network(network.builder$get.author.network(), simplify.multiple.relations = TRUE)

assert.networks.equal(network.built, network.expected)

})


## / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / / /
## Merge -------------------------------------------------------------------
Expand Down

0 comments on commit 338b069

Please sign in to comment.