lib/accy/src/kernel/library/histogram/family/test.zig

daab053ee43316e1809a84551d573ddd1e5bf3d2

 1 const std = @import("std");
 2 const family = @import("root.zig");
 3 
 4 const HistogramBinningPolicy = family.HistogramBinningPolicy;
 5 const HistogramVariant = family.HistogramVariant;
 6 const Histogram = family.Histogram;
 7 const histogram_family_version = family.histogram_family_version;
 8 const histogram_shared_bins_cap = family.histogram_shared_bins_cap;
 9 const histogram_binning_policy_parameter = family.histogram_binning_policy_parameter;
10 const histogramDTypeSupported = family.histogramDTypeSupported;
11 const histogramInstanceValid = family.histogramInstanceValid;
12 const histogramBinningPolicyCode = family.histogramBinningPolicyCode;
13 const histogramBinningPolicyFromCode = family.histogramBinningPolicyFromCode;
14 const histogramBinForValue = family.histogramBinForValue;
15 const histogramFamilyTarget = family.histogramFamilyTarget;
16 const histogramFamilyEntryName = family.histogramFamilyEntryName;
17 const HistogramResolvedSchedule = family.HistogramResolvedSchedule;
18 const histogramTuningExtents = family.histogramTuningExtents;
19 const histogramTuningOperation = family.histogramTuningOperation;
20 const histogramFamilyTuningKey = family.histogramFamilyTuningKey;
21 const resolveHistogramSchedule = family.resolveHistogramSchedule;
22 const histogramThreadsForCount = family.histogramThreadsForCount;
23 const histogramThreadCandidatesForCount = family.histogramThreadCandidatesForCount;
24 const histogramRuntimeArguments = family.histogramRuntimeArguments;
25 const HistogramRuntimeFamilyF32 = family.HistogramRuntimeFamilyF32;
26 const createHistogramFamilyArtifact = family.createHistogramFamilyArtifact;
27 const histogramShapeFamily = family.histogramShapeFamily;
28 const histogramFamilyFingerprint = family.histogramFamilyFingerprint;
29 const histogramShapeProfileDimensions = family.histogramShapeProfileDimensions;
30 const histogramFamilySpecialization = family.histogramFamilySpecialization;
31 const histogramInstanceFromSpecialization = family.histogramInstanceFromSpecialization;
32 
33 test {
34     @import("test_discovery").discover(@import("binning.zig"));
35     @import("test_discovery").discover(@import("model.zig"));
36     @import("test_discovery").discover(@import("naming.zig"));
37     _ = @import("runtime/test.zig");
38     @import("test_discovery").discover(@import("shape.zig"));
39     _ = @import("specialization.zig");
40     _ = @import("tuning.zig");
41     @import("test_discovery").discover(family);
42 }
43 
44 test "histogram identity and validity" {
45     const shared_instance = Histogram{ .bins = 256, .count = 8192, .variant = .shared_bins, .threads = 128 };
46     const shared_target = try histogramFamilyTarget(std.testing.allocator, shared_instance);
47     defer std.testing.allocator.free(shared_target);
48     try std.testing.expectEqualStrings("accy.kernel.histogram.histogram_family_shared256_128_f32", shared_target);
49 
50     try std.testing.expect(histogramInstanceValid(shared_instance));
51     try std.testing.expect(!histogramInstanceValid(.{ .bins = 8, .count = 0 }));
52     try std.testing.expect(!histogramInstanceValid(.{ .bins = 8, .count = 16, .width = 0 }));
53     try std.testing.expect(!histogramInstanceValid(.{
54         .bins = histogram_shared_bins_cap + 1,
55         .count = 16,
56         .variant = .shared_bins,
57     }));
58 
59     var owned = try histogramFamilySpecialization(std.testing.allocator, .{ .bins = 64, .count = 4096, .variant = .shared_bins, .threads = 64 });
60     defer owned.deinit();
61     try std.testing.expect(owned.value.structureIs("shared_bins"));
62     try std.testing.expect(owned.value.operationIs(.{ .indexing = .histogram }));
63     try std.testing.expectEqual(@as(usize, 1), owned.value.static_parameters.len);
64     try std.testing.expect(owned.value.staticParameterMatches(
65         histogram_binning_policy_parameter,
66         histogramBinningPolicyCode(.lower_inclusive_upper_exclusive),
67     ));
68 }
69 
70 test "accy kernel library histogram family declaration coverage" {
71     std.testing.refAllDecls(@import("binning.zig"));
72     std.testing.refAllDecls(@import("model.zig"));
73     std.testing.refAllDecls(@import("naming.zig"));
74     std.testing.refAllDecls(@import("shape.zig"));
75     std.testing.refAllDecls(family);
76 }