From 00a749a3a641799c1732d1a2a6ec81c18d63eaa8 Mon Sep 17 00:00:00 2001 From: Adam Joseph Date: Thu, 22 Jun 2023 00:18:31 -0700 Subject: lib/system: move toLosslessStringMaybe into lib/tests toLosslessStringMaybe is not used by anything other than lib/tests, so it can be private to that file. I don't think this function was terribly well thought-through. If people start using it, we will become permanently dependent on the ability to test platforms for equality. It also makes the elaboration process more fragile, because it encourages code outside of nixpkgs to become sensitive to the minute details of how elaboration happens. --- lib/tests/systems.nix | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) (limited to 'lib/tests/systems.nix') diff --git a/lib/tests/systems.nix b/lib/tests/systems.nix index 862496313e902..fe4657c9dee62 100644 --- a/lib/tests/systems.nix +++ b/lib/tests/systems.nix @@ -9,6 +9,22 @@ let expr = lib.sort lib.lessThan x; expected = lib.sort lib.lessThan y; }; + + /* + Try to convert an elaborated system back to a simple string. If not possible, + return null. So we have the property: + + sys: _valid_ sys -> + sys == elaborate (toLosslessStringMaybe sys) + + NOTE: This property is not guaranteed when `sys` was elaborated by a different + version of Nixpkgs. + */ + toLosslessStringMaybe = sys: + if lib.isString sys then sys + else if lib.systems.equals sys (lib.systems.elaborate sys.system) then sys.system + else null; + in lib.runTests ( # We assert that the new algorithmic way of generating these lists matches the @@ -55,11 +71,11 @@ lib.runTests ( }; test_toLosslessStringMaybe_example_x86_64-linux = { - expr = lib.systems.toLosslessStringMaybe (lib.systems.elaborate "x86_64-linux"); + expr = toLosslessStringMaybe (lib.systems.elaborate "x86_64-linux"); expected = "x86_64-linux"; }; test_toLosslessStringMaybe_fail = { - expr = lib.systems.toLosslessStringMaybe (lib.systems.elaborate "x86_64-linux" // { something = "extra"; }); + expr = toLosslessStringMaybe (lib.systems.elaborate "x86_64-linux" // { something = "extra"; }); expected = null; }; } -- cgit 1.4.1