First domain string.
Second domain string.
Whether or not to do reverse domain matching.
Whether or not comparison should be done on a case-sensitive basis.
The number of domains the two strings share.
TODO: Support partial globs.
int numDomains = sharedDomains("irc.freenode.net", "leguin.freenode.net"); assert(numDomains == 2); // freenode.net int numDomains2 = sharedDomains("Portlane2.EU.GameSurge.net", "services.gamesurge.net", caseSensitive:false); assert(numDomains2 == 2); // gamesurge.net int numDomains3 = sharedDomains("org.kde.Platform", "org.kde.KStyle.Awaita", reverse: true); assert(numDomains3 == 2); // org.kde
1 import std.conv : text; 2 3 { 4 immutable n = sharedDomains("irc.freenode.net", "help.freenode.net"); 5 assert((n == 2), n.text); 6 } 7 { 8 immutable n = sharedDomains("irc.rizon.net", "services.rizon.net"); 9 assert((n == 2), n.text); 10 } 11 { 12 immutable n = sharedDomains("www.google.com", "www.yahoo.com"); 13 assert((n == 1), n.text); 14 } 15 { 16 immutable n = sharedDomains("www.google.se", "www.google.co.uk"); 17 assert((n == 0), n.text); 18 } 19 { 20 immutable n = sharedDomains("", string.init); 21 assert((n == 0), n.text); 22 } 23 { 24 immutable n = sharedDomains("irc.rizon.net", "rizon.net"); 25 assert((n == 2), n.text); 26 } 27 { 28 immutable n = sharedDomains("rizon.net", "rizon.net"); 29 assert((n == 2), n.text); 30 } 31 { 32 immutable n = sharedDomains("net", "net"); 33 assert((n == 1), n.text); 34 } 35 { 36 immutable n = sharedDomains("forum.dlang.org", "..."); 37 assert((n == 0), n.text); 38 } 39 { 40 immutable n = sharedDomains("blahrizon.net", "rizon.net"); 41 assert((n == 1), n.text); 42 } 43 { 44 immutable n = sharedDomains("rizon.net", "blahrizon.net"); 45 assert((n == 1), n.text); 46 } 47 { 48 immutable n = sharedDomains("rizon.net", "irc.rizon.net"); 49 assert((n == 2), n.text); 50 } 51 { 52 immutable n = sharedDomains("irc.gamesurge.net", "Stuff.GameSurge.net", caseSensitive:false); 53 assert((n == 2), n.text); 54 } 55 { 56 immutable n = sharedDomains("irc.freenode.net", "irc.FREENODE.net", caseSensitive:false); 57 assert((n == 3), n.text); 58 } 59 60 /+ 61 Reverse domains, like those of flatpak application IDs. 62 +/ 63 { 64 immutable n = sharedDomains("irc.SpotChat.org", "irc.FREENODE.net", caseSensitive:false); 65 assert((n == 0), n.text); 66 } 67 { 68 immutable n = sharedDomains("org.kde.Plasma", "org.kde.Kate", reverse: true); 69 assert((n == 2), n.text); 70 } 71 { 72 immutable n = sharedDomains("com.redhat.Something", "com.redhat.Other", reverse: true); 73 assert((n == 2), n.text); 74 } 75 { 76 immutable n = sharedDomains( 77 "org.freedesktop.Platform.GL.default", 78 "org.freedesktop.Platform.VAAPI.Intel", 79 reverse: true); 80 assert((n == 3), n.text); 81 } 82 { 83 immutable n = sharedDomains("org.kde.Platform", "im.riot.Riot", reverse: true); 84 assert((n == 0), n.text); 85 }
Calculates how many dot-separated domains two strings share.
This is useful to see to what extent two addresses are similar.
Pass reverse: true to do reverse domain matching, like for flatpak application IDs.