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 }