243 lines
8.1 KiB
Go
243 lines
8.1 KiB
Go
|
package companyAnalysis_test
|
||
|
|
||
|
import "seekia/internal/genetics/companyAnalysis"
|
||
|
|
||
|
import "seekia/internal/helpers"
|
||
|
|
||
|
import "testing"
|
||
|
import "strings"
|
||
|
import "errors"
|
||
|
|
||
|
func TestAncestralLocations_23andMe(t *testing.T){
|
||
|
|
||
|
allAncestryLocationsList, err := companyAnalysis.GetAllAncestryLocationsList_23andMe()
|
||
|
if (err != nil){
|
||
|
t.Fatalf("Failed to get all 23andMe ancestry locations list: " + err.Error())
|
||
|
}
|
||
|
|
||
|
containsDuplicates, duplicateLocationName := helpers.CheckIfListContainsDuplicates(allAncestryLocationsList)
|
||
|
if (containsDuplicates == true){
|
||
|
t.Fatalf("allAncestryLocationsList contains duplicate locationName: " + duplicateLocationName)
|
||
|
}
|
||
|
|
||
|
for _, locationName := range allAncestryLocationsList{
|
||
|
|
||
|
containsAny := strings.ContainsAny(locationName, "$+#")
|
||
|
if (containsAny == true){
|
||
|
t.Fatalf("allAncestryLocationsList contains invalid location: " + locationName)
|
||
|
}
|
||
|
}
|
||
|
|
||
|
ancestryContinentsList := companyAnalysis.GetAncestryContinentsList_23andMe()
|
||
|
|
||
|
for _, continentName := range ancestryContinentsList{
|
||
|
|
||
|
regionsList, err := companyAnalysis.GetAncestryContinentRegionsList_23andMe(continentName)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("GetAncestryContinentRegionsList_23andMe failed: " + err.Error())
|
||
|
}
|
||
|
|
||
|
for _, regionName := range regionsList{
|
||
|
|
||
|
parentContinentName, err := companyAnalysis.GetAncestryRegionParentContinent_23andMe(regionName)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("GetAncestryRegionContinent_23andMe failed: " + err.Error())
|
||
|
}
|
||
|
|
||
|
if (parentContinentName != continentName){
|
||
|
t.Fatalf("GetAncestryRegionParentContinent_23andMe returning invalid parent continent for region: " + regionName + ". Output: " + parentContinentName)
|
||
|
}
|
||
|
|
||
|
subregionsList, err := companyAnalysis.GetAncestryRegionSubregionsList_23andMe(continentName, regionName)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("GetAncestryRegionSubregionsList_23andMe failed: " + err.Error())
|
||
|
}
|
||
|
|
||
|
for _, subregionName := range subregionsList{
|
||
|
|
||
|
parentRegionName, err := companyAnalysis.GetAncestrySubregionParentRegion_23andMe(subregionName)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("GetAncestryRegionContinent_23andMe failed: " + err.Error())
|
||
|
}
|
||
|
if (parentRegionName != regionName){
|
||
|
t.Fatalf("GetAncestrySubregionParentRegion_23andMe returning invalid parent region for subregion: " + subregionName + ". Output: " + parentRegionName)
|
||
|
}
|
||
|
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
// TODO: Create a composition using all locations to learn the maximum size of this attribute
|
||
|
}
|
||
|
|
||
|
|
||
|
func TestAncestralSimilarity_23andMe(t *testing.T){
|
||
|
|
||
|
testAncestralSimilarity := func(person1ContinentsMap map[string]float64, person1RegionsMap map[string]float64, person1SubregionsMap map[string]float64, person2ContinentsMap map[string]float64, person2RegionsMap map[string]float64, person2SubregionsMap map[string]float64, expectedAncestralSimilarity int)error{
|
||
|
|
||
|
inputsAreValid, person1AncestryCompositionAttribute, err := companyAnalysis.CreateAncestryCompositionAttribute_23andMe(person1ContinentsMap, person1RegionsMap, person1SubregionsMap)
|
||
|
if (err != nil){ return err }
|
||
|
if (inputsAreValid == false){
|
||
|
return errors.New("testAncestralSimilarity called with invalid person1 location maps.")
|
||
|
}
|
||
|
|
||
|
inputsAreValid, person2AncestryCompositionAttribute, err := companyAnalysis.CreateAncestryCompositionAttribute_23andMe(person2ContinentsMap, person2RegionsMap, person2SubregionsMap)
|
||
|
if (err != nil){ return err }
|
||
|
if (inputsAreValid == false){
|
||
|
return errors.New("testAncestralSimilarity called with invalid person2 location maps.")
|
||
|
}
|
||
|
|
||
|
ancestralSimilarity, err := companyAnalysis.GetAncestralSimilarity_23andMe(true, person1AncestryCompositionAttribute, person2AncestryCompositionAttribute)
|
||
|
if (err != nil) { return err }
|
||
|
|
||
|
if (ancestralSimilarity != expectedAncestralSimilarity){
|
||
|
ancestralSimilarityString := helpers.ConvertIntToString(ancestralSimilarity)
|
||
|
expectedAncestralSimilarityString := helpers.ConvertIntToString(expectedAncestralSimilarity)
|
||
|
return errors.New("testAncestralSimilarity returning unexpected ancestral similarity: " + ancestralSimilarityString + " != " + expectedAncestralSimilarityString)
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
{
|
||
|
person1ContinentsMap := map[string]float64{
|
||
|
"Unassigned": 100,
|
||
|
}
|
||
|
person1RegionsMap := map[string]float64{}
|
||
|
person1SubregionsMap := map[string]float64{}
|
||
|
|
||
|
person2ContinentsMap := map[string]float64{
|
||
|
"Melanesian": 100,
|
||
|
}
|
||
|
person2RegionsMap := map[string]float64{}
|
||
|
person2SubregionsMap := map[string]float64{}
|
||
|
|
||
|
err := testAncestralSimilarity(person1ContinentsMap, person1RegionsMap, person1SubregionsMap, person2ContinentsMap, person2RegionsMap, person2SubregionsMap, 0)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("testAncestralSimilarity failed test 1: " + err.Error())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
person1ContinentsMap := map[string]float64{
|
||
|
"Melanesian": 100,
|
||
|
}
|
||
|
person1RegionsMap := map[string]float64{}
|
||
|
person1SubregionsMap := map[string]float64{}
|
||
|
|
||
|
person2ContinentsMap := map[string]float64{
|
||
|
"Melanesian": 100,
|
||
|
}
|
||
|
person2RegionsMap := map[string]float64{}
|
||
|
person2SubregionsMap := map[string]float64{}
|
||
|
|
||
|
err := testAncestralSimilarity(person1ContinentsMap, person1RegionsMap, person1SubregionsMap, person2ContinentsMap, person2RegionsMap, person2SubregionsMap, 100)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("testAncestralSimilarity failed test 2: " + err.Error())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
person1ContinentsMap := map[string]float64{
|
||
|
"Melanesian": 50,
|
||
|
"Unassigned": 50,
|
||
|
}
|
||
|
person1RegionsMap := map[string]float64{}
|
||
|
person1SubregionsMap := map[string]float64{}
|
||
|
|
||
|
person2ContinentsMap := map[string]float64{
|
||
|
"Melanesian": 50,
|
||
|
"Unassigned": 50,
|
||
|
}
|
||
|
person2RegionsMap := map[string]float64{}
|
||
|
person2SubregionsMap := map[string]float64{}
|
||
|
|
||
|
err := testAncestralSimilarity(person1ContinentsMap, person1RegionsMap, person1SubregionsMap, person2ContinentsMap, person2RegionsMap, person2SubregionsMap, 100)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("testAncestralSimilarity failed test 3: " + err.Error())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
person1ContinentsMap := map[string]float64{
|
||
|
"Melanesian": 100,
|
||
|
}
|
||
|
person1RegionsMap := map[string]float64{}
|
||
|
person1SubregionsMap := map[string]float64{}
|
||
|
|
||
|
person2ContinentsMap := map[string]float64{
|
||
|
"Melanesian": 50,
|
||
|
"Unassigned": 50,
|
||
|
}
|
||
|
person2RegionsMap := map[string]float64{}
|
||
|
person2SubregionsMap := map[string]float64{}
|
||
|
|
||
|
err := testAncestralSimilarity(person1ContinentsMap, person1RegionsMap, person1SubregionsMap, person2ContinentsMap, person2RegionsMap, person2SubregionsMap, 50)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("testAncestralSimilarity failed test 4: " + err.Error())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
person1ContinentsMap := map[string]float64{}
|
||
|
person1RegionsMap := map[string]float64{}
|
||
|
person1SubregionsMap := map[string]float64{
|
||
|
"Siberian": 100,
|
||
|
}
|
||
|
|
||
|
person2ContinentsMap := map[string]float64{}
|
||
|
person2RegionsMap := map[string]float64{}
|
||
|
person2SubregionsMap := map[string]float64{
|
||
|
"Siberian": 100,
|
||
|
}
|
||
|
|
||
|
err := testAncestralSimilarity(person1ContinentsMap, person1RegionsMap, person1SubregionsMap, person2ContinentsMap, person2RegionsMap, person2SubregionsMap, 100)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("testAncestralSimilarity failed test 5: " + err.Error())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
person1ContinentsMap := map[string]float64{}
|
||
|
person1RegionsMap := map[string]float64{}
|
||
|
person1SubregionsMap := map[string]float64{
|
||
|
"Siberian": 100,
|
||
|
}
|
||
|
|
||
|
person2ContinentsMap := map[string]float64{}
|
||
|
person2RegionsMap := map[string]float64{}
|
||
|
person2SubregionsMap := map[string]float64{
|
||
|
"Siberian": 100,
|
||
|
}
|
||
|
|
||
|
err := testAncestralSimilarity(person1ContinentsMap, person1RegionsMap, person1SubregionsMap, person2ContinentsMap, person2RegionsMap, person2SubregionsMap, 100)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("testAncestralSimilarity failed test 6: " + err.Error())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
{
|
||
|
person1ContinentsMap := map[string]float64{}
|
||
|
person1RegionsMap := map[string]float64{}
|
||
|
person1SubregionsMap := map[string]float64{
|
||
|
"Siberian": 100,
|
||
|
}
|
||
|
|
||
|
person2ContinentsMap := map[string]float64{}
|
||
|
person2RegionsMap := map[string]float64{}
|
||
|
person2SubregionsMap := map[string]float64{
|
||
|
"Manchurian & Mongolian": 100,
|
||
|
}
|
||
|
|
||
|
err := testAncestralSimilarity(person1ContinentsMap, person1RegionsMap, person1SubregionsMap, person2ContinentsMap, person2RegionsMap, person2SubregionsMap, 80)
|
||
|
if (err != nil){
|
||
|
t.Fatalf("testAncestralSimilarity failed test 7: " + err.Error())
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//TODO: Add more tests.
|
||
|
}
|
||
|
|
||
|
|
||
|
|