2024-06-15 02:43:01 +02:00
|
|
|
package createCoupleGeneticAnalysis_test
|
2024-04-11 15:51:56 +02:00
|
|
|
|
2024-06-15 02:43:01 +02:00
|
|
|
import "seekia/internal/genetics/createCoupleGeneticAnalysis"
|
2024-04-11 15:51:56 +02:00
|
|
|
|
|
|
|
import "seekia/internal/genetics/readGeneticAnalysis"
|
|
|
|
|
|
|
|
import "seekia/resources/geneticReferences/locusMetadata"
|
|
|
|
import "seekia/resources/geneticReferences/monogenicDiseases"
|
|
|
|
import "seekia/resources/geneticReferences/polygenicDiseases"
|
|
|
|
import "seekia/resources/geneticReferences/traits"
|
|
|
|
|
|
|
|
import "seekia/internal/genetics/createRawGenomes"
|
|
|
|
import "seekia/internal/genetics/prepareRawGenomes"
|
|
|
|
import "seekia/internal/helpers"
|
|
|
|
|
|
|
|
import "testing"
|
|
|
|
import "errors"
|
|
|
|
|
|
|
|
|
|
|
|
func TestCreateCoupleGeneticAnalysis_SingleGenomes(t *testing.T){
|
|
|
|
|
|
|
|
err := locusMetadata.InitializeLocusMetadataVariables()
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("InitializeLocusMetadataVariables failed: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
monogenicDiseases.InitializeMonogenicDiseaseVariables()
|
|
|
|
polygenicDiseases.InitializePolygenicDiseaseVariables()
|
2024-08-05 09:11:10 +02:00
|
|
|
|
|
|
|
err = traits.InitializeTraitVariables()
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("InitializeTraitVariables failed: " + err.Error())
|
|
|
|
}
|
2024-04-11 15:51:56 +02:00
|
|
|
|
|
|
|
getPersonGenomesList := func()([]prepareRawGenomes.RawGenomeWithMetadata, error){
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
genomeIdentifier, err := helpers.GetNewRandom16ByteArray()
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil) {
|
2024-06-02 10:43:39 +02:00
|
|
|
return nil, errors.New("Failed to get random 16 byte array: " + err.Error())
|
2024-04-11 15:51:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fakeRawGenome, _, _, _, err := createRawGenomes.CreateFakeRawGenome_AncestryDNA()
|
|
|
|
if (err != nil) {
|
|
|
|
return nil, errors.New("Failed to create fake raw AncestryDNA genome: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
genomeIsValid, rawGenomeWithMetadata, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier, fakeRawGenome)
|
|
|
|
if (err != nil){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error())
|
|
|
|
}
|
|
|
|
if (genomeIsValid == false){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.")
|
|
|
|
}
|
|
|
|
|
|
|
|
personGenomesList := []prepareRawGenomes.RawGenomeWithMetadata{rawGenomeWithMetadata}
|
|
|
|
|
|
|
|
return personGenomesList, nil
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
person1GenomesList, err := getPersonGenomesList()
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("getPersonGenomesList failed: " + err.Error())
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
person2GenomesList, err := getPersonGenomesList()
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("getPersonGenomesList failed: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
updateProgressFunction := func(_ int)error{
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
checkIfProcessIsStoppedFunction := func()bool{
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2024-06-15 02:43:01 +02:00
|
|
|
processCompleted, coupleGeneticAnalysis, err := createCoupleGeneticAnalysis.CreateCoupleGeneticAnalysis(person1GenomesList, person2GenomesList, updateProgressFunction, checkIfProcessIsStoppedFunction)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("Failed to create couple genetic analysis: " + err.Error())
|
|
|
|
}
|
|
|
|
if (processCompleted == false){
|
|
|
|
t.Fatalf("Failed to create couple genetic analysis: Process did not complete.")
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
coupleGeneticAnalysisObject, err := readGeneticAnalysis.ReadCoupleGeneticAnalysisString(coupleGeneticAnalysis)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("Failed to read couple genetic analysis string: " + err.Error())
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
err = readGeneticAnalysis.VerifyCoupleGeneticAnalysis(coupleGeneticAnalysisObject)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("Failed to read couple genetic analysis: " + err.Error())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestCreateCoupleGeneticAnalysis_SingleAndMultipleGenomes(t *testing.T){
|
|
|
|
|
|
|
|
err := locusMetadata.InitializeLocusMetadataVariables()
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("InitializeLocusMetadataVariables failed: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
monogenicDiseases.InitializeMonogenicDiseaseVariables()
|
|
|
|
polygenicDiseases.InitializePolygenicDiseaseVariables()
|
2024-08-05 09:11:10 +02:00
|
|
|
|
|
|
|
err = traits.InitializeTraitVariables()
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("InitializeTraitVariables failed: " + err.Error())
|
|
|
|
}
|
2024-04-11 15:51:56 +02:00
|
|
|
|
|
|
|
getPersonGenomesList := func(addSecondGenome bool)([]prepareRawGenomes.RawGenomeWithMetadata, error){
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
genomeIdentifier1, err := helpers.GetNewRandom16ByteArray()
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil) {
|
2024-06-02 10:43:39 +02:00
|
|
|
return nil, errors.New("Failed to get random 16 byte array: " + err.Error())
|
2024-04-11 15:51:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fakeRawGenome1, _, _, _, err := createRawGenomes.CreateFakeRawGenome_AncestryDNA()
|
|
|
|
if (err != nil) {
|
|
|
|
return nil, errors.New("Failed to create fake raw AncestryDNA genome: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
genomeIsValid, rawGenomeWithMetadata1, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier1, fakeRawGenome1)
|
|
|
|
if (err != nil){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error())
|
|
|
|
}
|
|
|
|
if (genomeIsValid == false){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.")
|
|
|
|
}
|
|
|
|
|
|
|
|
genomesList := []prepareRawGenomes.RawGenomeWithMetadata{rawGenomeWithMetadata1}
|
|
|
|
|
|
|
|
if (addSecondGenome == true){
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
genomeIdentifier2, err := helpers.GetNewRandom16ByteArray()
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil) {
|
2024-06-02 10:43:39 +02:00
|
|
|
return nil, errors.New("Failed to get random 16 byte array: " + err.Error())
|
2024-04-11 15:51:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fakeRawGenome2, _, _, _, err := createRawGenomes.CreateFakeRawGenome_23andMe()
|
|
|
|
if (err != nil) {
|
|
|
|
return nil, errors.New("Failed to create fake raw 23andMe genome: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
genomeIsValid, rawGenomeWithMetadata2, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier2, fakeRawGenome2)
|
|
|
|
if (err != nil){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error())
|
|
|
|
}
|
|
|
|
if (genomeIsValid == false){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.")
|
|
|
|
}
|
|
|
|
|
|
|
|
genomesList = append(genomesList, rawGenomeWithMetadata2)
|
|
|
|
}
|
|
|
|
|
|
|
|
return genomesList, nil
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
person1GenomesList, err := getPersonGenomesList(false)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("getPersonGenomesList failed: " + err.Error())
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
person2GenomesList, err := getPersonGenomesList(true)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("getPersonGenomesList failed: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
updateProgressFunction := func(_ int)error{
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
checkIfProcessIsStoppedFunction := func()bool{
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2024-06-15 02:43:01 +02:00
|
|
|
processCompleted, coupleGeneticAnalysis, err := createCoupleGeneticAnalysis.CreateCoupleGeneticAnalysis(person1GenomesList, person2GenomesList, updateProgressFunction, checkIfProcessIsStoppedFunction)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("Failed to create couple genetic analysis: " + err.Error())
|
|
|
|
}
|
|
|
|
if (processCompleted == false){
|
|
|
|
t.Fatalf("Failed to create couple genetic analysis: Process did not complete.")
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
coupleGeneticAnalysisObject, err := readGeneticAnalysis.ReadCoupleGeneticAnalysisString(coupleGeneticAnalysis)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("Failed to read couple genetic analysis string: " + err.Error())
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
err = readGeneticAnalysis.VerifyCoupleGeneticAnalysis(coupleGeneticAnalysisObject)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("Failed to read couple genetic analysis: " + err.Error())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func TestCreateCoupleGeneticAnalysis_MultipleGenomes(t *testing.T){
|
|
|
|
|
|
|
|
err := locusMetadata.InitializeLocusMetadataVariables()
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("InitializeLocusMetadataVariables failed: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
monogenicDiseases.InitializeMonogenicDiseaseVariables()
|
|
|
|
polygenicDiseases.InitializePolygenicDiseaseVariables()
|
2024-08-05 09:11:10 +02:00
|
|
|
|
|
|
|
err = traits.InitializeTraitVariables()
|
|
|
|
if (err != nil) {
|
|
|
|
t.Fatalf("InitializeTraitVariables failed: " + err.Error())
|
|
|
|
}
|
2024-04-11 15:51:56 +02:00
|
|
|
|
|
|
|
getPersonGenomesList := func()([]prepareRawGenomes.RawGenomeWithMetadata, error){
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
genomeIdentifier1, err := helpers.GetNewRandom16ByteArray()
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil) {
|
2024-06-02 10:43:39 +02:00
|
|
|
return nil, errors.New("Failed to get random 16 byte array: " + err.Error())
|
2024-04-11 15:51:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fakeRawGenome1, _, _, _, err := createRawGenomes.CreateFakeRawGenome_AncestryDNA()
|
|
|
|
if (err != nil) {
|
|
|
|
return nil, errors.New("Failed to create fake raw AncestryDNA genome: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
genomeIsValid, rawGenomeWithMetadata1, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier1, fakeRawGenome1)
|
|
|
|
if (err != nil){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error())
|
|
|
|
}
|
|
|
|
if (genomeIsValid == false){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.")
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
genomeIdentifier2, err := helpers.GetNewRandom16ByteArray()
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil) {
|
2024-06-02 10:43:39 +02:00
|
|
|
return nil, errors.New("Failed to get random 16 byte array: " + err.Error())
|
2024-04-11 15:51:56 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
fakeRawGenome2, _, _, _, err := createRawGenomes.CreateFakeRawGenome_23andMe()
|
|
|
|
if (err != nil) {
|
|
|
|
return nil, errors.New("Failed to create fake raw 23andMe genome: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
genomeIsValid, rawGenomeWithMetadata2, err := prepareRawGenomes.CreateRawGenomeWithMetadataObject(genomeIdentifier2, fakeRawGenome2)
|
|
|
|
if (err != nil){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: " + err.Error())
|
|
|
|
}
|
|
|
|
if (genomeIsValid == false){
|
|
|
|
return nil, errors.New("CreateRawGenomeWithMetadataObject failed: Genome is not valid.")
|
|
|
|
}
|
|
|
|
|
|
|
|
genomesList := []prepareRawGenomes.RawGenomeWithMetadata{rawGenomeWithMetadata1, rawGenomeWithMetadata2}
|
|
|
|
|
|
|
|
return genomesList, nil
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
person1GenomesList, err := getPersonGenomesList()
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("getPersonGenomesList failed: " + err.Error())
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
person2GenomesList, err := getPersonGenomesList()
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("getPersonGenomesList failed: " + err.Error())
|
|
|
|
}
|
|
|
|
|
|
|
|
updateProgressFunction := func(_ int)error{
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
checkIfProcessIsStoppedFunction := func()bool{
|
|
|
|
return false
|
|
|
|
}
|
|
|
|
|
2024-06-15 02:43:01 +02:00
|
|
|
processCompleted, coupleGeneticAnalysis, err := createCoupleGeneticAnalysis.CreateCoupleGeneticAnalysis(person1GenomesList, person2GenomesList, updateProgressFunction, checkIfProcessIsStoppedFunction)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("Failed to create couple genetic analysis: " + err.Error())
|
|
|
|
}
|
|
|
|
if (processCompleted == false){
|
|
|
|
t.Fatalf("Failed to create couple genetic analysis: Process did not complete.")
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
coupleGeneticAnalysisObject, err := readGeneticAnalysis.ReadCoupleGeneticAnalysisString(coupleGeneticAnalysis)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("Failed to read couple genetic analysis string: " + err.Error())
|
|
|
|
}
|
|
|
|
|
2024-06-02 10:43:39 +02:00
|
|
|
err = readGeneticAnalysis.VerifyCoupleGeneticAnalysis(coupleGeneticAnalysisObject)
|
2024-04-11 15:51:56 +02:00
|
|
|
if (err != nil){
|
|
|
|
t.Fatalf("Failed to read couple genetic analysis: " + err.Error())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2024-06-15 02:43:01 +02:00
|
|
|
|